--- title: Web App Pentest - 0x02 - Web application overview Information gathering tags: CSR - Web App Pentest slideOptions: transition: 'fade' parallaxBackgroundImage: 'https://i.imgur.com/YClZ1aY.jpg' --- <style> .reveal { font-size: 36px; } </style> # Web App Pentest ## 2 - Web application overview ## Information gathering --- Вопросы по заданиям? --- ## Темы занятия * Обзор устройства веб-приложений * Сбор информации * Дирбастинг и краулинг * Виртуальные хосты --- ## Обзор устройства веб-приложений Развернуть https://www.vulnhub.com/entry/gitroot-1,488/ --- ## Веб-приложение Приложение, которое обрабатывает HTTP запросы. При их обработке оно может обрабатывать как информацию, полученную из HTTP, так и информацию полученную со сторонних ресурсов, в том числе хранимую в БД --- ## Веб-приложение Пример обработки данных из разных частей HTTP-запроса ```php <?php echo 'get "hello" param : ' . $_GET['hello'] . '<br>'; echo 'post "username" param : ' . $_POST['username'] . '<br>'; echo 'post "password" param : ' . $_POST['password'] . '<br>'; echo 'cookie "auth" : ' . $_COOKIE['auth'] .'<br>'; echo 'header "version" : ' . $_SERVER['HTTP_VERSION'] .'<br>'; ?> ``` --- ## Веб-приложение В современном мире очень редко используют программирование "с нуля", обычно используют фреймворки. Фреймворк облегчает разработку приложения, так как существенная часть кода уже написана. --- ## MVC Популярный подход - Model-View-Controller <img style="float: right;" src="https://i.imgur.com/79eRmbf.png"> Model - отвечает за представление данных View - отвечает за отображение данных Controller - обрабатывает HTTP-ответы, реализует бизнес логику, формирует модель и передает её View. --- ## Фреймворки Существует множество фреймворков, поддерживающих MVC, для разных языков: * Java - Spring * PHP - Laravel, Symfony * Ruby - Ruby on rails * Python - flask, django * и т.д. *некоторые из этих не только MVC. Пример (https://github.com/CarolinB/flask-shop-app) --- ## Routing Route (routing) определяет как приложение должно обрабатывать запросы в зависимости от path. Есть два подхода: * основанный на файлах (как PHP) * не основанный на файлах, роуты контролируются фреймворком Примеры: * spring (https://spring.io/guides/gs/routing-and-filtering/) * django (https://docs.djangoproject.com/en/3.0/topics/http/urls/) * ASP.NET (https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-6.0) --- ## SPA (приложения-одностраничники) Single Page Applications - приложения, работа с которыми проходит на 1 странице в браузере. Клиентский интерфейс отрисовывается с помощью javascript, информация динамически запрашивается с серверной части с помощью AJAX. Как правило используют клиентские фреймворки: * Angular * React * Vue.js Пример: https://www.pinterest.ru --- ## WEB API Используются как для серверной части веб-приложений и SPA, так и для взаимодействия приложение-приложение. Есть множество подходов: - REST; - SOAP; - GraphQL. --- ## Веб-сервер Веб-сервер отвечает за предварительную обработку поступающих запросов. Он управляет сетевыми соединениями, может реализовывать кеширование, балансировку, раздачу статического контента и передачу запросов другим серверам (проксирование). Также он передает запросы веб-приложениям на различных языках программирования Примеры: * Apache * Nginx * IIS --- ## Nginx example ```nginx server { listen 80 default_server; server_name localhost; location /api { proxy_pass http://api_server; } location / { try_files $uri $uri/ =404; root /var/www/html; index index.html index.htm; } } ``` --- ## Веб-сервер Передача запросов веб-приложениям происходит по протоколам: - CGI (устарел) - FastCGI (современный PHP) - WSGI (python) --- ## Немного терминологии <!-- .slide: style="font-size: 30px;" --> - Тот, кто атакует приложение - **атакующий** - То, что может сделать с информацией атакующий, называется **угрозой (threat)**; - То, благодаря чему он может это сделать, называется **уязвимостью (vulnerability)**, обусловленной **недостатком (weakness)** - То, как он может это сделать, называется **атакой (attack)** - То, с какой вероятностью злоумышленник это сделает и какие последствия это может повлечь, называется **риском (risk)** - То, что не позволяет атакующему провести атаку, обеспечивает **защищенность (security)** - То, что минимизирует риск, обеспечивает **безопасность (safety)** --- ## Сбор информации о приложении --- ## Что вообще можно собирать * Используемые технологии (ЯП, фреймворк и т.д.) * Входные точки (пути, имена api методов и т.д.) --- ## Сбор информации об используемых технологиях Большинство фреймворков использует характерные особенности: * имена файлов * имена элементов HTML * имена Cookie * и т.д. Это позволяет их идентифицировать. --- ## Сбор информации об используемых технологиях **Wappalyzer** - плагин для браузера, который позволяет это делать. **whatweb** - консольная утилита https://www.rollingstone.com/ https://timberland.ru/ https://www.dell.com/ --- ## Сбор входных точек Нужен для расширения поверхности атаки. Основные способы: * пассивный сбор * краулинг * поиск путей по словарю (дирбастинг) --- ## Пассивный сбор * Пускаем трафик через Burp. * Далее пользуемся как можно большим количеством функций веб-приложения. * Результат в Target -> Sitemap. --- ## Crawling Crawler, он же spider. Автоматический скрипт, который анализирует страницу веб-приложения. Если видит ссылку - переходит по ней. Работает рекурсивно, то есть новую страницу анализирует также. Есть встроенный в Burp. Также есть множество реализаций, например: https://github.com/gocolly/colly https://github.com/scrapy/scrapy --- ## Поиск путей по словарю (дирбастинг) **Наиважнейший шаг в анализе веб-приложений** Позволяет найти то что не найти другими методами, в том числе критичные вещи, такие как: * бэкапы * исходный код * учетные записи * логи --- ## Поиск путей по словарю (дирбастинг) - dirb - DirBuster - gobuster - dirsearch - ffuf - и т.д. --- ## dirsearch https://github.com/maurosoria/dirsearch Установка Linux: `sudo apt-get install dirsearch` Windows/MacOS/Linux: `pip3 install dirsearch` <пример dirsearch> --- ## dirsearch ``` dirsearch -u http://ttesting.ru:8088 dirsearch -u http://ttesting.ru:8088 -w <wordlist.txt> dirsearch -u http://ttesting.ru:8088 -e php,html,htm dirsearch -u http://ttesting.ru:8088 -x 403 ``` - `-e` подстановка расширений - php,html,htm - для PHP - jsp,do,html,htm - для Java - `-x` - исключение ответов с определенным кодом статуса --- ## Словари Словари: * ??? --- ## Словари Словари: * Встроенный словарь dirsearch * https://wordlists.assetnote.io/ * raft-* из SecLists (https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content) * https://github.com/Bo0oM/fuzz.txt * https://github.com/sorokinpf/cth_wordlists - моя компиляция --- ## Дирбастинг с помощью Burp Intruder (демо) --- ## Зачем мне все это: https://hackerone.com/reports/60058 https://hackerone.com/reports/503283 ___ ## Работа с API Два основных подохда: - брут путей и методов - https://github.com/assetnote/kiterunner - поиск путей и методов в Javascript - https://github.com/GerbenJavado/LinkFinder --- ## Виртуальные хосты Веб-сервер может по разному отвечать при разных значениях заголовка Host. <Пример google.com / drive / mail > --- ## Виртуальные хосты Мы можем провести попытку подбора имеющихся в веб-приложении виртуальных хостов и расширить поверхность атаки. Делается с помощью Burp Intruder. Словари: https://github.com/sharsi1/sublazerwlst https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS --- ## .git/.svn на вебе Позволяют скачать репозиторий Инструменты для дампа репозитория: * https://github.com/kost/dvcs-ripper (умный) * https://github.com/internetwache/GitTools (тупой) * GOOP * GitHacker --- ## Работа с git Команды git для анализа: `git log` - показывает историю коммитов `git show-branch` - показывает бренчи `git checkout <commit_hash>` - позволяет откатиться к определенному коммиту `git diff <COMMIT_ID_1> <COMMIT_ID_2>` - изменения между двумя коммитами --- ## Задания - тест для самопроверки в LMS - CTFD - Задачи на Root-me: - Backup file - HTTP - Directory indexing - Install files - Insecure Code Management (*) - Burp academy - Information disclosure https://portswigger.net/web-security/information-disclosure ---