- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
Аутентификация с помощью API 295 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
JWT4B значительно упрощает атаку реализаций JWT, поскольку может вы- |
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
полнить частьтяжелой работы за нас.
Postman
Притестированиитипичноговеб-приложениясначаланастраиваемсистем ный прокси-сервер так, чтобы он указывал на Burp Suite. Теперь все наши запросы можно проверять, когда мы проходим приложение. Начинать атаки легко,потому что эти запросы создаютсядля нас с помощью пользовательского интерфейса, который Burp видит. Например, во время обычной операции пользователи вводят данные в поле поиска, а приложение создает GETили POST-запрос со всеми соответствующими параметрами перед их отправкой. Всеэтидействительныезапросытеперьдоступныдляповторноговоспроизведения,модификации и сканирования через перехватывающий прокси-сервер. Процесс обнаружения уязвимостей намного проще, когда есть пользовательский интерфейс,чтобы управлять генерацией трафика.
Если нет компонента пользовательского интерфейса, и все, что у нас есть,– этоконечнаяточкаAPIикакая-тодокументациядляработы,оченьсложносоз- дать серию запросов с помощью команды curl и вручную проанализировать ответы. Если для взаимодействия требуется аутентификация, запрос токенов станет кошмаром для сложных веб-сервисов.
Postman –фантастический инструмент.Его можно использоватьдля создания набора запросов к целевому API, тем самым упрощая тестирование. Это особенно верно, если существует сотрудничество со стороны клиента и разработчиков. Для более эффективного использования времени тестирования клиенты могут предоставить нам набор уже сгенерированных запросов, что значительно ускорит процесс тестирования приложений.
Наши задания обычно чувствительны к ограничениям по срокам, а создание вредоносного кода для атаки на RESTful API отнимает очень много времени, даже когда есть документация. Такая утилита, как Postman, поддерживает коллекции, представляющие собой последовательность полностью настраиваемых API-тестов. Разработчики или другие тестировщики могут создавать эти коллекции, в которые входят запросы для каждой возможной конечной точки с каждым возможным параметром. Они могут даже автоматизировать сборданных,такихкактокеныаутентификации,иавтоматическивставлятьих в последующие запросы. Postman облегчает тестирование API. Разработчики любят его, и мы тоже.
Будучи хакерами, мы можем получить полностью готовую коллекцию от клиентаипростозапуститьеевсвоейсобственнойсреде.Мыточновидим,что API должен вести себя так,как надеялись разработчики.Postman также удобно поддерживает вышестоящие прокси-серверы, поэтому мы можем извлекать все надлежащим образом отформатированные запросы из Collection Runner
|
|
|
|
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 296 Глава 11.Атака на API |
w Click |
to |
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
через Burp и быстро приступать к атаке с помощью модулей Intruder, Scanner |
|
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
и Repeater.
Существует бесплатная версия Postman, которая поддерживает до 1000 вызовов в месяц, но если количество тестируемых API растет, версии Pro и Enterprise могут быть хорошим вложением.
Postman доступен в версиях Free,Pro и Enterprise здесь: https://
www.getpostman.com/.
В демонстрационных целях в этой главе мы будем использовать Docker-приложение с уязвимым API от Мэтта Вальдеса (Matt Valdes)
с сайта https://github.com/mattvaldes/vulnerable-api.В нашем примере API работаеттут:http://api.ecorp.local:8081/.
После установки Docker уязвимый API можно скачать и запустить с по мощью команды docker run из терминала Linux. Мы также можем указать порт,который нужно открытьв контейнере,используя опцию -p.Наконец,па- раметр --name будет указывать Docker, что нужно выбрать контейнер mkam/
vulnerable-api-demo.
root@kali:~# docker run -p 8081:8081 --name api mkam/vulnerable-api- demo
CRIT Supervisor running as root (no user in config file)
WARN Included extra file "/etc/supervisor/conf.d/vAPI.conf" during parsing
INFO RPC interface 'supervisor' initialized
CRIT Server 'unix_http_server' running without any HTTP authentication checking
INFO daemonizing the supervisord process INFO supervisord started with pid 10
system type 0x794c7630 for '/var/log/supervisor/supervisord.log'. please report this to bug-coreutils@gnu.org. reverting to polling
INFO spawned: 'vAPI' with pid 12
INFO success: vAPI entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Хотим протестировать функциональность? Можем использовать команду curl, чтобы выполнить GET-запрос для корневого URL-адреса для только что запущенного API.
root@kali:~# curl http://api.ecorp.local:8081/
{
"response": {
|
|
|
|
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 |
|
|
|
|
}
}
"Application": "vulnerable-api", "Status": "running"
Аутентификация с помощью API
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
297 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Установка
Существуют версии клиента Postman для Linux, Mac и Windows. Для ясности будем использовать клиента для Linux на нашей атакующей машине. В Windows и Mac установка довольно проста,но в Linux может понадобиться пара зависимостей для начала работы.
Клиент Postman – это приложение, созданное с использованием фреймворка Electron. Оно довольно переносимое, но для него требуется зависимость libgconf,доступная в репозиториях Kali. Ее можно установить, используя команду apt-get install из терминала.
root@kali:~/tools# apt-get install libgconf-2-4 Reading package lists... Done
Building dependency tree [...]
Чтобы получить последнюю скомпилированную сборку Postman, загрузим архив с расширением .gzip из его репозитория, доступного на сайте https:// dl.pstmn.io/download/latest/linux64, с помощью команды wget. Команда wget
сохранит файл в postman.tar.gz в локальном каталоге.
root@kali:~/tools# wget https://dl.pstmn.io/download/latest/linux64 -O postman.tar.gz
[...]
HTTP request sent, awaiting response... 200 OK Length: 78707727 (75M) [application/gzip] Saving to: 'postman.tar.gz'
[...]
Извлечем содержимое на диск в нашем каталоге tools с помощью команды tar zxvf, как показано ниже.
root@kali:~/tools# tar zxvf postman.tar.gz Postman/
Postman/snapshot_blob.bin [...]
|
|
|
|
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 298 Глава 11.Атака на API |
w Click |
to |
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
После установки зависимостей можно запуститьPostman,вызвав предвари- |
|
|
|
e |
|
||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
тельно скомпилированный двоичный файл Postman. Как и ожидалось, он находится в каталоге Postman/, который мы только что извлекли из архива.
root@kali:~/tools# ~/tools/Postman/Postman
Рис.11.8. Запуск клиента Postman для Linux
Чтобы поэкспериментировать с базовой функциональностью, можно создать новый запрос,после чего откроется рабочее пространство по умолчанию.
Пользовательский интерфейс по большей части не требует пояснений. Мы можем ввести URL-адрес API, изменить HTTP-метод, передать пользовательские заголовки и даже создать действительную авторизацию с помощью пары кликов.
В качестве теста выполним тот же запрос, который создали ранее с помощью команды curl. Ответ появится на вкладке Body, изображенной на скриншоте (рис. 11.9), с возможностью форматировать содержимое. Postman может автоматически парсить и форматировать ответ в виде XML, HTML, JSON или обычного текста. Эта функция полезна, когда ответ представляет собой большой блок данных.
Одна из сильных сторон Postman заключается в его способности записывать все запросы,которые мы сделали в панели History (История) слева.Это позволяетнам,разработчикамAPI или QA-аналитикам,сохранять запросы и ответы в коллекциях.