PHP代码审计之旅
字数 1463 2025-08-19 12:40:57
PHP代码审计入门教程:BlueCMS 1.6审计实战
前言
代码审计是Web安全领域的重要技能,本教程将通过BlueCMS 1.6的审计过程,详细介绍PHP代码审计的基本方法和流程。教程将涵盖白盒测试、黑盒测试和灰盒测试的概念,以及实际的漏洞挖掘和分析技术。
测试类型基础
白盒测试
- 已知产品的内部工作过程
- 测试证明每种内部操作是否符合设计规格要求
- 检查所有内部成分是否经过验证
黑盒测试
- 已知产品的功能设计规格
- 测试证明每个实现了的功能是否符合要求
灰盒测试
- 白盒和黑盒测试的混合
- 既会做黑盒测试又会做白盒测试
白盒测试流程:BlueCMS 1.6审计
0x00: 了解目录结构
├── admin 后台管理目录
├── install 网站的安装目录
├── api 接口文件目录
├── data 系统处理数据相关目录
├── include 用来包含的全局文件
└── template 模板
审计技巧:
- 函数集文件:通常命名中包含functions或common等关键字
- 配置文件:通常命名中包含config关键字
0x01: 从首页获取信息
从index.php入手,了解程序架构、运行流程和包含的文件:
- 引入common.inc.php和user.php
- common.inc.php中addslashes()函数对全局数组(POST, GET, COOKIES, REQUEST)进行转义处理
- 包含防护功能如ban IP
0x02: 挖掘漏洞
跟踪输入变量
SQL注入漏洞发现:
- ad_js.php中:
$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
- 参数可控且无引号包裹
- 存在SQL注入漏洞
利用工具辅助审计
使用Seay源代码审计系统等工具辅助发现潜在漏洞。
危险函数列表
| 漏洞类型 | 相关危险函数 |
|---|---|
| 命令执行 | system, shell_exec, passthru, popen, proc_open |
| 文件包含 | require, include, require_once, include_once |
| 变量覆盖 | parse_str, mb_parse_str |
| 代码执行 | eval, assert, preg_replace |
| 文件操作 | file_get_contents, file_put_contents, move_uploaded_file, unlink, delete |
文件删除漏洞发现:
if(!empty($_POST['lit_pic']) && file_exists(BLUE_ROOT.$_POST['lit_pic']))
{
@unlink(BLUE_ROOT.$_POST['lit_pic']);
}
- lit_pic参数可控
- 可导致任意文件删除
0x03: 漏洞分析
SQL注入漏洞利用
ad_js.php中的UNION查询注入:
- 漏洞代码:
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
echo "<!--\r\ndocument.write(\"".$ad_content."\");\r\n-->\r\n";
- 利用步骤:
- 使用order by确定列数
- 构造UNION查询获取数据
- 通过回显位(如第7列)获取信息
任意文件删除漏洞
user.php中的漏洞:
- 漏洞代码:
if(!empty($_POST['lit_pic']) && file_exists(BLUE_ROOT.$_POST['lit_pic']))
{
@unlink(BLUE_ROOT.$_POST['lit_pic']);
}
- 利用方法:
- 构造POST请求包含lit_pic参数
- 参数值为要删除的文件路径(相对路径)
反射型XSS漏洞
guest_book.php中的漏洞:
- 漏洞代码:
$page_id = $_POST['page_id'];
showmsg($page_id);
- 利用方法:
"><script>alert(/xss/)</script>
- 需要闭合前面的input标签
总结
-
代码审计的基本流程:
- 了解目录结构
- 从入口文件(index.php)开始分析
- 跟踪用户输入
- 查找危险函数调用
-
关键点:
- 关注用户可控的输入点
- 注意参数是否被正确过滤
- 结合手工审计和工具辅助
- 注意工具可能遗漏的漏洞(如反射型XSS)
-
BlueCMS 1.6中发现的主要漏洞:
- SQL注入(ad_js.php)
- 任意文件删除(user.php)
- 反射型XSS(guest_book.php)
通过本教程,您应该已经掌握了基本的PHP代码审计方法和流程。实际审计中,需要结合具体代码和环境进行灵活分析。