PHP面向过程(无MVC框架类型)代码审计初尝试
字数 2051 2025-08-18 17:33:08
PHP面向过程代码审计入门教程
一、环境配置
1. 准备工作
- 必要工具:
- PHPStorm(推荐2022版本)
- PHPStudy(集成环境)
- Burp Suite
- Seay源代码审计系统
- Navicat 15
- zzcms代码审计样例
2. PHPStorm XDebug配置步骤
配置解释器
- 打开PHPStorm设置:
File -> Settings(快捷键CTRL+ALT+S) - 选择
PHP-> 配置对应PHPStudy版本 - 选择相应的PHP language level
- 点击
...选项进行详细配置:- 点击
+ - 选择
Local Path to Interpreter - 自定义名称
- 选择PHP安装目录下的
php.exe - 选择相应文件下的
php_xdebug.dll - 应用并确认
- 点击
修改php.ini配置
在PHPStudy中:
- 打开
php.ini文件 - 找到并修改XDebug部分:
[XDebug]
xdebug.profiler_output_dir="C:\phpStudy\PHPTutorial\tmp\xdebug"
xdebug.trace_output_dir="C:\phpStudy\PHPTutorial\tmp\xdebug"
zend_extension="C:\phpStudy\PHPTutorial\php\php-5.6.27-nts\ext\php_xdebug.dll"
xdebug.remote_enable=On
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
xdebug.auto_trace=on
xdebug.idekey=PHPSTORM
xdebug.collect_return=On
xdebug.collect_params=On
注意:路径需要根据实际安装位置调整。
配置XDebug验证
- 在PHPStorm中点击
+选择PHP Web Page - 进入配置界面:
- 自定义名称
- 选择配置好的DEBUG
- 选择浏览器
- 点击验证测试
- 界面全绿表示配置成功
3. 测试XDebug功能
- PHPStorm开启监听
- 在URL中添加参数:
&XDEBUG_SESSION_START=PHPSTORM - 回车后出现XDEBUG调试界面
- 熟悉调试按钮功能:
- 跳过(Step Over)
- 下一步(Step Into)
- 强制进入(Force Step Into)
注意:
- 调试会话挂留时间过长需要重新发包
- 可添加辅助代码(如echo)查看具体执行情况
二、代码审计实战
案例1:重装漏洞审计
漏洞发现
- 访问
/install发现提示"安装向导已运行安装过..." - 查看
/install/step_1.php和step_2.php源码 - 发现
step_1.php提示已安装,step_2.php可进入重装
漏洞利用
- 使用Burp Suite将GET请求改为POST请求
- 添加参数:
step=2 - 成功进入重装界面
审计要点:
- 关注安装/重装逻辑
- 检查安装锁定机制是否可绕过
- 尝试修改请求方法(GET/POST)
案例2:SQL注入审计
审计流程
- 使用工具定位敏感变量
- 发现
groupid变量未做保护且直接输出 - 确认存在联合注入点
调试过程
- 传输参数进行XDebug调试
- 快速跳转寻找断点位置
- 进入过滤文件查看过滤情况
- 发现绕过方法:URL携带
siteconfig.php、rllabel或template.php参数可跳过过滤
注入利用
- 构造注入payload:
GET /admin/ask.php?do=add&abc=siteconfig.php HTTP/1.1 Host: www.zzcms.com Cookie: askbigclassid=-1 union select user(),2,3,4,5,6,7,8,9,10,11
审计要点:
- 关注未过滤的输出点
- 检查过滤函数是否可绕过
- 使用Navicat验证注入结果
案例3:存储型XSS审计
漏洞发现
- 在
function.php中发现自定义函数stripfxg - 函数功能:
- 当
$htmlspecialchars_decode=true时 - 调用
htmlspecialchars_decode还原HTML实体
- 当
漏洞利用流程
- 寻找调用
stripfxg(*, true)的功能点 - 定位到"公司简介"功能中的
content变量 - 注册账号并插入恶意代码:
- 使用Burp Suite抓包,添加绕过参数:
POST /user/daohang_company.php?action=modify&a=siteconfig.php
其他利用点
- 用户管理功能也存在类似漏洞:
POST /user/manage.php?action=modify&xx=siteconfig.php Content: - 触发方式:访问
http://www.zzcms.com/zt/show.php?id=1
审计要点:
- 关注自定义函数的功能
- 寻找数据"存入-取出"的完整流程
- 检查HTML实体编码的还原过程
三、审计方法论
1. 审计流程建议
- 工具辅助:先用Seay等工具扫描敏感函数
- 黑盒测试:"见框就插"测试输入点
- 代码跟踪:选择一个漏洞点,用XDebug完整跟踪
- 过滤分析:定位过滤函数,分析是否可绕过
- 构造利用:根据分析结果构造有效payload
2. 常见审计关注点
- 输入输出:未过滤的输入和直接输出
- 数据库操作:拼接的SQL语句
- 文件操作:动态包含、文件上传等
- 权限控制:越权访问检查
- 业务逻辑:如支付、充值等关键流程
3. 调试技巧
- 断点设置:在关键过滤函数设置断点
- 变量查看:观察执行过程中变量的变化
- 代码拆分:复杂逻辑可拆分为小段测试
- 辅助输出:添加echo等语句辅助调试
四、总结
本教程详细介绍了PHP面向过程代码审计的环境配置和实战案例,重点包括:
- 环境搭建:PHPStorm+XDebug的完整配置流程
- 漏洞类型:覆盖重装漏洞、SQL注入、存储型XSS等
- 审计方法:工具辅助+代码跟踪+过滤分析的综合方法
- 调试技巧:断点设置、变量查看等实用技巧
通过本教程的学习,读者可以掌握PHP面向过程代码审计的基本方法,并能够独立进行简单的代码审计工作。实际审计中,需要结合具体代码灵活运用这些方法,并不断积累经验。