PHP代码审计05之正则使用不当 (2)

通过例题和CTF题目的讲解,是不是感觉棒棒的,现在咱们来分析实例吧,实例是LvyeCMS3.1,是基于ThinkPHP3.2.3框架。这个实例存在的漏洞也是函数使用不规范被绕过,导致任意文件删除。下面来具体分析:
先查看入口文件index.php

PHP代码审计05之正则使用不当


可以看到公共目录,应用目录等一些信息。接下来再看看目录结构:

PHP代码审计05之正则使用不当


而漏洞在Application/Template/Controller/StyleController.class.php文件中,具体如下:

PHP代码审计05之正则使用不当


看代码第117行,这里是获取目录路径,参数也是我们可以控制的,再向后看,用到了str_replace()函数,它是个字符串替换函数,具体说明如下:

PHP代码审计05之正则使用不当


再这里起到的作用就是将'..\', '../', './', '.\'替换为空。但是这里是可以绕过的,如果我们输入.....///呢,会发生什么?是不是正好构造成了../,举个小例子会更清楚,如下:

PHP代码审计05之正则使用不当


构造出../我们就可以穿越目录了,现在访问install.php文件会提示已安装,如下图:

PHP代码审计05之正则使用不当


然后尝试删除lvyecms/Application/Install/目录下的 install.lock 文件,构造payload如下:

?g=Template&m=Style&a=delete&dir=.....///Application/Install/&file=install.lock

PHP代码审计05之正则使用不当


现在访问install.php,发现确实删除了,如下图:

PHP代码审计05之正则使用不当

小结

通过这篇文章的学习与讲解,是不是对PHP的正则了解的更多了呢,下一篇文章会对parse_str函数缺陷进行学习和讲解。一起加油吧!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwwsf.html