Сбой атаки на внешние сущности XML (XXE)

Пожалуйста, дайте мне подсказку, почему мой код НЕ уязвим для XXE.

код:

$text = $_POST['textarea'];
$doc= new DOMDocument();
$doc->loadXML($text);
echo $doc->textContent;

контрольный пример 1:

<justsomexmltag>Hello world</justsomexmltag>

результат 1:

Hello world

Все идет нормально. Тем не менее, когда я пытаюсь внедрить код XML для получения содержимого локального файла:

<?xml version="1.0"?>
<!DOCTYPE log [
<!ENTITY ent SYSTEM "test.txt">
]>
<log><text>&ent;</text></log>

тогда ничего не печатается. «test.txt» находится на том же уровне в файловой структуре, что и файл php, где я выполняю атаку. я пытался

<!ENTITY ent SYSTEM file:///"test.txt">

так же как

<!ENTITY ent SYSTEM file:///full path to the file>

но безрезультатно.

test.txt:

This is just a test.

Пытался:

<test>This is just a test.</test>

Нет результатов.

Есть намеки?

отражая @Paul Crovella, вот редактирование:

CP-код вашего кода привел к:

DOMDocument :: loadXML (): предупреждение ввода-вывода: не удалось загрузить файл внешнего объекта: // полный путь к имени файла

DOMDocument :: loadXML (): сбой при обработке объекта в Entity

DOMDocument :: loadXML (): Entity ‘ent’ не определен в Entity

0

Решение

По умолчанию libxml не будет загружать внешние объекты точно, чтобы избежать этой проблемы. Чтобы убедить это сделать, вам нужно установить либо substituteEntities или же validateOnParse в true до загрузки. Например.:

$xml = <<<'XML'
<?xml version="1.0"?>
<!DOCTYPE log [
<!ENTITY ent SYSTEM "test.txt">
]>
<log><text>&ent;</text></log>
XML;

$dom = new DOMDocument();
$dom->substituteEntities = true;
$dom->loadXML($xml);

echo $dom->textContent;

Выходы:

This is just a test.
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]