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相关配置所以就不再进行演示漏洞利用了

相关推荐
2501_948114245 天前
【2026架构实战】GPT-5.3与蒸汽数据融合:基于Open Claw与星链4SAPI的RAG落地指南
gpt·架构
小雨中_8 天前
3.1 GPT 系列:Generative Pre-Training(从 GPT-1 到 GPT-3)
人工智能·gpt·深度学习·机器学习·自然语言处理·gpt-3
香芋Yu8 天前
【2026大模型面试圣经】(2)主流大模型架构全景 | GPT/LLaMA/DeepSeek/Qwen深度对比
gpt·面试·架构
一个努力编程人8 天前
NLP领域————GPT算法
人工智能·gpt·自然语言处理
狮子座明仔9 天前
REDSearcher:如何用30B参数的小模型,在深度搜索上击败GPT-o3和Gemini?
人工智能·gpt·深度学习·microsoft·语言模型·自然语言处理
智算菩萨10 天前
2026年春节后,AI大模型格局彻底变了——Claude 4.6、GPT-5.2与六大国产模型全面横评
人工智能·gpt·ai编程
Learner__Q12 天前
GPT模型入门教程:从原理到实现
python·gpt
五月君_13 天前
除夕夜炸场!Qwen 3.5 正式发布:激活仅 17B,性能硬刚 GPT-5.2?
gpt
向量引擎小橙15 天前
视觉艺术的“奇点”:深度拆解 Gemini-3-Pro-Image-Preview 绘画模型,看这只“香蕉”如何重塑 AI 创作逻辑!
人工智能·python·gpt·深度学习·llama
阿乐艾官15 天前
【MBR与GPT分区】
gpt