Выполните следующие действия: Основа c Рабочий пример атаки 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 анализируется и используется, так что это большой шаг вперед.
Любые советы приветствуются ~!