通用代码审计思路
2018-12-20 本文已影响0人
Echocipher
免责声明:本博客只是为了自己代码审计学习过程中的笔记总结,请勿用于非法的用途,否则造成的严重后果与本文作者无关
常见代码审计思路有如下几种:
- 根据敏感关键字回溯参数传递过程。
- 查找可控变量,争相追踪变量传递过程。
- 寻找敏感功能点,通读功能点代码。
- 通读全文代码。
敏感函数回溯参数过程
该方式使用最多,因为大多数漏洞是由于函数的使用不当造成的,此外如SQL注入,也有一些特征,比如SELECT,INSERT等,在结合from以及where等关键字就可以判断是否为sql语句,再通过字符串的识别,就可以判断有没有使用单引号过滤。比如,HTTP头中的HTTP_CLIENT_IP以及HTTP_X_FORWARDFOR等获取到的ip没有经过过滤就拼接到sql语句中,并且他们存在于$_SERVER变量中,不受GPC的影响,我们就可以通过查找相应关键字来快速寻找漏洞。
优点是仅需要搜索相应敏感关键字,就可以快速挖掘漏洞,可定向挖掘,高效,高质量,但也因为没有通读代码,对程序整体框架不熟悉,定位时候会花费时间,逻辑漏洞挖掘较为困难。
通读全文代码
如上所述,在企业中如果做安全运营时,对自身代码进行审计,需要了解整个业务的逻辑,才能挖掘到更多有价值的漏洞,通读全文也是需要一定的技巧,要看大体的代码结构,根据文件命名大致了解程序实现了什么功能,关键文件是什么,在查看程序目录结构时,尤其注意以下几个文件:
- 函数集文件:通常包含functions或者common等关键字,这些文件里有一些公共函数,提供给其他文件统一调用,大多数文件在文件头部包含其他文件,比较好的方式是在index.php或者其他功能行的文件中的头部进行寻找。
- 配置文件:通常包含config等关键字,配置文件包括web程序运行必须的功能性配置以及数据库信息,可以了解到程序的小部分功能。
看配置文件时,可以注意观察配置文件中的参数值是单引号还是双引号,如果是双引号,可能会存在代码执行漏洞。
- 安全过滤文件:关系到我们找到的可疑点可不可以利用,通常命名中有filter,safe,check等关键字,主要是对参数进行过滤,目前大多数函数会使用addslashes()函数进行过滤。
- index文件:由于是程序的入口文件,所以对我们了解程序架构,运行流程,包含文件等有很大帮助。
优点是可以更好的了解程序的架构以及业务的逻辑,缺点就是花费时间较多。
根据功能点定向审计
等有一定的代码审计经验之后,通常对功能点可能存在的漏洞有大致的了解,我们就可以先运行程序,浏览以下程序有什么功能,程序文件是怎么分配的,了解存在形式之后,可以寻找存在漏洞概率较大的进行简单的黑盒测试,之后再去读代码,提高审计速度。
example:
- 文件上传:未限制上传文件格式/SQL注入
- 文件管理:任意文件操作/XSS
- 登陆认证:任意用户登陆/越权
- 找回密码:爆破/算法破解