代码审计思路
(1) 根据敏感关键字回溯参数传递过程。
(2) 查找可控变量,正向追踪变量传递过程。
(3) 寻找敏感功能点,通读功能点代码、
(4) 直接通读全文代码
靶机环境
Phpstudy PHP5.5.38+Apache
espcms_utf8_5.9.14.08.28.zip
敏感函数回溯参数过程
根据敏感函数来逆向追踪参数的传递过程,是目前使用得最多得一种方式,因为大多数漏洞是由于函数得使用不当造成的。另外非函数使用不当的漏洞,如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源代码审计工具 点击新建项目 然后点击自动审计会得到一部分可能存在漏洞的代码列表
定位到漏洞代码位置 citylist.php 代码中
右键--》定位函数
发现有俩个位置使用ACCEPT函数
第一个函数不是类函数的使用方法
我们选中第二个函数右键 选择定位函数这个选项即可进行函数定位
双击打开
可以看到这是函数定义在function当中
找到函数位置
这是一个获取GET、POST、COOKIE参数值的函数,我们传入的变量是parentid和R,则代表在POST、GET中都可以获取parentid参数,最后经过一个daddslashes()函数,这个函数实际包装的是addslashes()函数,对单引号等字符进行过滤, 不过我们可以看到我们的SQL注入语句是这样的:
原来就是一个addslashes()函数的封装。
那么addslashes()函数是个什么呢。
这里的值是一个数字,而且也不需要闭合,所以这里存在数字型注入。
POC : http://127.0.0.1/espcms/adminsoft/index.PHP?archive=citylist&action=citylist&parentid=1
它并不需要我们单引号来进行闭合,于是可以直接注入
为什么要使用citylist?
因为这个漏洞出现在citylist.php文件中
在citylist.php文件中我们看到oncitylist()函数在important类中我们选中该类名右键点击 全局搜索 功能。
我们看第45行代码有个include文件的操作,可惜经过addslashes()函数无法进行截断使其包含任意文件,只能包含本地PHP文件 限制我们的目标就是要构造 URL 参数或者某个页面表单参数,来触发 citylist.php 文件里的 oncitylist() 函数进行注入。
来源:CSDN
作者:子曰小玖
链接:https://blog.csdn.net/wxh0000mm/article/details/104447088