代码审计环境准备
本地测试环境:php + mysql 环境。如:phpstudy,wamp等
文档编辑器:sublime text 2, UltraEdit, notepad++
Sublime Text 2 还需要一些插件来辅助审计:
Package Control,CTags,PHPTidy ,Alignment,ConvertToUTF8
浏览器:Firefox
Firefox 插件:FoxyProxy、Hackbar、ModifyHeaders、Use Agent Switcher、Firebug
其他工具:Burp Suit、XDebug、vMysqlMonitoring、WEB编码转换工具
vMysqlMonitoring:提取自Seay法师的审计工具,一款mysql语句直接日志记录工具
审计前的准备和方法
基础准备
- 获取源码:大多数PHP程序都是开源的、找到官网下载最新的源码包即可。
- 安装网站:在本地搭建网站,一边审计一边调试。实时跟踪各种动态变化
把握大局
- 网站结构:浏览源码文件夹,了解程序的大致目录
-
入口文件: index.php、admin.php 文件一般是整个程序的入口,从中可以知道:
- 程序的架构
- 运行流程
- 包含哪些配置文件
- 包含哪些过滤文件和安全过滤文件
- 了解程序的业务逻辑
-
配置文件:一般类似config.php 等文件,保存一些数据库相关信息、程序的一些信息。
- 先看数据库编码,如果是gbk可能存在宽字节注入。
- 若变量的值用双引号、则可能存在双引号解析代码执行的问题
-
过滤功能:通过详读公共函数文件和安全过滤文件等文件,清晰掌握:
- 用户输入的数据,哪些被过滤,哪些无过滤如何过滤。
- 在哪里被过滤了?
- 如何过滤,过滤的方式是替换还是正则,有没有GPC,有没有使用 addslasher()处理?
- 能否绕过过滤的数据
把握大局-网站结构
网站目录结构:
- 主目录
- 模块目录
- 插件目录
- 上传目录
- 模板目录
- 数据目录
- 配置目录
- 配置文件
- 公共函数文件
- 安全过滤文件
- 数据库结构
- 入口文件
审计方法:
通读全文法:通读全文发作为一种最麻烦的方法也是最全面的审计方法。特别是针对大型程序,源码成千上万行,这要读到什么时候。但是该方法也是一种必要的方法。了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞。这种方法一般是企业对自身产品的审计,当然,对于小型应用,未尝不可以读一读。
前面的把把握大局也包含在通读全文法里面。
可以通过 把握大局,了解整体结构,再通过入口文件,进入各功能进行审计。
敏感函数参数回溯法:根据敏感函数,逆向追踪参数传递的过程。这个方法是最高效,最常用的方法。
大多数漏洞的产生是因为函数的使用不当导致的。我们只要找到这样的一些使用不当的函数,就可以快速挖掘想要的漏洞。
宣传一款神器—— Seay源代码审计系统,主要是利用正则匹配一些高危函数、关键函数以及敏感关键字。
然后,我们就可以分析判断敏感函数的上下文,追踪参数源头。尝试控制可控的参数变量。
定向功能分析法:根据程序的业务逻辑审计。
首先是用浏览器逐个访问浏览,看看这套程序有那些功能。根据相关功能,大概推测可能存在那些漏洞。
常见功能漏洞:包括但不限于:
- 程序初始安装
- 站点信息泄露
- 文件上传
- 文件管理
- 登录认证
- 数据库备份恢复
- 找回密码
- 验证码
总结:
实际应用中,通常是一套组合拳,要灵活应用。一般先把握大局,考虑是否通读全文,再根据定向功能法针对每一项功能进行审计;最后,敏感函数参数回溯。
代码审计推荐
i春秋平台 Virink老师的《PHP代码审计实战》课程
Seay法师的《代码审计:企业级web代码安全架构》,法师的博客:http://www.cnseay.com/
网友评论