一文掌握 Java XXE 漏洞原理、利用与防御姿势(非常详细)从零基础到精通,收藏这篇就够了!

🧨 Java XXE 漏洞审计大全

一看就懂、二看就能用、三看就能把审计搞定!


🧠 一、什么是 XXE?

XXE(XML External Entity)漏洞是利用 XML 的“外部实体”功能,让服务器读取本地文件或访问远程地址(如 SSRF)。常见后果:

  • 读取文件(/etc/passwd 等)

  • 内网打点(SSRF)

  • 内存攻击(DoS)

  • 数据外带(OOB 数据 exfiltration)


🕵️‍♀️ 二、审计思路总览

重点审计点说明
是否解析 XML?关键类如:DocumentBuilder, SAXParser, SAXReader, SAXBuilder 等
是否接收用户输入?XML 来源是否用户可控?如从 HTTP 请求中接收
是否禁用了 DTD 和实体?未配置 setFeature(…, false) 就危险
是否使用了第三方 XML 解析框架?如 XStream, JAXB, Digester

🧪 三、漏洞分类+示例详解


① DocumentBuilderFactory(最常见)

📍 审计关注点:是否使用 DocumentBuilderFactory.newInstance() 并缺少安全配置。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xml)));

🛠 漏洞利用

<?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY xxeSYSTEM"file:///etc/passwd"> ]> <root>&xxe;</root>

🔍 **问题分析:**默认情况下没有禁用外部实体(例如 setFeature("...external-general-entities", false)),会导致解析器去访问本地文件。


② SAXParserFactory

📍 审计关注点:工厂是否创建了 SAXParser,是否缺少 feature 设置。

SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(new InputSource(new StringReader(xml)), new DefaultHandler());

🛠 利用方式:与上面相同,可注入恶意实体。

🔍 问题分析:SAX 解析器默认也支持 DTD 和实体,攻击者可植入恶意内容。


③ SAXReader(dom4j)

📍 审计关注点:是否直接使用 SAXReader.read(),XML 是否用户可控。

SAXReader reader = new SAXReader(); Document doc = reader.read(new StringReader(xml));

🛠 利用 XML

<?xml version="1.0"?> <!DOCTYPE foo [<!ENTITY xxeSYSTEM"file:///etc/shadow">]> <foo>&xxe;</foo>

🔍 问题分析SAXReader 默认没有禁用外部实体功能,是 XXE 高危区。


④ SAXBuilder(JDOM)

📍 审计关注:是否使用 SAXBuilder.build() 方法,尤其是参数是用户输入。

SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new StringReader(xml));

🛠 利用 XML:同样可读文件。

🔍 问题分析:JDOM 1.x 默认启用实体支持,攻击者可用 XXE 注入。


⑤ XMLReader

📍 审计关注点XMLReaderFactory.createXMLReader() 创建的对象是否设置安全特性?

XMLReader reader = XMLReaderFactory.createXMLReader(); reader.parse(new InputSource(new StringReader(xml)));

🛠 利用 XML:一模一样的恶意 DTD。

🔍 问题分析XMLReader 属于 SAX 机制,同样默认支持实体,需手动禁用。


⑥ Digester(Apache Commons)

📍 审计关注点:调用 digester.parse() 时的 XML 来源是否可控?

Digester digester = new Digester(); Object result = digester.parse(new StringReader(xml));

🛠 利用方式:和上面一样注入恶意实体。

🔍 问题分析:Digester 使用 SAX 解析器作为底层,继承其危险特性。


⑦ XMLInputFactory(StAX 解析器)

📍 审计关注:是否设置了 IS_SUPPORTING_EXTERNAL_ENTITIESSUPPORT_DTD

XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader xsr = factory.createXMLStreamReader(new StringReader(xml));

🛠 漏洞利用(SSRF)

<?xml version="1.0"?> <!DOCTYPE data [<!ENTITY xxeSYSTEM"http://internal-service.local:8080/api">]> <data>&xxe;</data>

🔍 **问题分析:**默认情况下 IS_SUPPORTING_EXTERNAL_ENTITIES = true


⑧ XStream

📍 审计关注点:是否使用 fromXML() 并允许用户提交的 XML。

XStream xstream = new XStream(); xstream.fromXML(xml);

🛠 漏洞利用

<!DOCTYPE foo [<!ENTITY xxeSYSTEM"file:///etc/hosts">]> <foo>&xxe;</foo>

🔍 问题分析:XStream 本身功能强大,低版本支持实体 + 任意类反序列化,属于超级高危点。


⑨ JAXB(Java 原生 XML 映射)

📍 审计关注:是否直接使用 unmarshaller.unmarshal(),是否传入外部 XML。

JAXBContext ctx = JAXBContext.newInstance(Foo.class); Unmarshaller unmarshaller = ctx.createUnmarshaller(); unmarshaller.unmarshal(new StringReader(xml));

🛠 利用方式:仍可注入 DTD。

🔍 问题分析:JAXB 内部使用 DocumentBuilderFactory,如果未配置安全特性就有风险。


📌 四、XXE 审计关键词清单

关键词用途
DocumentBuilderFactoryDOM 解析器(最常见)
newDocumentBuilder()创建解析器
parse(是否使用了解析方法
SAXParserFactory / newSAXParser()SAX 类型解析器
SAXReaderdom4j 解析器
SAXBuilderJDOM 框架
XMLInputFactoryStAX 解析器
DigesterApache Commons
XStream / fromXML第三方框架,高危点
Unmarshaller / JAXBContextJAXB 框架
setFeature关键审计点,看是否禁用了 DTD 和实体
SUPPORT_DTD / IS_SUPPORTING_EXTERNAL_ENTITIES特别针对 StAX

✅ 五、总结

🧭 看代码时,重点关注3个问题:

  1. 有没有 XML 解析?(关键词+代码)

  2. 用户能不能控制 XML 内容?

  3. 有没有禁用外部实体和 DTD?

  4. 上面主要类型,在代码中未发现 setFeature``setProperty 的相关配置大概率就有问题

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值