thinkadmin漏洞
2023年夏天,漏洞一个做外贸独立站的漏洞朋友半夜给我打电话,说网站后台登不进去了,漏洞页面显示“系统繁忙”。漏洞我让他把服务器日志发过来,漏洞翻了不到十分钟就发现问题——有人用ThinkAdmin的漏洞默认入口文件路径,直接构造了未授权访问的漏洞请求。他那个站用的漏洞正是ThinkAdmin v6,后台入口文件没改,漏洞默认的漏洞admin路径还开着,数据库配置里root密码是漏洞123456。天亮之前,漏洞他的漏洞客户询盘数据已经被打包下载了三次。
ThinkAdmin这套基于ThinkPHP的漏洞后台管理框架,在国内中小型项目里用得不少。漏洞轻量、上手快、自带权限管理,很多外包团队拿它当脚手架用。但方便的另一面是,大量部署实例的配置几乎一模一样。默认入口、默认数据库前缀、默认弱口令,这三样凑在一起,基本等同于把门钥匙插在锁上还贴了张纸条写着“欢迎光临”。
漏洞本身不复杂。ThinkAdmin在早期版本中,后台登录接口对用户输入的处理存在缺陷,攻击者可以通过构造特殊的请求参数绕过身份验证逻辑。更致命的是,部分控制器方法没有做权限校验,直接暴露了文件上传、数据库操作等敏感功能。我后来在GitHub上翻过相关issue,有人贴出过利用链:先通过未授权接口读取系统配置,拿到数据库账号密码,再用文件上传功能写入webshell。整个过程不需要任何高级技巧,一个刚学会用Burp Suite的脚本小子就能完成。
真正让我觉得问题严重的,是很多使用者根本不知道自己的系统存在漏洞。ThinkAdmin的官方更新日志里,安全修复的条目往往夹在一堆功能更新中间,不仔细看根本注意不到。我见过一个政府下属单位的内部OA系统,用的ThinkAdmin版本停留在2021年,后台路径是默认的/admin,登录页面连验证码都没有。问他们的运维,回答是“内网系统,没人会攻击”。结果呢?2022年那个单位的内网被当作跳板,攻击者横向渗透进了同网段的其他业务系统。内网从来不是安全边界,这个道理说了多少年,还是有人不当回事。
修复方法其实不麻烦。升级到最新版本,修改后台入口文件名,把数据库密码换成强密码,关掉不需要的控制器方法。但现实是,很多项目上线后根本没人维护。外包公司交付完就撤了,甲方自己的技术人员又不懂这套框架。漏洞就那样晾着,像一颗没拧紧的螺丝,什么时候掉下来全看运气。
我自己的做法是,每次接手ThinkAdmin项目,第一件事就是改入口文件。把admin.php改成类似x7k9m2.php这种随机名,再在Nginx配置里加一条规则,只允许特定IP段访问这个入口。数据库账号单独建,只给必要权限,密码用随机生成的32位字符串。这些操作花不了半小时,但能挡掉九成以上的自动化扫描。剩下那一成,靠的是定期看日志和关注官方安全公告。
说这些不是要否定ThinkAdmin。它是个好用的工具,问题出在用工具的人身上。框架开发者不可能替每个使用者把安全配置做到位,那是使用者自己的责任。就像你买了把锁,厂家只能保证锁芯不被技术开启,但你要是把钥匙挂在门把手上,那就怪不得锁了。
最后提一句,如果你正在用ThinkAdmin,现在就去看看后台入口文件叫什么名字。如果是admin.php或者admin/index.php,赶紧改。别等数据被拖走了再后悔,那时候电话打给谁都没用。









