#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, вы должны делать тест на ХХЕ.
Чтобы проверить наличие XXE, просто введите свой вредоносный внешний объект и замените каждое значение узла с ним, как показано ниже:
Как показано выше, я создал внешний объект для получения данных в «/etc/passwd», и сохранил его в объекте XXE. Затем я поместил переменную в «<productID>». Если сервер не блокирует внешние объекты, ответ будет отражен. Затем Вы сможете получить содержимое файла «/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. Подготовка к охоте. База знаний.
#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.
#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.
#25 Bug Bounty. Часть 8: Фаза fingerprint.
#26 Bug Bounty. Censys. Nmap. Masscan.
#27 Bug Bounty. Веб-приложение.
#28 Bug Bounty. Этап эксплуатации.
#30 Bug Bounty. Неправильно настроенные сегменты облачного хранилища.
#31 Bug Bounty. Облачное хранилище Google.
#32 Bug Bounty. Elastic Search DB.
#34 Bug Bounty. Kubernetes API.