---
title: Web App Pentest - 0x0B SSRF
tags: CSR - Web App Pentest
slideOptions:
transition: 'fade'
parallaxBackgroundImage: 'https://i.imgur.com/YClZ1aY.jpg'
---
<style>
.reveal {
font-size: 36px;
}
</style>
## SSRF
## Server Side Request Forgery
---
## A10:2021-Server-Side Request Forgery
Атака, при которой атакующий заставляет уязвимый веб-сервер выполнять полезные для него сетевые запросы.
---
## SSRF
Реализация атаки SSRF может позволить:
* выполнять запросы на недоступные из внешней сети ресурсы
* сканировать внутреннюю сеть
* обходить проверки и ограничения
---
## SSRF
Возникает когда атакующий может передать в параметрах URL-адрес или DNS-имя + порт или другие "координаты" сервиса и уязвимое веб-приложение использует их для выполнения запроса.
---
## SSRF
<обзор docker-compose,
пример базовый, задание Simple>
---
## SSRF
<пример elasticsearch>
- `http://host:9200/_cat/indices` - список индексов
- `http://host:9200/index1/_search` - вывод данных в индексе
Документации: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html
---
## SSRF
Атакующий может отправлять запросы на ресурсы внутренней сети и анализировать ответы или время получения ответа.
<Пример Blind SSRF: Сканирование портов>
---
## SSRF - адреса
Серые IP адреса
IP:
- 192.168.X.Y
- 172.X.0.Y
- 10.X.0.X
Также нужно попробовать DNS-имена из листов.
---
## SSRF - CRLF injection
Чтобы мы могли добавлять команды в текстовые протоколы или заголовки/тело в HTTP-запросы нам нужна возможность добавлять новые строки.
---
## SSRF - CRLF injection
Если цель - HTTP, и запрос мы контролируем не полностью, то мы можем отправить два запроса в одном TCP-соединении.
HTTP-заголовок:
`Connection: keep-alive`
Если он установлен, веб-приложение не будет разрывать соединение и выполнит второй HTTP-запрос в том же соединении.
<пример с запросом на internal_web>
---
## SSRF - CRLF injection
<пример - удаление индекса в `elasticsearch`>
---
## SSRF - схемы
Возможно полезные схемы:
* file://
* data://
* php://
---
## SSRF - защита (1 идея)
Веб-приложения для защиты от обращений к внутренним ресурсам могут проверять IP-адреса передаваемых URL, убеждаться что они не локальные.
<пример>
---
## SSRF - упражнение
<Попасть в админскую секцию /admin.php через ssrf_check.php>
---
## SSRF - DNS rebinding
Веб-приложение выполняет 2 DNS запроса, один для проверки, другой для отправки запроса. Мы можем передать контролируемое доменное имя, DNS-ответы для которого будут изменяться.
---
## SSRF - DNS rebinding
http://1u.ms/ - ресурс, позволяющие реализовать такую атаку
<пример обхода ssrf_check.php - читаем internal_web>
---
## SSRF - материалы
[SSRF bible](https://cheatsheetseries.owasp.org/assets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet_SSRF_Bible.pdf)
[A New Era of SSRF (video)](https://www.youtube.com/watch?v=D1S-G8rJrEk)
[A New Era of SSRF (slides)](https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf)
---
## SSRF - Blind
SSRF называется слепым, если мы не видим ответ от сервера.
https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/
---
## SSRF - Windows
Атакующий может заставить веб-сервер перейти по ссылке по протоколу SMB или по HTTP и затребовать SMB-аутентификацию.
В результате:
* хэш netntlm машины
* SMB-relay
---
## SSRF - Защита
- По возможности избегайте необходимости запросов по контролируемым пользователем координатам;
- Если все же программируем, то:
- Разберите URL на части, далее используйте только эти части
- Разрезолвите домен, далее используйте IP, не используйте домен
- Подставьте нужный домен в заголовок Host при запросе
- Не забудьте отключить редиректы
---
## SSRF - Hardening
- Создайте специальный изолированный контейнер, который не будет иметь доступ во внутреннюю сеть и поднимите на нем микросервис
- Отключите ненужные вам схемы
---