漏洞复习-XXE
XXE漏洞简介
XXE全称:XML external entity injection,即XML外部实体注入漏洞。
漏洞成因:解析时未对XML外部实体加以限制,导致攻击者将恶意代码注入到XML中,导致服务器加载恶意的外部实体引发文件读取,SSRF,命令执行等危害操作。
About XML
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML用于传输数据
XML长这样:
1 |
|
DTD实体
由于我们学习的是漏洞方面,以下内容忽略内部实体。
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
典型恶意实体(读取本地文件):
1 |
|
结构分析:
<?xml version="1.0" encoding="utf-8"?>
:XML 声明,指定 XML 版本和字符编码。<!DOCTYPE root [ ... ]>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
:DTD (Document Type Definition) 声明,定义了 XML 文档的结构。
- `<!ENTITY file SYSTEM "file:///D://1.txt">`:定义了一个名为 `file` 的外部实体。`SYSTEM` 关键字表明这个实体的内容将从 URI `file:///D://1.txt` 加载,也就是尝试读取本地文件 `D://1.txt`。
- `<root>&file;</root>`:XML 文档的根元素。它包含对之前定义的 `file` 实体的引用。
## 漏洞Demo
为了方便,直接用PHP代码进行演示:
有回显版:
```php
<?php
libxml_disable_entity_loader (false);
//开启了实体加载
$xmlfile = file_get_contents('php://input');
//获取POST原始数据
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
echo $creds;
//回显
?>
Payload:
1 | <?xml version="1.0" encoding="utf-8"?> |
注意,如果用Hackbar提交POST的话,要开启(raw)模式:
成功读取了D盘下的txt文件。
漏洞利用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xiaofuc's Blog!