先判断站点是否使用thinkphp 5.0.x:访问/index.php?s=abc或/public/index.php?s=abc,观察响应是否含thinkphp、tp5等关键词或默认错误页;再探测rce入口,发送post请求_method=__construct&filter[]=system&method=get&server[request_method]=id,若返回uid=、gid=等系统信息则漏洞存在。

确认目标是否使用ThinkPHP 5.0.x框架
先判断站点技术栈。访问/index.php?s=abc或/public/index.php?s=abc,观察响应中是否含thinkphp、TP5、__construct等关键词,或返回404但带ThinkPHP默认错误页(如“控制器不存在”提示)。也可用whatweb或wappalyzer识别框架版本。
验证是否存在RCE入口点
ThinkPHP 5.0.23 RCE核心触发路径是/index.php?s=captcha(或其他任意合法路由,如/index.php?s=index),关键在于能否成功调用Request类的属性覆盖机制。构造基础探测请求:
- 发送POST请求:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
- 若响应体中出现uid=、gid=或www-data等系统用户信息,说明漏洞存在
- 换用pwd、ls -la进一步验证命令执行稳定性
检查参数过滤与WAF绕过可能性
部分站点可能部署了简单WAF拦截system、exec等关键词。可尝试替换filter[]值为其他可执行函数:
- filter[]=passthru、filter[]=shell_exec、filter[]=popen
- 对命令本身做URL编码或大小写混用,例如ID、%69%64
- 若server[REQUEST_METHOD]被拦截,可改用get[xxx]或post[xxx]配合eval类filter(需注意PHP配置是否禁用)
定位漏洞影响范围与修复状态
该漏洞影响ThinkPHP 5.0.0–5.0.23及5.1.0–5.1.30版本。审计时应:
- 查看composer.json或thinkphp/library/think/App.php头部注释中的版本号
- 检查是否已打补丁:5.0.24+或5.1.31+版本已修复_method处理逻辑
- 若无法获取源码,通过响应头X-Powered-By或错误页面堆栈信息辅助判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











