Следуйте этому: Основной рабочий пример атаки XXE в HTML
казалось легче сделать это продолжение, чем пытаться втиснуть мой прогресс в предыдущий вопрос. Я подумал, что лучше позволить правильному ответу на этот вопрос казаться правильным простым и понятным.
Теперь я развил свой пример до следующего:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p id="xmlOut"></p>
<script type="application/javascript">
var xml = `
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///etc/passwd">
<!ENTITY bar "test that entity substitution works in general">
]>
<foo>
display some text | &bar; | &xxe;
</foo>
`;
parser = new DOMParser();
xmlDoc = parser.parseFromString(xml, "text/xml");
document.getElementById("xmlOut").innerHTML = xmlDoc.getElementsByTagName("foo")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
Здесь я пишу XML в виде строки и анализирую ее парсером DOM. Все работает, как и ожидалось, за исключением того, что сущность xxe ничем не заполнена. Кажется возможным, как заявил ответчик на последний вопрос, что firefox блокирует внешний объект ... прочее. Я также пытался заменить текстовый файл в своем домашнем каталоге, но это тоже не сработало. Я также пытался указать путь без префикса file://
. Пока ничего не сработало.
Я могу подтвердить, что DTD анализируется и используется, так что это большой шаг вперед.
Любые советы приветствуются ~!