PHP反序列化-[祥云杯2021 ez_yii]
First Post:
Last Update:
Word Count:
Read Time:
Last Update:
Word Count:
1.2k
Read Time:
7 min
ez_yii [祥云杯2021]
Analyze
先上题
index.php
PHP - 12 lines
expand
1 |
|
autoload.php
PHP - 39 lines
expand
1 |
|
functions.php
PHP - 41 lines
expand
1 |
|
RunProcess.php
PHP - 32 lines
expand
1 |
|
DefaultGenerator.php
PHP - 15 lines
expand
1 |
|
AppendStream.php
PHP - 41 lines
expand
1 |
|
CachingStream.php
PHP - 63 lines
expand
1 |
|
PumpStream.php
PHP - 53 lines
expand
1 |
|
这次的代码比较多,需要进行一点点剖析
进行逆向分析:
首先观察到在PumpStream.php
中存在函数call_user_func()
,可以考虑利用,往上逐个观察,函数call_user_func()
在函数pump()
中,再次往上,函数read()
在if($remaining)
的条件下会调用函数pump()
全局搜索函数read()
,在CachingStream.php
中找到了同名函数read()
,可以将其作为跳板,而在函数seek()
中,调用了函数read()
,又在函数rewind()
中被调用
再次全局搜索函数rewind()
,在AppendStream.php
中找到了同名函数rewind()
,又可以作为跳板
进行正向分析:
在RunProcess.php
中,函数__destruct()
调用了函数stopProcess()
,可以联想到使用函数__call()
,发现在DefaultGenerator.php
中,发现还需要一个函数__toString()
,可以在AppendStream.php
中找到
正向逆向分析完成,可以得到如下POP链
PHP - 5 lines
expand
1 |
|
POC
PHP - 103 lines
expand
1 |
|
反序列化后对data
进行POST
传参即可得到flag
reward
Alipay


Wechat


v1.5.2