我正在尝试在html页面中对XXE攻击进行一些测试,但是我很难提出一个可行的示例。在互联网上浏览了很长时间后,我想到了这个:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script id="embeddedXML" type="text/xml">
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>
</script>
</head>
<body>
<script type="application/javascript">
alert(document.getElementById('embeddedXML').innerHTML);
</script>
</body>
</html>
但是,它不起作用。脚本标记内的XML本身并不“运行”,这意味着当警报弹出时,它仅将XML显示为纯文本。它不解释DOCTYPE标头,也不从列出的文件中获取信息。
很难做到这一点,因为XML显然不能“运行”,但是在解释此文本而不是仅仅写出文本时需要发生一些事情。我不知道那是什么,也不知道如何在此处编写的HTML页面中使用它。
非常感谢任何提示。谢谢!
请参见OWASP
危险因素中有:
应用程序解析XML文档。
现在,脚本元素被定义为(包含HTML 4术语)包含CDATA,因此其中的标记(</script>
除外)没有特殊含义。因此,那里没有进行XML解析。
同时alert()
处理字符串,而不处理标记,因此仍然没有进行XML解析。
因为您没有XML解析器,所以没有漏洞。
[通常,如果要在网页中间进行XML解析,则需要使用JavaScript(例如,使用DOM Parser,但如果它不具备DTD识别能力且因此不易受攻击,我也不会感到惊讶(即使它很容易受到攻击,那么很可能会阻止对本地外部实体的访问。]