打开题目地址得到源码 这题的突破点就是 ini_set(‘session.serialize_handler’, ‘php’); 查了下手册:
php大于5.5.4的版本中默认使用php_serialize规则
通过phpinfo页面,我们知道php.ini中默认session.serialize_handler为php_serialize,而index.php中将其设置为php。这就导致了seesion的反序列化问题。 再看到 当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在
S
E
S
S
I
O
N
中
添
加
一
组
数
据
。
所
以
可
以
通
过
S
e
s
s
i
o
n
U
p
l
o
a
d
P
r
o
g
r
e
s
s
来
设
置
s
e
s
s
i
o
n
。
但
是
有
一
个
问
题
,
在
题
目
代
码
中
,
没
值
是
用
来
接
受
我
传
入
的
数
据
,
并
储
存
到
_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。 但是有一个问题,在题目代码中,没值是用来接受我传入的数据,并储存到
S?ESSION中添加一组数据。所以可以通过SessionUploadProgress来设置session。但是有一个问题,在题目代码中,没值是用来接受我传入的数据,并储存到_SESSION中的。
是有办法传入$_SESSION数据的,这里就利用到了|的反序列化问题
思路很明显了,需要构造一个上传和post同时进行的情况,代码如下: 构造完了之后该考虑序列化了,构造payload 打开写的html文件抓包修改填入payload 查看该文件得到flag, ps:一个好像只能用一次,没成功需要重新抓包, 注意用的函数不一样,scandir()和readfile()
|