Basi c Рабочий пример атаки XXE в HTML часть 2 - PullRequest
0 голосов
/ 27 января 2020

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

Любые советы приветствуются ~!

1 Ответ

0 голосов
/ 27 января 2020

похоже, что большинство браузеров не загружают внешние DTD, что делает этот тип атаки xxe довольно трудным для тестирования: Правильное использование Внешнего DTD для XML

Если у кого-то есть другие идеи хотя, не стесняйтесь оставлять ответ или комментарий!

...