PHP面向过程(无MVC框架类型)代码审计初尝试
字数 2051 2025-08-18 17:33:08

PHP面向过程代码审计入门教程

一、环境配置

1. 准备工作

  • 必要工具
    • PHPStorm(推荐2022版本)
    • PHPStudy(集成环境)
    • Burp Suite
    • Seay源代码审计系统
    • Navicat 15
    • zzcms代码审计样例

2. PHPStorm XDebug配置步骤

配置解释器

  1. 打开PHPStorm设置:File -> Settings (快捷键 CTRL+ALT+S)
  2. 选择 PHP -> 配置对应PHPStudy版本
  3. 选择相应的PHP language level
  4. 点击...选项进行详细配置:
    • 点击+
    • 选择Local Path to Interpreter
    • 自定义名称
    • 选择PHP安装目录下的php.exe
    • 选择相应文件下的php_xdebug.dll
    • 应用并确认

修改php.ini配置

在PHPStudy中:

  1. 打开php.ini文件
  2. 找到并修改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验证

  1. 在PHPStorm中点击+选择PHP Web Page
  2. 进入配置界面:
    • 自定义名称
    • 选择配置好的DEBUG
    • 选择浏览器
    • 点击验证测试
    • 界面全绿表示配置成功

3. 测试XDebug功能

  1. PHPStorm开启监听
  2. 在URL中添加参数:&XDEBUG_SESSION_START=PHPSTORM
  3. 回车后出现XDEBUG调试界面
  4. 熟悉调试按钮功能:
    • 跳过(Step Over)
    • 下一步(Step Into)
    • 强制进入(Force Step Into)

注意

  • 调试会话挂留时间过长需要重新发包
  • 可添加辅助代码(如echo)查看具体执行情况

二、代码审计实战

案例1:重装漏洞审计

漏洞发现

  1. 访问/install发现提示"安装向导已运行安装过..."
  2. 查看/install/step_1.phpstep_2.php源码
  3. 发现step_1.php提示已安装,step_2.php可进入重装

漏洞利用

  1. 使用Burp Suite将GET请求改为POST请求
  2. 添加参数:step=2
  3. 成功进入重装界面

审计要点

  • 关注安装/重装逻辑
  • 检查安装锁定机制是否可绕过
  • 尝试修改请求方法(GET/POST)

案例2:SQL注入审计

审计流程

  1. 使用工具定位敏感变量
  2. 发现groupid变量未做保护且直接输出
  3. 确认存在联合注入点

调试过程

  1. 传输参数进行XDebug调试
  2. 快速跳转寻找断点位置
  3. 进入过滤文件查看过滤情况
  4. 发现绕过方法:URL携带siteconfig.phprllabeltemplate.php参数可跳过过滤

注入利用

  1. 构造注入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审计

漏洞发现

  1. function.php中发现自定义函数stripfxg
  2. 函数功能:
    • $htmlspecialchars_decode=true
    • 调用htmlspecialchars_decode还原HTML实体

漏洞利用流程

  1. 寻找调用stripfxg(*, true)的功能点
  2. 定位到"公司简介"功能中的content变量
  3. 注册账号并插入恶意代码:
    
    
  4. 使用Burp Suite抓包,添加绕过参数:
    POST /user/daohang_company.php?action=modify&a=siteconfig.php
    

其他利用点

  1. 用户管理功能也存在类似漏洞:
    POST /user/manage.php?action=modify&xx=siteconfig.php
    Content: 
    
  2. 触发方式:访问http://www.zzcms.com/zt/show.php?id=1

审计要点

  • 关注自定义函数的功能
  • 寻找数据"存入-取出"的完整流程
  • 检查HTML实体编码的还原过程

三、审计方法论

1. 审计流程建议

  1. 工具辅助:先用Seay等工具扫描敏感函数
  2. 黑盒测试:"见框就插"测试输入点
  3. 代码跟踪:选择一个漏洞点,用XDebug完整跟踪
  4. 过滤分析:定位过滤函数,分析是否可绕过
  5. 构造利用:根据分析结果构造有效payload

2. 常见审计关注点

  • 输入输出:未过滤的输入和直接输出
  • 数据库操作:拼接的SQL语句
  • 文件操作:动态包含、文件上传等
  • 权限控制:越权访问检查
  • 业务逻辑:如支付、充值等关键流程

3. 调试技巧

  1. 断点设置:在关键过滤函数设置断点
  2. 变量查看:观察执行过程中变量的变化
  3. 代码拆分:复杂逻辑可拆分为小段测试
  4. 辅助输出:添加echo等语句辅助调试

四、总结

本教程详细介绍了PHP面向过程代码审计的环境配置和实战案例,重点包括:

  1. 环境搭建:PHPStorm+XDebug的完整配置流程
  2. 漏洞类型:覆盖重装漏洞、SQL注入、存储型XSS等
  3. 审计方法:工具辅助+代码跟踪+过滤分析的综合方法
  4. 调试技巧:断点设置、变量查看等实用技巧

通过本教程的学习,读者可以掌握PHP面向过程代码审计的基本方法,并能够独立进行简单的代码审计工作。实际审计中,需要结合具体代码灵活运用这些方法,并不断积累经验。

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验证 在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: 审计要点 : 关注未过滤的输出点 检查过滤函数是否可绕过 使用Navicat验证注入结果 案例3:存储型XSS审计 漏洞发现 在 function.php 中发现自定义函数 stripfxg 函数功能: 当 $htmlspecialchars_decode=true 时 调用 htmlspecialchars_decode 还原HTML实体 漏洞利用流程 寻找调用 stripfxg(*, true) 的功能点 定位到"公司简介"功能中的 content 变量 注册账号并插入恶意代码: 使用Burp Suite抓包,添加绕过参数: 其他利用点 用户管理功能也存在类似漏洞: 触发方式:访问 http://www.zzcms.com/zt/show.php?id=1 审计要点 : 关注自定义函数的功能 寻找数据"存入-取出"的完整流程 检查HTML实体编码的还原过程 三、审计方法论 1. 审计流程建议 工具辅助 :先用Seay等工具扫描敏感函数 黑盒测试 :"见框就插"测试输入点 代码跟踪 :选择一个漏洞点,用XDebug完整跟踪 过滤分析 :定位过滤函数,分析是否可绕过 构造利用 :根据分析结果构造有效payload 2. 常见审计关注点 输入输出 :未过滤的输入和直接输出 数据库操作 :拼接的SQL语句 文件操作 :动态包含、文件上传等 权限控制 :越权访问检查 业务逻辑 :如支付、充值等关键流程 3. 调试技巧 断点设置 :在关键过滤函数设置断点 变量查看 :观察执行过程中变量的变化 代码拆分 :复杂逻辑可拆分为小段测试 辅助输出 :添加echo等语句辅助调试 四、总结 本教程详细介绍了PHP面向过程代码审计的环境配置和实战案例,重点包括: 环境搭建 :PHPStorm+XDebug的完整配置流程 漏洞类型 :覆盖重装漏洞、SQL注入、存储型XSS等 审计方法 :工具辅助+代码跟踪+过滤分析的综合方法 调试技巧 :断点设置、变量查看等实用技巧 通过本教程的学习,读者可以掌握PHP面向过程代码审计的基本方法,并能够独立进行简单的代码审计工作。实际审计中,需要结合具体代码灵活运用这些方法,并不断积累经验。