代码审计是企业安全运营以及安全从业者必备的基础能力。学习好代码审计对自己的渗透测试思路是很有帮助的,以前也陆陆续续学习过代码审计,但都只是零散的一些知识,从今天开始,从头开始学习代码审计,并且每学习一种漏洞都进行实例的分析,记录在博客里,锻炼自己归纳总结输出的能力。本次的学习资料是seay法师的代码审计--企业级Web代码审计安全架构。
通用代码审计思路
敏感函数回溯参数过程
根据敏感函数来逆向追踪参数的传递过程,另外非函数使用不当的漏洞如sql注入,可以根据sql语句的特征来分析是否存在漏洞,像HTTP_CLIENT_IP和HTTP_X_FORWORDFOR等获取ip的地址没有经过过滤直接拼接到sql语句中,并且它们是在$_SERVER变量中不受GPC影响。
优点
只需搜索相应敏感关键字就可以快速挖掘想要的漏洞,具有可定向挖掘和高效、高质量的优点。
缺点
没有通读代码,对程序的整体框架了解不够深入,在挖掘漏洞时定位利用点会话费一点时间,对逻辑漏洞挖掘覆盖不到。
通读全文代码
通读全文法适合在企业中做安全运营时的场景,在企业中做自身产品的代码审计,我们需要了解整个应用的业务逻辑,才能挖掘到更多有价值的漏洞。首先我们要看程序的大体代码,如主目录、模块目录、插件目录,还要注意文件的大小和创建时间。
在看目录结构的时候,通常要注意以下文件:
- 函数集文件 公共函数文件,提供给其他文件统一调用
- 配置文件 包含Web程序运行必须的功能性配置选项以及数据库等配置信息,如果配置参数使用双引号则很可能存在代码执行漏洞
- 安全过滤文件 主要对参数进行过滤
- index文件 程序的入口文件,可以了解程序的架构、运行的流程、包含到的文件
根据功能点定向审计
根据程序的功能查找漏洞。
功能点:
- 文件上传功能 文件上传漏洞,还有可能因为对文件名过滤不当导致sql注入漏洞
- 文件管理功能 文件读取漏洞和xss漏洞
- 登录认证功能 任意用户登录漏洞
- 找回密码功能 任意用户密码重置、验证码爆破