[安洵杯 2019]easy_serialize_php 1——wp

easy_serialize_php

先给payload:

_SESSION['flagphp']=;s:5:"guest";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

 

 开始做题(这题是一道PHP反序列化逃逸)

一:审计代码发现phpinfo以及分析源码

 

 

 

 

 

 为了帮助理解if($_SESSION){}这句特意执行了一次。

二、见下图可知,当传入新的session值时,user和funciton被清掉了

 

 由此可得session值可以控制,(比如后面要控制的 $_SESSION["img"]="payload" )

 

三、由下图可得: 序列化 $_SESSION =》filter过滤函数 =》反序列化 =》base64解密文件名(例子:$username['img']="base64加密后的d0g3_f1ag.php")

综上所述:需要先对 d0g3_f1ag.php 加密,然后赋值给 $_SESSION['img'] 就可以读取文件了

 

 四、序列化文件名

得:a:2:{s:4:"user";s:5:"guest";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

然后截取一段作为可用payload    ;s:5:"guest";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

为什么要截取呢? 因为序列化后 有个 filter 过滤,他会把flagphp过滤掉,那么少的东西 他会向后截取相应数量的,下面具体算一下为啥接到 分号前

 

 

 

 再看一下过滤后的情况;

 

 

五、传入payload

 

 六、base64加密  /d0g3_fllllllag  并且读取文件内容

payload:_SESSION['flagphp']=;s:5:"guest";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}" 

俩次base64加密的长度都一样,直接替换就行不用再执行php

 

 总结:刘某人真的不帅;

posted @ 2021-07-23 15:26  友好邻居  阅读(830)  评论(1编辑  收藏  举报