利用ast审计某du系统
字数 1164 2025-08-22 12:23:12

AST语义分析工具在PHP代码审计中的应用

1. 工具概述

这是一个基于AST(抽象语法树)语义分析的PHP静态代码审计工具,主要用于检测PHP应用中的安全漏洞。该工具的核心功能是查找恶意函数调用链,类似于Kunlun-M的反序列化链插件查找功能,但作者选择自行设计实现而非二次开发。

2. 核心功能

2.1 恶意函数调用链检测

  • 支持检测深度≤3的调用链
  • 可扩展至深度4的调用链分析
  • 能够识别多种漏洞模式:
    • 任意文件读取链
    • 文件写入链
    • 潜在的反序列化漏洞(计划中)

2.2 漏洞检测能力

当前版本已实现:

  1. 任意文件读取漏洞检测
  2. 文件写入漏洞检测
  3. 组合漏洞检测(如链4和链9组合可造成文件写入)

3. 技术原理

3.1 AST语义分析

  • 通过解析PHP代码生成抽象语法树
  • 分析函数调用关系和数据流向
  • 追踪敏感函数的调用路径

3.2 调用链分析

  • 从入口点开始追踪函数调用
  • 记录调用路径和参数传递
  • 识别危险函数的调用链

4. 实战案例:某duSoho v23.4.4漏洞分析

4.1 环境搭建

  1. 安装URL: http://192.168.91.1:8089/install.install.php
  2. 登录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 文件写入漏洞

漏洞链:

  1. paymentAction调用updateWeixinMpFile
  2. 最终调用file_put_contents

利用条件:

  • 目标文件windid_client_config.php默认不存在
  • 文件名和内容部分可控

利用限制:

  • 写入位置不在web目录
  • 需要结合截断技术(但截断后无法写入内容)

5. 工具开发路线

  1. 当前阶段:

    • 基础调用链检测功能
    • 高误报率(待优化)
  2. 未来计划:

    • 减少误报
    • 添加反序列化漏洞检测
    • 完善文档后开源

6. 防御建议

针对检测到的漏洞类型:

  1. 任意文件读取:

    • 限制文件读取路径
    • 禁用危险协议(如phar)
    • 对用户输入进行严格过滤
  2. 文件写入:

    • 限制可写入目录
    • 检查文件名和内容合法性
    • 设置适当的文件权限

7. 总结

该AST语义分析工具通过静态分析PHP代码的函数调用链,能够有效发现潜在的安全漏洞。案例中的某duSoho系统漏洞展示了工具的实际应用价值。随着功能的不断完善,该工具将成为PHP代码审计的有力助手。

注意:该工具尚未正式开源,建议关注作者后续发布的使用文档和开源版本。

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 利用方式 : 技术细节 : 使用 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代码审计的有力助手。 注意 :该工具尚未正式开源,建议关注作者后续发布的使用文档和开源版本。