Bug Bounty, Bug Hunting, XML External Entity (XXE), Охота за ошибками

#38 Bug Bounty. Эксплуатация OWASP. XML External Entity (XXE).

Здравствуйте, дорогие друзья.

Введение

Если Вы столкнетесь с приложением, созданным по индивидуальному заказу, Вы не сможете искать известные CVE, и Вам придется искать эти уязвимости вручную. Это потребует от Вас знаний о 10 основных уязвимостях OWASP и о многих других, не перечисленных там. Вам необходимо научиться тестировать распространенные уязвимости, такие как XSS, SQLI, LFI, RFI, CSRF, XXE и SSRF. Единственный инструмент, который Вам нужен, это Burp Suite:

https://portswigger.net/burp

Тем не менее, некоторые тестировщики предпочитают использовать автоматизированные сканеры, такие как сканер SQL-инъекций, сканеры XSS, сканер Burp и другие. Я обычно использую смесь автоматических сканеров и ручное тестирование, так как они оба имеют свои преимущества и недостатки.

XML External Entity (XXE)

Введение

XML External Entity (XXE) — это уязвимость, которая может появиться, когда приложение разбирает XML. Прежде чем погрузиться в то, что такое XXE, Вам нужно иметь твердое представление о том, что такое XXE, и понимание XML в первую очередь.

Основы XML

Расширяемый язык разметки (XML) — это язык, предназначенный для хранения и передачу данных, аналогичные JSON. Пример того, как выглядит XML, можно найти ниже:

<?xml version=»1.0″ encoding=»UTF-8″?>

<bookstore>

<book category=»cooking»>

<title lang=»en»>Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category=»children»>

<title lang=»en»>Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

В первой строке Вы можете увидеть пролог, который содержит версию XML и кодирование. Профессиональный совет: если Вы когда-нибудь увидите это в burp, Вам следует немедленно проверить ХХЕ: <?xml версия=»1.0″ кодировка=»UTF-8″?> Под ним Вы видите тег «<bookstore>», представляющий корневой узел. Там два дочерних узла с именем «<book>», и каждый из них содержит дочерние узлы называется “<title>,<author>,<year>,<price>”.

<root>

<child>

<subchild>…..</subchild>

</child>

</root>

Это базовая структура XML, но есть еще кое-что, что Вам следует знать. Существует нечто, называемое определением типа документа (DTD), которое определяет структуру, допустимые элементы и атрибуты XML-документа, как показано ниже:

<?xml version=»1.0″?>

<!DOCTYPE note [

<!ENTITY user «Ghostlulz»>

<!ENTITY message «got em»>

]>

<test><name>&user;</name></test>

Как показано выше, есть нечто, называемое ENTITY. Она действует как переменная. В в этом примере объект «user» содержит текст «Ghostlulz». Эту сущность можно назвать набрав «&user;» и он будет заменен текстом «Ghostlulz». Вы также можете использовать что-то, называемое внешним объектом, который будет загружать свои данные из внешнего источника. Это можно использовать для получения содержимого из URL-адреса или файла на диске, как показано ниже:

1. <!DOCTYPE foo [ <!ENTITY ext SYSTEM «http://example.com» > ]>

2. <!DOCTYPE foo [ <!ENTITY ext SYSTEM «file:///path/to/file» > ]>

ХХЕ

Я упомянул, что Вы можете использовать внешние объекты для захвата данных из файла на диске и сохранить его в переменной. Что, если мы попытаемся прочитать данные из файла «/etc/passwd» и хранить в переменной? Обратите внимание, что для чтения данных объект должен вернуться в ответ. Зная это, давайте попробуем использовать нашу тестовую среду. Находясь в burp, я перехватил следующий запрос POST, который, похоже, использует XML для отправки данных в серверную систему. Всякий раз, когда вы видите XML, вы должны делать тест на ХХЕ.

xml

Чтобы проверить наличие XXE, просто введите свой вредоносный внешний объект и замените каждое значение узла с ним, как показано ниже:

вредоносный внешний объект

Как показано выше, я создал внешний объект для получения данных в «/etc/passwd», и сохранил его в объекте XXE. Затем я поместил переменную в «<productID>». Если сервер не блокирует внешние объекты, ответ будет отражен. Затем Вы сможете получить содержимое файла «/etc/passwd» как показано ниже:

пролучаем содержимое файла /etc/passwd

Вывод

Большинство приложений передают данные с использованием JSON, но Вы можете столкнуться с приложениями с помощью XML, и тогда Вы действительно всегда проверяете их на XXE. Злоупотребление этой уязвимостью позволяет читать произвольные файлы, что может привести к полной компрометация машины. Уязвимое приложение, которое я использовал, можно найти на странице академии веб-безопасности, созданной Port swigger, она бесплатная:

https://portswigger.net/web-security

На этом все. Всем хорошего дня!

#1 Bug Bounty. Подготовка к Bug Bounty. Введение.

#2 Bug Bounty. Организация. Введение.

#3 Bug Bounty. Заметки. Введение.

#4 Bug Bounty. Подготовка к охоте. База знаний.

#5 Bug Bounty. RSS-каналы.

#6 Bug Bounty 101. Выбор платформы.

#7 Bug Bounty. Выбор правильной цели.

#8 Bug Bounty. Методология — рабочие процессы.

#9 Bug Bounty. Рабочий процесс GitHub.

#10 Bug Bounty. Гугл Дорки Рабочий процесс.

#11 Bug Bounty. Эксплойты — Рабочий процесс.

#12 Bug Bounty. CMS — Рабочий процесс.

#13 Bug Bounty. Брутфорс — Рабочий процесс.

#14 Bug Bounty. Раздел 2. Разведка.

#15 Bug Bounty. Reverse Whois.

#16 Bug Bounty. Гугл Дорки.

#17 Bug Bounty. Разведка — Фаза 2. Словарь.

#18 Bug Bounty. Перечисление поддоменов.

#19 Bug Bounty. Поисковый движок.

#20 Bug Bounty. Перестановка поддоменов.

#21 Bug Bounty. Разрешения DNS.

#22 Bug Bounty. Wayback Machine crawl data.

#23 Bug Bounty. Проверка файлов JavaScript.

#24 Bug Bounty. Гугл Дорки.

#25 Bug Bounty. Часть 8: Фаза fingerprint.

#26 Bug Bounty. Censys. Nmap. Masscan.

#27 Bug Bounty. Веб-приложение.

#28 Bug Bounty. Этап эксплуатации.

#29 Bug Bounty. GitHub.

#30 Bug Bounty. Неправильно настроенные сегменты облачного хранилища.

#31 Bug Bounty. Облачное хранилище Google.

#32 Bug Bounty. Elastic Search DB.

#33 Bug Bounty. Docker API.

#34 Bug Bounty. Kubernetes API.

#35 Bug Bounty. .git/.svn

#36 Bug Bounty. Эксплуатация CMS. WordPress.

#37 Bug Bounty. Joomla. Drupal. Adobe AEM.