Вы находитесь на странице: 1из 67

ИССЛЕДОВАНИЕ

Уязвимые API: приёмы


и эксплуатация
Обо мне
Павел Степанов,
исследователь по информационной безопасности

Мой telegram: @pavel_Ib


Мой канал: @Ent_TranslateIB
Habr: @Pulsera
Автор 3-х CVE идентификаторов:
CVE-2020-12246
CVE-2021-41426
CVE-2021-41427
Предыстория
Подготовка
Мои шаги к ШАГ 1 ШАГ 2

тестированию Покупка БУ смартфона


Рутирование, установка
Установка сертификата
Burp Suite
Xposed и его модулей Для перехвата HTTPS трафика
LSposed -> SSLUnpinning /data/misc/user/0/cacerts-
Riru added/
/system/etc/security/cacerts

ШАГ 3 ШАГ 4 ШАГ 5

Установка и настройка Настройка прокси Burp Установка и запуск


Frida (для эмуляторов) Suite нужных приложений
Для обхода SSL Pinning если Подключение к WiFi сети и Перехват трафика
происходит тестирование на указание прокси приложений
эмуляторе
OWASP Top 10 Найденые мной
API (2023)
Нарушенние авторизации на уровне объекта
(BOLA) Отсутствие Rate Limit
Некорректная аутентификация пользователей Open Redirect
Нарушенная авторизация на уровне свойств
Раскрытие внутренней информации
объекта
Массовое присвоение
Неограниченное потребление ресурсов
Нарушенная авторизация на уровне функции
Неограниченный доступ к конфиденциальным
бизнес-потокам
Подделка запроса на стороне сервера
Ошибки настроек безопасности
Ненадлежащее управление активами
Небезопасное использование API
Практические кейсы
Отсутствие Rate Limit

ОТСУТСТВИЕ ОГРАНИЧЕНИЙ НА
ОТПРАВКУ ЗАПРОСОВ

Перебор кода -> получение доступа к


учётной записи любого пользователя
Приложение #1
Аренда велосипедов
Основная авторизация
Ввод номера телефона
Отправка кода на номер
Проверка кода
Конфигурация payload
Перебор кода
Получение доступа к аккаунту
Связь с разработчиками
Исправление
уязвимости
Приложение #2
Аренда электросамокатов
Отправка кода на номер
Перебор кода
Исправление уязвимости
Перебор зарегестрированных пользователей
Приложение #3
Аренда парковочных мест
Приложение
#4 и #5
Аренда электросамокатов
Как от этого защититься?
1. Включить на стороне сервера лимит
отправляемых пользователем запросов
2. Использовать 6-ти значные цифры для
подтверждения авторизации
Трюк #1 - Общие заголовки
X-Forwarded-For
X-Forwarded-Host
X-Host
X-Originating-IP Словарь с user-agent
X-Remote-IP
X-Client-IP
X-Remote-Addr
Трюк #2 - Изменение URL
/api/myprofile%00
/api/myprofile%20
/api/myProfile
/api/MyProfile
/api/my-profile
/api/myprofile?test=1
Трюк #3 - Слабое ограничение
Ограничение скорости не должно конфликтовать с
методами безопасности

Допустим, смс-код становится неактуальным через 5


минут после отправки. У вас ограничение на 60
запросов в минуту. Сможете ли вы успеть его
перебрать за отведенное время?
Трюк #4 - Смена IP-адресов
Использование API-шлюза AWS
Расширение IP Rotate в Burp Suite
IP Rotate
Трюк #5 - Смена токенов
WAF может блокировать по токену
Создайте несколько аккаунтов перед тестированием
Заблокировали --> сменили токен
Раскрытие информации

РАСКРЫТИЕ ВНУТРЕННЕЙ
ИНФОРМАЦИИ СЕРВЕРА

Отправка неожидаемых запросов к API


Трюк #1 - Отправка символов
Отправляйте те символы, которые для эндпоинта будут
неожиданными
Вместо строк - числа, спец.символы, boolean, null и т.д

big-list-of-naughty-strings.txt
Трюк #2 - Postman --> Burp Suite
Если у вас есть коллекция запросов в Postman, то это ускорит
процесс поиска аномалий
Настраиваем в Postman прокси Burp Suite
Создаем Live задачу с аудитом в Burp Suite
Запускаем Collection Runner
Анализируем историю запросов
Кейс #1
Кейс #1.1 - Open Redirect
Кейс #1.1 - Open Redirect
Кейс #2
Кейс #3
Кейс #4
Как защититься?
Отключать подробный вывод об ошибках
Фильтровать выдаваемую сервером
информацию
Массовое присвоение

ВОЗМОЖНОСТЬ ОБНОВЛЕНИЯ
ПЕРЕМЕННЫХ НА СТОРОНЕ СЕРВЕРА

Повышение привилегий
Обновление переменных учетной записи
Трюк #1 - Присвоение переменных
Обновляя информацию - анализируйте ответ веб-сервера
Пробуйте использовать переменные и менять их значение
Анализируйте переменные с разных учетных записей
Сравните создание учетных записей
низкопривилегированного пользователя и администратора
1 2 3
POST /api/create/user POST /api/admin/create/user POST /create/user
Token: User Token: Admin Token: User

{ {
{
"username": "admin", "username": "user",
"username": "user", "pass": "admin", "pass": "user123",
"pass"= "user123" "admin": true "admin": true
} } }
Кейс #1
PATCH /api/v1/users HTTP/2
Трюк #2 - Перебор переменных
Разработчики могут использовать названия общепринятых
переменных
Пример:
"admin": true, Словарь Arjun
"admin":1,
"isadmin": true,
"role":"admin",
"role":"administrator",
"user_priv": "admin"
1. arjun -u http://example.ru - Запуск инструмента для перебора
2. arjun -u http://example.ru -o arjun.json - Вывод в json
3. arjun -u http://example.ru -o arjun.json --stable - Ограничение запросов
во избежание блокировок
4. arjun --headers "Content-Type: application/json" -u http://example.ru -m
JSON - Перебор JSON параметров
Инструмент Arjun
Как защититься?
Фильтровать вводимые пользователем данные
Использовать белый список, чтобы разрешать только для
определенных свойств или переменных
Требовать дополнительное подтверждение
Полезные ресурсы
Словарь эндпоинтов
Перебирайте в любом случае - не важно имеется ли
документация

Словарь Assetnote
Инструмент Kiterunner
Инструмент от разработчиков Assetnote
Уязвимые машины
1. Сompletely ridiculous API (crAPI)
2. OWASP DevSlop's Pixi
3. Damn Vulnerable GraphQL Application (DVGA)
4. VAmPI
5. DVWS-node
6. DamnVulnerable MicroServices
7. Node-API-goat
8. Vulnerable GraphQL API
9. Generic-University
10. vulnapi
Tryhackme lab
1. Bookstore
2. Carpe Diem 1
3. ZTH: Obscure Web Vulns
4. ZTH: Web2
5. GraphQL
6. OWASP API Security Top 10 - 1
7. OWASP API Security Top 10 - 2
Hackthebox lab
1. Craft
2. Postman
3. Smasher2
4. JSON
5. Node
6. Help
7. PlayerTwo
8. Luke
9. Playing with Dirty Socks
Бонус
Скачать книгу
Спасибо за внимание!

Вам также может понравиться