综合

thinkphp漏洞检测工具

时间:2010-12-5 17:23:32  作者:热点   来源:探索  查看:  评论:0
内容摘要:用ThinkPHP做过项目的人,大概都经历过那种半夜被运维电话叫醒的时刻——服务器上多了几个不认识的文件,或者数据库里突然冒出一堆乱码。十有八九,是框架漏洞被人扫了。ThinkPHP的漏洞利用工具在圈

用ThinkPHP做过项目的漏洞人,大概都经历过那种半夜被运维电话叫醒的检测时刻——服务器上多了几个不认识的文件,或者数据库里突然冒出一堆乱码。工具十有八九,漏洞是检测框架漏洞被人扫了。ThinkPHP的工具漏洞利用工具在圈子里流传得特别快,一个POC公开,漏洞第二天全网扫描器就更新了规则。检测这不是工具危言耸听,我亲眼见过一个没打补丁的漏洞TP5站点,从被扫描到getshell,检测前后不到四十分钟。工具

这类检测工具的漏洞核心逻辑其实不复杂。它们干的检测事就是拿着已知漏洞的请求特征,挨个往目标上怼,工具看返回包有没有预期中的异常。比如ThinkPHP 5.0.23那个著名的远程命令执行,构造一个带_method=__construct&filter[]=system&method=get&get[]=whoami的POST请求,如果服务器回显了命令执行结果,工具就判定存在漏洞。整个过程不需要登录,不需要交互,一个HTTP请求就完事。

工具里到底装了什么

我拆过几个流传比较广的ThinkPHP检测脚本,结构都差不多。一个payloads目录,里面按版本号分文件夹,5.0、5.1、5.2、6.0各一套。每个文件里存着对应的利用链,有些还贴心地标注了影响范围。主程序一般用Python写,requests库发请求,正则匹配回显。高级一点的会加多线程、代理池、随机UA,甚至带WAF绕过模块——把payload里的关键字做各种编码变形。

有个细节挺有意思。很多工具会先请求/index.php?s=index/index或者/index.php?s=/index/think/app/invokefunction来判断目标是不是ThinkPHP。这个特征路径是TP默认路由留下的指纹,准确率相当高。确认框架之后,再按版本号从高到低试payload,因为高版本漏洞往往也影响低版本,反过来则不一定。

检测工具和真实攻击的差距

工具检测到漏洞,和真正利用漏洞拿到权限,中间还隔着好几步。检测阶段只需要一个请求有异常回显就够了,但实际利用要考虑的东西多得多。目标有没有禁用system、exec这些函数?disable_functions里拉黑了哪些?能不能写文件?open_basedir限制在哪个目录?这些信息检测工具通常不关心,但攻击者会进一步探测。

我见过一个案例,检测工具报告某站存在TP5 RCE,但实际利用时发现system被禁了,assert也被禁了。攻击者转而尝试写.htaccess或者.user.ini,又发现目录不可写。最后是通过TP的日志文件包含漏洞,把日志内容当PHP代码执行才拿下的。整个过程检测工具只贡献了第一步——告诉你有洞,剩下的全靠手工。

防守方怎么用这些工具

别以为检测工具只有攻击者在用。甲方安全团队做资产梳理的时候,拿这些工具跑一遍自己的IP段,比等扫描器报警主动得多。关键是要控制好扫描频率和源IP,别把自家WAF给触发了。有些工具支持从文件读取URL列表,配合--delay参数设置请求间隔,跑一遍C段大概十几分钟。

更实用的做法是把检测逻辑集成到CI流程里。每次代码合并前,自动对测试环境跑一遍TP漏洞检测,有异常直接阻断发布。这个思路不新鲜,但真正落地的团队不多。大多数还是等漏洞公开了,运维连夜打补丁,开发第二天被拉去复盘。

ThinkPHP官方修复速度其实不算慢,问题是很多项目锁死在老版本上。 composer.json里写死"topthink/framework": "5.0.*",一跑就是三四年。升级?牵一发动全身,谁也不敢动。检测工具这时候就成了照妖镜,照出来的不是框架的问题,是技术债的问题。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap