ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

反序列化字符串逃逸 [安洵杯 2019]easy_serialize_php1

2026/9/19 2:10:04 拓冰建站 浏览量
反序列化字符串逃逸 [安洵杯 2019]easy_serialize_php1

打开题目

$_SESSION是访客与整个网站交互过程中一直存在的公有变量

然后看extract()函数的功能:

extract($_POST)就是将post的内容作为这个函数的参数。

extract() 函数从数组中将变量导入到当前的符号表(本题的作用是将_SESSION的两个函数变为post传参)
function的value是由$_GET['f']传进来的
当以get方法传入img_path的情况下,$_SESSION['img']为传入的img_path进行base64加密和sha1加密

然后就是变量覆盖。如果post传参为_SESSION[flag]=123,那么$_SESSION["user"]和$_SESSION["function"]的值都会被覆盖

至于为什么post要传_SESSION[flag]=123而不是$_SESSION[flag]=123,是因为_SESSION是变量名,如果传$_SESSION,那么就会失效。

在这里题目给了我们提示

 eval('phpinfo();'); //maybe you can find something in here!

先?f=phpinfo

得到了flag文件的名字

直接改userinfo[‘img’]

payload

_SESSION[user]=flagflagflagflagflagphp&_SESSION[function]=";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}

flag和php是敏感字符,在使用的时候被过滤掉了,但序列化记录的字符串长度没有过滤掉,所以在序列化的时候
s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"2";}被当作了原来的value
在 echo file_get_contents(base64_decode($userinfo['img']));实现了读取flag的,目的
实现了逃逸

将/d0g3_fllllllag进行base64编码后上传,可获得 flag

得到flag