1)根据敏感关键字回溯参数传参过程
2)查找可控变量,正向追踪变量传递过程
3)寻找敏感功能点,通读功能点代码。
4)直接通读全文代码。

敏感函数回溯参数

这是目前使用的最多的一种方法,因为大多数漏洞都是由于函数的使用不当造成的,直接找敏感函数,可以快速审计发现漏洞。如SQL注入,我们可以找Select、insert等,再结合from和where等关键字,来判断是否存在sql注入。像HTTP头里面的HTTP_CLIENT_IP和HTTP_X_FORWAORDFOR等获取IP经常没有进行过滤的,有带入了数据库的,由于它们是再$_SERVER变量中,不受GPC的影响,很容易存在SQL注入。

通读全文代码

通过通读全文代码,可以更加了解整个应用的业务逻辑,能发掘到更多更有价值的漏洞。
拿到代码,首先我们要看程序的大体代码结构,如主目录、模块目录、插件目录等,更具各种文件的命名就可以知道这个程序的大致功能。
1)函数及文件,通常命名中包含functions、common等关键字,这里面是一些公共的函数,提供给别的文件调用的。一般在index.php或者一些功能文件中,在头部就能找到。
2)配置文件,通常命名中包含config关键字,内含一些功能性的配置选项以及数据库连接信息,另外我们可以注意文件中参数值是用单引号还是双引号,如果是双引号,则可能存在代码执行漏洞。
3)安全过滤文件,通常命名中带有filter、safe、check等关键字,这类文件主要对参数进行过滤,拦截SQL注入和XSS等。
4)index文件,index是程序的入口,通常只要读一遍index就可以大致了解程序的架构、运行的流程、包含的文件。而不同目录的index文件也有不同的实现方法,建议都看一遍。

根据功能点定向审计

首先搭建环境,简单黑盒测试一下,寻找有没有普遍存在漏洞的功能点,再去读这个功能点的代码,提高审计速度。
1)文件上传。经常出现在编辑、头像、附件等地方。除了文件上传外,还可能存在SQL注入、XSS等,因为一般程序员都不会注意到对文件名进行过滤,但是又需要把文件名保存到数据库中,然后输出在页面上,所以很容易造成问题。
2)文件管理。寻找将程序名或者文件路径直接在参数中传递的地方,很有可能存在任意文件读取。
3)登录认证。一般登录认真除了输入账号密码外,还存在cookie和session,寻找cookie和session的加密组合方式,算法是否可信,如果可被推算,就能实现任意登录,DolpinPHP就存在这样的问题。
4)找回密码。目前特别是APP应用,请求后验证码大多是4位,并且没有限制验证码错误次数和时间,就可以被爆破。还有验证码直接显示在请求包或响应包中的,都存在任意账户密码找回漏洞。
5)重装漏洞,很多程序安装后并不会删除安装目录,而是生成一个install.lock文件去判断是否存在,存在则不进行安装,此时若存在任意文件删除,则可绕过。而且有时候判断文件存在,会进行跳转
header(“location: ../index.php”)
若此时没有使用die()或exit()等函数退出程序流程,这个跳转只是HTTP头的跳转,下方代码依然会继续执行。