ThinkPHP漏洞实战:从phpinfo到flag的AWD攻防解析

张开发
2026/4/11 13:38:51 15 分钟阅读

分享文章

ThinkPHP漏洞实战:从phpinfo到flag的AWD攻防解析
1. ThinkPHP漏洞实战入门从发现到利用第一次参加AWD比赛时看到靶机上跑着ThinkPHP框架我差点笑出声。这就像在迷宫里发现了一张标着出口的地图因为ThinkPHP的漏洞在CTF圈子里实在太出名了。记得当时手都在抖生怕被别人抢先拿到flag。phpinfo页面往往是突破口的关键指示灯。通过构造特殊的URL参数我们可以让服务器吐出这个信息大礼包。具体操作是在URL后面拼接这样的参数/index.php/?sIndex/\think\View/displaycontent??php phpinfo();?data1这个POC的工作原理很有意思。ThinkPHP框架的路由解析有个特点它会将s参数中的反斜线解析为控制器路径。这里的Index/\think\View/display实际上是在调用View控制器的display方法而content参数中的PHP代码会被直接执行。2. 漏洞利用的完整链条解析2.1 信息收集阶段拿到phpinfo只是第一步就像侦探破案要先勘察现场。我会重点关注这几个信息PHP版本可能关联其他漏洞禁用函数列表影响后续利用网站绝对路径定位关键文件加载的扩展模块可能存在的漏洞有一次比赛我就是在phpinfo里发现服务器还开着Redis服务最后通过未授权访问拿到了flag。这些细节往往决定比赛的胜负。2.2 目录遍历与文件查看知道路径后下一步就是探索文件系统。把之前的POC稍作修改/index.php/?sIndex/\think\View/displaycontent??php system(ls /../);?data1这个命令会列出根目录下的文件。注意/../的使用是为了突破web目录限制有时候需要多尝试几层目录回溯。遇到过滤时可以尝试这些变形使用反引号代替system函数用scandir()替代ls尝试print_r(glob(*))查看当前目录3. AWD实战中的进阶技巧3.1 多版本POC适配不同版本的ThinkPHP漏洞利用方式略有差异。我电脑里存着这样的对照表版本范围有效POC特征5.0-5.1需要闭合双引号5.2.x支持简写语法3.2.x要带namespace参数比赛时如果遇到不生效的情况别急着放弃换个版本试试。有次我连续尝试了5个变种才成功。3.2 绕过防护的奇技淫巧现在的AWD环境越来越智能常见防护手段包括关键词过滤如禁用system流量监控行为分析我的应对方案是// 用文件操作函数代替命令执行 file_get_contents(/../flag); // 编码混淆 $f s.y.s.t.e.m; $f(whoami); // 时间盲注技巧 if(file_exists(/flag)) sleep(3);4. 从攻击到防御的完整闭环4.1 漏洞修复方案作为负责任的选手拿到flag后别忘了修复漏洞。对于这个RCE漏洞官方推荐的修复方式是升级到最新安全版本在入口文件添加if(strpos($_SERVER[REQUEST_URI], \\) ! false){ die(Hacker!); }关闭display方法的动态调用4.2 防守方的监控策略好的防守能让对手无从下手。我会在服务器部署这些监控实时日志分析脚本检测异常参数关键文件哈希校验蜜罐文件诱捕攻击者有次比赛我在/flag旁边放了个假flag文件成功捕获了三个对手的攻击payload。这种防守反击的策略往往能出奇制胜。5. 真实比赛中的经验分享去年的一场线下赛让我记忆犹新。当时所有队伍都在疯狂利用这个漏洞导致比赛平台直接宕机。裁判临时修改规则要求在不使用RCE的情况下拿flag。这时候对框架的深入理解就派上用场了。我通过组合利用这些方法最终获胜使用ThinkPHP的日志泄露漏洞获取数据库配置通过SQL注入找到管理员密码hash用弱口令爆破进入后台在模板编辑功能处写入PHP代码这个案例告诉我们不要只盯着最明显的漏洞。真正的高手需要掌握完整的攻击链条。平时可以多看看框架的官方文档了解其架构设计这样在遇到变种题目时才能游刃有余。

更多文章