JBoss 4.x JBossMQ JMS 反序列化漏洞 CVE-2017-7504(参考peiqi文库以及gpt)

Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
因为没有鉴权,攻击者能调用这个接口;
而这个接口内部又错误地把用户输入当成"可执行对象",
所以最终导致了代码执行。

|----------|----------------|
| 漏洞 | 本质人话 |
| 任意文件读取 | 不该给你看的文件,给你看了 |
| 未授权访问 | 不该你用的功能,你能用 |
| 反序列化 RCE | 不该执行你给的东西,却执行了 |

CVE-2017-7504 = 未授权 + 反序列化 = RCE
首先通过未授权,我们可以使用这个接口,而这个接口又有反序列化功能,我们将命令藏在其中导致反序列化的时候可以执行这个命令
public class HttpInvokerServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { InputStream is = request.getInputStream(); // ❌ 直接反序列化用户输入 ObjectInputStream ois = new ObjectInputStream(is); try { Object obj = ois.readObject(); // ← 漏洞点 process(obj); } catch (Exception e) { e.printStackTrace(); } }
}
chatgpt模拟的伪代码
对于用户输入的数据会直接使用readObject进行反序列化
到底是如何夹带命令的,下边举例一个序列化之前的代码
public class EvilObject implements Serializable {
private void readObject(ObjectInputStream in) throws Exception { in.defaultReadObject(); // 反序列化瞬间执行 Runtime.getRuntime().exec("calc"); }
}
攻击者会将这整个类都序列化,等到反序列化时,会直接还原出一个对象来直接进行执行
readObject() 就是 Java 反序列化过程中最关键、最危险的那个函数。
攻击者会将这整个类都序列化,等到反序列化是,会直接还原出一个类来直接进行执行(这是我之前的观点,但是并不是特别正确)攻击者不是构造一个类,而是通过一些方式利用java已经存在的类

✅ 正确理解

你家里本来就有刀、火、汽油
我只是教你:
先点火 → 再倒油 → 再扔刀
你照着做,出事了
👉 东西都是你家的,我只是安排顺序
反序列化攻击 = 不发新代码,
而是让服务器用"它自己已有的代码"把自己打死
JBoss 在反序列化对象时,会自动触发一连串对象方法调用;
我构造一个"层层嵌套的对象结构",
让 JVM 在反序列化过程中一层一层调用,
最终调用到 Runtime.exec() 执行命令。

想象你给 JBoss 寄了一个"套娃"

盒子 A └── 盒子 B └── 盒子 C └── 盒子 D(写着:执行命令)
JBoss 反序列化时会做什么?

  1. 打开 A(调用 A 的方法)
  2. A 里面要用 B → 打开 B
  3. B 里面要用 C → 打开 C
  4. C 里面要用 D → 打开 D
  5. D 的方法里:💥 Runtime.exec()
    👉 你不是让它"解密"
    👉 是让它 按规则自己拆盒子

为什么叫 gadget「链」?

因为它真的就是一条链:
readObject()

hashCode()

get()

transform()

invoke()

exec()
这里博主使用ysoserial工具生成这个二进制数据然后放入脚本进行请求
import requests url = "http://192.168.68.129:8080/invoker/JMXInvokerServlet" with open(r"E:\HTML\pythonscript\JBoss\passwd1.bin", "rb") as f: payload = f.read() headers = { "Content-Type": "application/x-java-serialized-object" } r = requests.post(url, data=payload, headers=headers, timeout=5) print(r.content)
不过报错了,通过chatgpt的指导发现了问题
JBoss只接收MarshalledInvocation 这种"JBoss 远程调用请求包"
发送的最外层对象,必须是 MarshalledInvocation 这种"JBoss 远程调用请求包"
我直接将这个MarshalledInvocation当中的内容发过去了怪不得报错
不过由于我这里并没有jboss相关配置所以就不再进行演示漏洞利用了

相关推荐
小新ya14 小时前
gpt导出聊天记录
gpt·聊天记录导出
向量引擎16 小时前
复刻“疯狂的鸽子”?用Python调用Sora2与Gemini-3-Pro实现全自动热点视频流水线(附源码解析)
开发语言·人工智能·python·gpt·ai·ai编程·api调用
程序员佳佳1 天前
【万字硬核】从零构建企业级AI中台:基于Vector Engine整合GPT-5.2、Sora2与Veo3的落地实践指南
人工智能·gpt·chatgpt·ai作画·aigc·api·ai编程
悟道心2 天前
8. 自然语言处理NLP -GPT
人工智能·gpt·自然语言处理
周周爱喝粥呀3 天前
LLM 中的自回归模型与非自回归模型:GPT 和 BERT 的区别
人工智能·gpt·ai·回归
共绩算力3 天前
DeepSeek V3.2 迈向 GPT-5 级别性能的路径:稀疏注意力、大规模强化学习与上下文重用
人工智能·gpt·共绩算力
百***24373 天前
GPT-5.2 vs DeepSeek-V3.2 全维度对比:一步API适配下的研发选型指南
gpt
百***24373 天前
GPT-5.2与DeepSeek-V3.2选型指南:一步API通用下的全维度技术对比
gpt
维度攻城狮3 天前
科研提速!Zotero Awesome GPT 搭配本地 Ollama 模型使用指南
gpt·zotero·ollama·awesome gpt
victory04314 天前
同一prompt下 doubao qwen gpt kimi的模型训练时长预测不同表现
gpt·prompt