关于反序列化的姿势:
反序列化考点
字符串逃逸
POP构造链
反序列化做题姿势
1首先 正常创建类 有方法调用方法 总之要得到想要的内容
2其次 对创建的类进行序列化 并打印出序列化的内容 需要绕过就更改里面的内容
3最后 把序列化后的内容 进行提交 有需要编码 就进行编码
pop链构造做题姿势
phar反序列化的三个前提条件> 可以上传phar文件
有可以利用的魔术方法
文件操作函数的参数可控
1、找到可利用的地方,比如,文件包含,命令执行等地方
2、从可以利用地方回溯到可控制的地方,找到一个链条。
3、更改属性内容,先进行序列化,看看能不能达到目的。
4、能够达到目的,才进行反序列化,进行提交 有需要编码 就进行编码
魔法方法
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:
1 | 1. __construct(),类的构造函数 |
phar反序列化利用
可以代替unserialize 进行反序列化操作的函数
fileatime
filectime
file_exists
file_get_contents
file_put_contents
file
filegroup
fopen
fileinode
filemtime
fileowner
fikeperms
is_dir
is_executable
is_file
is_link
is_readable
is_writable
is_writeable
parse_ini_file
copy
unlink
stat
readfile
注意:生成phar文件//生成phar文件前需要配置php.ini
[Phar]
; http://php.net/phar.readonly
phar.readonly = On 改成 Off
创建对象 exp.phar 是文件名
$phar = new Phar(‘exp.phar’);
$phar->startBuffering();
// 设置stub
$phar->setStub(‘‘);
$phar->setMetadata($c1);
// 要压缩的文件
$phar->addFromString(‘exp.txt’,’test’);
$phar->stopBuffering();
特性
在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在wakeup的漏洞
绕过_wakeup魔法方法
绕过方法:只需要将对象属性数量设置比原本的要大即可
利用php>7.1版本对类属性的检测不严格(对属性类型不敏感)
意味着 序列化的时候可以将portected属性换成public属性
1 | Private 权限 |
反序列化原生类的利用
http://www.wangqingzheng.com/anquanke/82/238482.html