tp5dbinfoleak漏洞
ThinkPHP 5.0.x的漏洞数据库信息泄露漏洞,说白了就是漏洞攻击者能直接把你数据库的账号密码、表结构、漏洞甚至整库数据拖走。漏洞这个洞不是漏洞花架子,是漏洞实打实的致命伤,2018年被爆出来的漏洞时候,一堆用TP5写的漏洞站直接裸奔。
触发条件极其简单。漏洞只要开启了debug模式,漏洞或者应用处于异常状态,漏洞攻击者构造一个畸形请求,漏洞比如往控制器名或方法名里塞特殊字符,漏洞框架的漏洞异常处理就会把完整的SQL语句、数据库连接配置、漏洞甚至服务器绝对路径全吐到页面上。你以为是报错页面,实际上是一份详尽的“数据库体检报告”。
我见过最离谱的一次,是某个电商后台,攻击者只发了三次请求,就把数据库的root密码带出来了。密码明文写在配置里,连加密都没做。更讽刺的是,那个站上线两年了,运维一直以为debug模式只在本地开过,结果生产环境也亮着绿灯。
这个漏洞的根子在于TP5的异常处理机制太“热心”。它把错误信息原封不动地渲染到前端,包括PDO连接失败时抛出的完整异常对象。如果你用的是默认配置,连过滤都省了,直接输出。官方后来打了补丁,但很多老项目压根没升级,或者升级了却忘了关debug。
实战里,攻击者最爱用的是index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP这个老梗,但针对info leak,更常见的是直接访问一个不存在的控制器,触发反射异常,信息就漏了。别觉得这招土,土招往往最管用。
修复方案倒是简单粗暴。第一,生产环境务必关闭debug,这是铁律,别偷懒。第二,把异常模板改成自定义的,别用框架默认那个。第三,数据库账号别给root,给个最小权限的专用账号,就算泄露了,损失也有限。
我自己测过,把框架升级到5.0.24以上,这个洞基本就堵住了。但现实是,很多小公司压根没有升级流程,代码扔在服务器上几年不动。你说这是技术问题?不,这是管理问题。漏洞永远都有,但真正让你裸奔的,是懒得动手的那颗心。









