PHP代码审计入门

戏子无情 提交于 2020-02-22 18:32:24

代码审计思路

(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() 函数进行注入。

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!