利用ast审计某du系统
字数 1164 2025-08-22 12:23:12
AST语义分析工具在PHP代码审计中的应用
1. 工具概述
这是一个基于AST(抽象语法树)语义分析的PHP静态代码审计工具,主要用于检测PHP应用中的安全漏洞。该工具的核心功能是查找恶意函数调用链,类似于Kunlun-M的反序列化链插件查找功能,但作者选择自行设计实现而非二次开发。
2. 核心功能
2.1 恶意函数调用链检测
- 支持检测深度≤3的调用链
- 可扩展至深度4的调用链分析
- 能够识别多种漏洞模式:
- 任意文件读取链
- 文件写入链
- 潜在的反序列化漏洞(计划中)
2.2 漏洞检测能力
当前版本已实现:
- 任意文件读取漏洞检测
- 文件写入漏洞检测
- 组合漏洞检测(如链4和链9组合可造成文件写入)
3. 技术原理
3.1 AST语义分析
- 通过解析PHP代码生成抽象语法树
- 分析函数调用关系和数据流向
- 追踪敏感函数的调用路径
3.2 调用链分析
- 从入口点开始追踪函数调用
- 记录调用路径和参数传递
- 识别危险函数的调用链
4. 实战案例:某duSoho v23.4.4漏洞分析
4.1 环境搭建
- 安装URL:
http://192.168.91.1:8089/install.install.php - 登录URL:
http://192.168.91.1:8089/app.php/login
4.2 任意文件读取漏洞
漏洞位置: /app.php/admin/article/createFromUrl
利用方式:
GET /app.php/admin/article/createFromUrl?url=D:/1.txt HTTP/1.1
Host: 192.168.91.1:8089
[...其他请求头...]
技术细节:
- 使用
file_get_contents函数 - 支持phar协议(但需
phar.readonly = off) - 默认配置下仅能进行文件读取
4.3 文件写入漏洞
漏洞链:
paymentAction调用updateWeixinMpFile- 最终调用
file_put_contents
利用条件:
- 目标文件
windid_client_config.php默认不存在 - 文件名和内容部分可控
利用限制:
- 写入位置不在web目录
- 需要结合截断技术(但截断后无法写入内容)
5. 工具开发路线
-
当前阶段:
- 基础调用链检测功能
- 高误报率(待优化)
-
未来计划:
- 减少误报
- 添加反序列化漏洞检测
- 完善文档后开源
6. 防御建议
针对检测到的漏洞类型:
-
任意文件读取:
- 限制文件读取路径
- 禁用危险协议(如phar)
- 对用户输入进行严格过滤
-
文件写入:
- 限制可写入目录
- 检查文件名和内容合法性
- 设置适当的文件权限
7. 总结
该AST语义分析工具通过静态分析PHP代码的函数调用链,能够有效发现潜在的安全漏洞。案例中的某duSoho系统漏洞展示了工具的实际应用价值。随着功能的不断完善,该工具将成为PHP代码审计的有力助手。
注意:该工具尚未正式开源,建议关注作者后续发布的使用文档和开源版本。