<style>
.reveal {
font-size: 36px;
}
</style>
# Web App Pentest
## SSRF/XXE/PDF
---
Вопросы по заданиям?
---
## Server Side Request Forgery
---
## Server Side Request Forgery
Атака, при которой атакующий заставляет уязвимый веб-сервер выполнять полезные для него запросы.
---
## SSRF
Реализация атаки SSRF может позволить:
* выполнять запросы на недоступные из внешней сети ресурсы
* сканировать внутреннюю сеть
* обходить проверки и ограничения
---
## SSRF
Возникает когда атакующий может передать в параметрах URL-адрес или DNS-имя + порт или другие "координаты" сервиса и уязвимое веб-приложение использует их для выполнения запроса.
---
## SSRF
Атакующий может отправлять запросы на ресурсы внутренней сети и анализировать ответы или время получения ответа.
<обзор docker-compose,
пример базовый, задание Simple>
---
## SSRF
Атакующий может отправлять запросы на ресурсы внутренней сети и анализировать ответы или время получения ответа.
<Пример Blind SSRF: Сканирование портов>
---
## SSRF - адреса
IP:
- 192.168.X.Y
- 172.X.0.Y для docker/kubernetes
Также нужно попробовать DNS-имена из листов.
---
## SSRF - цели
Если мы можем заставить сервер выполнить HTTP-запрос, то логичные цели - те которые поддерживают текстовые протоколы.
* SMTP
* FTP
* Redis
* Memcached
* HTTP
---
## SSRF - CRLF injection
Чтобы мы могли добавлять команды в текстовые протоколы или заголовки/тело в HTTP-запросы нам нужна возможность добавлять новые строки.
---
## SSRF - CRLF injection
Если цель - HTTP, и запрос мы контролируем не полностью, то мы можем отправить два запроса в одном TCP-соединении.
HTTP-заголовок:
`Connection: keep-alive`
Если он установлен, веб-приложение не будет разрывать соединение и выполнит второй HTTP-запрос в том же соединении.
<пример с запросом на internal_web>
---
## SSRF
<Пример temp mail и SMTP>
---
## SSRF - CRLF injection
<Самостоятельно атака на SMTP - отправить письмо мне на почту>
---
## SSRF - схемы
Возможно полезные схемы:
* file://
* data://
* php://
---
## SSRF - защита
Веб-приложения для защиты от обращений к внутренним ресурсам могут проверять IP-адреса передаваемых URL, убеждаться что они не локальные.
<пример>
---
## SSRF - DNS rebinding
Веб-приложение выполняет 2 DNS запроса, один для проверки, другой для отправки запроса. Мы можем передать контролируемое доменное имя, DNS-ответы для которого будут изменяться.
---
http://1u.ms/ - ресурс, позволяющие реализовать такую атаку
<пример обхода ssrf_check.php - читаем internal_web>
---
## SSRF - упражнение
<Попасть в админскую секцию /admin.php через ssrf_check.php>
---
## SSRF - материалы
[SSRF bible](https://repo.zenk-security.com/Techniques%20d.attaques%20%20. Failles/SSRFbible Cheatsheet.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 называется слепым, если мы не видим ответ от сервера.
---
## SSRF - Windows
Атакующий может заставить веб-сервер перейти по ссылке по протоколу SMB или по HTTP и затребовать SMB-аутентификацию.
В результате:
* хэш netntlm машины
* SMB-relay
---
## XML eXternal Entity
## (XXE)
---
## XXE - OWASP A4
Старые или плохо настроенные XML-процессоры обрабатывают ссылки на внешние сущности внутри документов. Эти сущности могут быть использованы для доступа к внутренним файлам через обработчики URI файлов, общие папки, сканирование портов, удаленное выполнения кода и отказ в обслуживании.
---
## XML

---
## XML - Entity
Entity - своеобразные переменные XML.
Виды:
* встроенные
* внутренние
* внешние
---
## XML - встроенные Entity
| Символ | Entity |
| --- | --- |
| < | ```<``` |
| > | `>`|
| & | `&` |
| ' | `'` |
| " | `"` |
---
## XML - встроенные Entity
Пример:
```xml
<?xml version='1.0'?>
<element>fooo<test> 3 4</element>
```
---
## XML - внутренние Entity
```xml
<?xml version='1.0'?>
<!DOCTYPE element [
<!ENTITY name "cth" >]>
<element><xxx>Hello, &name;</xxx></element>
```
---
## XML - внешние Entity
```xml
<?xml version='1.0'?>
<!DOCTYPE element [
<!ENTITY name SYSTEM "file:///etc/passwd" >]>
<element><xxx>Hello, &name;</xxx></element>
```
---
## XML eXternal Entity (XXE)
XXE - уязвимость, заключающаяся в том, что парсер XML уязвимого приложения раскрывает внешние сущности в XML-документе, который контролируется атакующим.
---
## XXE
Вектора атаки:
* DoS
* Local File Read
* SSRF
---
## XXE - DoS
```xml
<!DOCTYPE data [
<!ELEMENT data ANY>
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">
]>
<data><xxx>&a2;</xxx></data>
```
---
## XXE - чтение локальных файлов
```
<?xml version='1.0'?>
<!DOCTYPE element [
<!ENTITY name SYSTEM "file:///etc/passwd" >]>
<element><xxx>Hello, &name;</xxx></element>
```
---
## XXE - чтение локальных файлов
При чтении файлов, содержащих спец символы XML могут возникнуть проблемы - файл перестанет быть корректным XML документом.
Для PHP можно использовать схему `php://filter` для обхода.
---
## XXE - типы
В зависимости от того, отображается ли результат обработки внешней сущности атакующему или нет, можно выделить:
* отраженную XXE
* слепую XXE
---
## XXE - Out-of-band
Если XXE слепая, или если мы не можем получить нужные нам данные из за проблем с спец символами XML, мы можем заставить парсер отправить данные на прямую нам.
[Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20Injection)
[FTP trick](http://lab.onsec.ru/2014/06/xxe-oob-exploitation-at-java-17.html)
---
## XXE - Защита
Отключить раскрытие внешних сущностей, или парсинг DTD полностью.
Способ зависит от парсера.
В большинстве парсеров отключены по умолчанию, исключение - Java.
## XXE - Защита
Для стандартного парсера Java:
```java
dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance()
dbf.setExpandEntityReferences(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(<XML Source>);
```
---
## PDF Rendering
---
## PDF Rendering
В случае, если веб-приложение генерирует PDF документ на основе HTML и этот HTML контролируется атакующим, атакующий может заставить веб-приложение выполнить запрос или подключить локальный файл.
---
## PDF Rendering
Для проверки наличия уязвимости можно подключать картинки с помощью тэга `img`.
---
## PDF Rendering
Вектора атаки:
weasyprint Local File Read:
`<link rel=attachment href='file:///etc/passwd'>`
mPDF Local File Read:
`<annotation file="dev.php" content="xxxx" icon="Graph" title="Attached File: xxxx" pos-x="195" />`
---
## PDF Rendering
wkhtmltopdf Local File Read:
- iframe:
`<iframe src=/etc/passwd></iframe>`
- ajax requests
- etc.
---
## Задания
- на CTFd (http://)
- тест для самопроверки в LMS
---
{"metaMigratedAt":"2023-06-16T11:21:54.372Z","metaMigratedFrom":"YAML","title":"Web App Pentest - 11 SSRF/XXE/PDF","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://i.imgur.com/YClZ1aY.jpg\"}","contributors":"[{\"id\":\"0c054233-c19a-4022-8ae1-7189582f00e1\",\"add\":7169,\"del\":14}]"}