- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|||||
w Click |
to |
BUY 310 |
|||||||||
|
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
Глава 11.Атака на API
|
|
|
|
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 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Рис.11.27. Запуск коллекции,перехваченный Burp
Теперь можем запустить модули Scanner, Intruder и Sequencer или повторно воспроизвести любой запрос, чтобы манипулировать данными и искать уязвимости, как мы обычно делаем, когда работаем с традиционными приложениями.
Факторы атаки
Атаки на API на базе HTTP на самом деле ничем не отличаются от атак на традиционные веб-приложения. Мы должны следовать той же основной процедуре:
определитьточки внедрения;
отправить непредвиденный ввод и наблюдать за поведением API;
искать обычных подозреваемых: SQL-инъекции, XXE, XSS, внедрение команд,локальное и удаленное включение файлов.
Можно использовать уже известные советы и хитрости, чтобы найти эти проблемы, за некоторыми исключениями.
Наличие XSS-уязвимостей в типичном веб-приложении легко доказать. Вы отправляете входные данные, они отображаются клиенту в виде HTML или JavaScript, браузер выводит содержимое, и код выполняется.
В случае с веб-сервисами ответ обычно не отображается, в основном из-за заголовка Content-Type, устанавливаемого в ответе. Обычно это формат JSON илиXML,которыебольшинствобраузеровнебудетотображатькакHTML.Яговорю «большинство», потому что, к сожалению, некоторые старые браузеры
|
|
|
|
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 |
|
|
Факторы атаки 311 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
по-прежнему отображают контент, игнорируя заголовок Content-Type, ука- |
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
|
занный сервером, и делая догадки на основе данных в ответе. |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
В URL-адресе api.ecorp.local/user/1 |
была обнаружена следующая отра- |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
женная проблема ввода: |
|
|
|
|
|
|
|
|
|
|
|
|
GET /user/1<svg%2fonload=alert(1)> HTTP/1.1 Content-Type: application/json
X-Auth-Token: 3284bb036101252db23d4b119e60f7cc cache-control: no-cache
Postman-Token: d5fba055-6935-4150-96fb-05c829c62779 User-Agent: PostmanRuntime/7.1.1
Accept: */*
Host: api.ecorp.local:8081 Connection: close
Передаем полезную нагрузку JavaScript и видим, что API отражает ее обратно клиенту без экранирования.
HTTP/1.0 200 OK
Date: Tue, 24 Apr 2018 17:14:03 GMT
Server: WSGIServer/0.1 Python/2.7.11 Content-Length: 80
Content-Type: application/json
{"response": {"error": {"message": "user id 1<svg/onload=alert(1)> not
found»}}}
Обычно этого достаточно, чтобы доказать, что уязвимость существует и можно атаковать пользователей с помощью методов социальной инженерии. Однако если приглядеться, то можно заметить, что в значении Content-Type стоит application/json, а это означает, что современные браузеры не будут отображать ответ в виде HTML-кода, что делает нашу полезную нагрузку бесполезной.
API по-прежнему дают какую-то надежду. К веб-сервисам обычно нет прямого доступа в разъединенной среде.Возможно,этот конкретный API используется веб-приложением. Сообщение об ошибке может в конечном итоге попасть в браузер, что может отобразить нашу полезную нагрузку. Что делать, если все ошибки регистрируются в веб-сервисе, а затем аккуратно отображаются в панели состояния, которая видна только внутри? Тогда мы выполним код, написанный на JavaScript,для аналитика, проверяющего состояние API.
Сканеры веб-приложений могут идентифицировать эту проблему, но присвоить ей статус информации, а не предупреждения или ошибки, и ее можно пропустить. Важно учитывать контекст каждой уязвимости и то, как уязвимая
|
|
|
|
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 312 Глава 11.Атака на API |
w Click |
to |
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
служба может использоваться разными клиентами.Вспомните о внеполосном |
|
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
обнаружении и об эксплуатации уязвимостей при атаке API-интерфейсов, поскольку не все уязвимости сразу могут быть очевидными.
Резюме
Вэтой главе мы рассмотрели различные способы, облегчающие атаку на API. Описали два наиболее распространенных стандарта для веб-сервисов: SOAP и REST–и рассмотрели,какобрабатывается аутентификацияи какую рольиграюттокены JWT при безопасном обменеданными.Мы исследовали инструменты и расширения, которые помогают нам стать более эффективными.
Также мы поэкспериментировали с Postman и с идеей автоматического обнаружения уязвимостей и тестирования входов и конечных точек API.
API-интерфейсы – возможно, самый последний тренд для веб- и мобильных приложений,но они ничем не отличаются отобычных HTTP-приложений. Фактически, как мы видели ранее, архитектура микросервисов порождает новые проблемы, когда речь заходит об аутентификации, которые можно использовать наряду с обычными уязвимостями на стороне сервера и клиента.
Вследующей главе рассмотрим системы управления контентом и способы обнаружения уязвимостей в них и вывода их из строя ради удовольствия или с
целью получения прибыли.