<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 ![](https://i.imgur.com/Van1ble.png) --- ## XML - Entity Entity - своеобразные переменные XML. Виды: * встроенные * внутренние * внешние --- ## XML - встроенные Entity | Символ | Entity | | --- | --- | | < | ```&lt``` | | > | `&gt`| | & | `&amp;` | | ' | `&apos;` | | " | `&quot;` | --- ## XML - встроенные Entity Пример: ```xml <?xml version='1.0'?> <element>fooo&lt;test&gt; &#51; &#x34;</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}]"}
    342 views