代码审计方法与准备

代码审计环境准备

本地测试环境: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/

你可能感兴趣的:(代码审计方法与准备)