PHP代码审计入门(敏感函数回溯参数过程)

时间:2021-07-09 16:58:52

最近开始啃《代码审计企业级web代码安全架构》这本书,这一章内容看了2天很多内容都理解最主要的是对PHP不熟练所以现在理解了大概 然后进行实地环境搭建最主要的是源码百度真不好找 最后找到一篇也是读这本书的文章上有最后下载了搭建成功测试成功 最后把这篇跟着书上的节奏写下来吧,并附上源码。

 

代码审计思路

(1)   根据敏感关键字回溯参数传递过程。

(2)   查找可控变量,正向追踪变量传递过程。

(3)   寻找敏感功能点,通读功能点代码、

(4)   直接通读全文代码

靶机环境

Phpstudy PHP5.5.38+Apache

espcms_utf8_5.9.14.08.28.zip

链接: https://pan.baidu.com/s/1-WFmn0iY81H8wlL5jKQsaA 提取码: 7cqa

3.1敏感函数回溯参数过程

根据敏感函数来逆向追踪参数的传递过程,是目前使用得最多得一种方式,因为大多数漏洞是由于函数得使用不当造成的。另外非函数使用不当的漏洞,如SQL注入,也有一些特征,比如select、insert等,再结合from和where等关键字,我们就可以判断这是否是一条SQL语句,通过对字符串的识别分析,就能判断这个SQL语句里面的参数有没有使用单引号过滤,或者根据我们的经验来判断。像HTTP头里面的HTTP_CLENT_IP和HTTP_X_FORWORDFOR等获取到的IP地址经常没有安全过滤就直接拼接到SQL语句中,并且由于他们是在$_SERVER变量中不受GPC影响,那我们就可以取查找HTTP_CLENT_IP和HTTP_X_FORWORDFOR关键字来快速寻找漏洞。

 

我们首先打开seay源代码审计工具 点击新建项目 然后点击自动审计会得到一部分可能存在漏洞的代码列表

PHP代码审计入门(敏感函数回溯参数过程)

我们选择其中可能存在SQL注入漏洞的代码 双击即可进入该代码文件内

PHP代码审计入门(敏感函数回溯参数过程)

我们选中这个变$parentid这个变量后可以看到它的传递过程是通过accept()这块传输过来的所以我们定位到这个函数可以看看它这块是如何处理的。

PHP代码审计入门(敏感函数回溯参数过程)

我们选中这个函数右键 选择定位函数这个选项即可进行函数定位

PHP代码审计入门(敏感函数回溯参数过程)

双击打开

PHP代码审计入门(敏感函数回溯参数过程)

这是一个获取GET、POST、COOKIE参数值的函数,我们传入的变量是parentid和R,则代表在POST、GET中都可以获取parentid参数,最后经过一个daddslashes()函数,这个函数实际包装的是addslashes()函数,对单引号等字符进行过滤, 不过我们可以看到我们的SQL注入语句是这样的:

$sql=”selec * from $db_table where parented=$parentid”;

它并不需要我们单引号来进行闭合,于是可以直接注入

PHP代码审计入门(敏感函数回溯参数过程)

在citylist.php文件中我们看到oncitylist()函数在important类中我们选中该类名右键点击 全局搜索 功能。

PHP代码审计入门(敏感函数回溯参数过程)

我们看第45行代码有个include文件的操作,可惜经过addslashes()函数无法进行截断使其包含任意文件,只能包含本地PHP文件 限制我们的目标就是要构造 URL 参数或者某个页面表单参数,来触发 citylist.php 文件里的 oncitylist() 函数进行注入  我们进行实例化类并且调用函数操作 根据代码构造出利用过的EXP

http://127.0.0.1/01/upload/adminsoft/index.php?archive=citylist&action=citylist&parentid=-1