ThinkPHP 5.0.0–5.0.23存在远程代码执行漏洞,因Request类method方法对$_POST['_method']校验不严,导致攻击者可通过_method=__construct等参数覆盖属性并调用system等函数实现RCE。

确认数据库是否因ThinkPHP漏洞被拖库,必须从日志痕迹、请求特征、框架版本三方面交叉验证,不能仅凭数据库异常就归因于框架。
查服务器访问日志找攻击特征
进入Web服务日志目录(如Nginx的/var/log/nginx/access.log或Apache的/var/log/apache2/access.log),用grep筛选含ThinkPHP典型RCE参数的请求:
grep -E "(s=.*invokefunction|/think\app|call_user_func_array|vars[0]=system)" access.log
若发现大量类似/index.php?s=/index/ hinkpp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id的请求,且时间集中在数据库导出前数分钟,这就是强关联证据。
注意:日志中若出现phpinfo()、cat /etc/passwd、mysqldump、SELECT.*FROM.*information_schema等命令执行痕迹,基本可锁定为RCE漏洞利用后拖库。
核验ThinkPHP版本与已知漏洞匹配
第一步:定位项目根目录下的thinkphp/library/think/App.php或thinkphp/library/think/Request.php文件,用head -n 10查看头部注释或版本标识;
第二步:检查composer.json中"topthink/thinkphp"的require版本号;
第三步:对照已知高危版本矩阵——【ThinkPHP 5.0.0–5.0.23存在通杀RCE漏洞,5.1.0–5.1.31存在SQL注入漏洞,3.2.3及更早版本存在日志泄露+远程代码执行组合链】;
若版本落入上述区间,且未打补丁(如5.0.24+、5.1.32+、3.2.4+),则漏洞利用路径成立。
检查数据库连接配置是否暴露在日志中
方法一:直接检索Runtime日志文件(ThinkPHP默认路径为Runtime/Logs/或runtime/log/)中是否包含明文数据库连接信息:
find . -name "*.log" -exec grep -l "host=.*user=.*password=" {} ;
方法二:若APP_DEBUG=true且未关闭调试模式,访问/runtime/log/24_08_06.log(按当天日期推算)可能直接看到完整SQL查询语句,其中包含表名、字段名甚至WHERE条件里的手机号、身份证号等敏感数据。
这一步能快速判断攻击者是否通过日志泄露拿到了数据库结构和凭证,继而绕过Web层直接连接MySQL拖库。
抓取当前运行进程确认恶意持久化行为
① 执行ps aux | grep -E "(php|mysql|sh)",重点观察是否存在非Web服务启动的PHP子进程,尤其是调用mysqldump或curl向外传输数据的进程;
② 检查/tmp或/var/tmp下是否有近期生成的大型.sql、.zip、.7z文件,文件名含backup、dump、data等关键词;
③ 运行netstat -tulnp | grep :3306,确认是否有非本机IP(如103.21.128.x、185.103.249.x等常见攻击源段)正通过3306端口直连数据库——这说明攻击者已获取DB账号密码,不再依赖Web漏洞。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











