4-POP链

POP链前置知识 成员属性赋值对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class index {
private $test;
public function __construct(){
$this->test = new normal();
}
public function __destruct(){
$this->test->action();
}
}
class normal {
public function action(){
echo "please attack me";
}
}
class evil {
var $test2;
public function action(){
eval($this->test2);
}
}
unserialize($_GET['test']);
?>

?1 : 如何控制你的对象里的成员属性的对象是那一个 ?
?2: 学习使用反推法

edusrc信息泄露挖掘
5-字符串逃逸

字符串减少

反序列化分隔符
反序列化以;}结束,后面的字符串不影响正常的反序列化
属性逃逸
一般在数据先经过一次serialize再经过unserialize,
在这个中间反序列化的字符串变多或者变少的时候有可能存在反序列化属性逃逸。

image.png
这样是反序列不了 , 成员属性 不对 $b成员属性是两个
所以要改成
image.png

6-反序列化漏洞--CVE,session,phar

CVE-2016-7124

漏洞产生原因:
如果存在_wakeup方法,调用unserilize()方法前则先调用_wakeup方法,
但是序列化字符串中表示对象属性个数的值大于真实的属性个数时,会跳过__wakeup()的执行

版本:
PHP5<5.6.25
PHP7<7.0.10

4-关于魔术方法?

什么是魔术方法

一个预定义好的,在特定情况下自动触发的行为方法。