<style>
.reveal {
font-size: 36px;
}
</style>
# Web App Pentest
## 2 - Web application overview
## Information gathering
---
Вопросы по заданиям?
---
## Темы занятия
* Обзор устройства веб-приложений
* Сбор информации
* Дирбастинг и краулинг
---
## Обзор устройства веб-приложений
---
## Веб-приложение -
Приложение, которое обрабатывает HTTP запросы.
При их обработке оно может обрабатывать как информацию, полученную из HTTP, так и информацию полученную со сторонних ресурсов, в том числе хранимую в БД
---
## Веб-приложение
В коде веб-приложений можно легко получить информацию из запроса.
Пример PHP.
---
## Веб-приложение
В современном мире очень редко используют такой подход - программирование "с нуля", обычно используют фреймворки.
Фреймворк облегчает разработку приложения, так как существенная часть кода уже написана.
---
## 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/)
---
## SPA (приложения-одностраничники)
Single Page Applications - приложения, работа с которыми проходит на 1 странице в браузере.
Клиентский интерфейс отрисовывается с помощью javascript, информация динамически запрашивается с серверной части с помощью AJAX.
Как правило используют клиентские фреймворки:
* Angular
* React
* Vue.js
Пример: https://facebook.com
---
## Веб-сервер
Веб-сервер отвечает за предварительную обработку поступающих запросов. Он управляет сетевыми соединениями, может реализовывать кеширование, балансировку и передачу запросов другим серверам (проксирование).
Также он передает запросы программному коду на различных языках программирования.
Примеры:
* Apache
* Nginx
* IIS
---
## Сбор информации о приложении
---
## Что вообще можно собирать
* Используемые технологии (ЯП, фреймворк и т.д.)
* Входные точки (пути, имена api методов и т.д.)
---
## Сбор информации об используемых технологиях
Большинство фреймворков использует характерные особенности:
* имена файлов
* имена элементов HTML
* имена Cookie
* и т.д.
Это позволяет их идентифицировать.
---
## Сбор информации об используемых технологиях
**Wappalyzer** - плагин для браузера, который позволяет это делать.
---
## Сбор входных точек
Нужен для расширения поверхности атаки.
Основные способы:
* пассивный сбор
* краулинг
* дирбастинг
---
## Пассивный сбор
* Пускаем трафик через Burp.
* Далее пользуемся как можно большим количеством функций веб-приложения.
* Результат в Target -> Sitemap.
---
## Crawling
Crawler, он же spider.
Автоматический скрипт, который анализирует страницу веб-приложения.
Если видит ссылку - переходит по ней.
Работает рекурсивно, то есть новую страницу анализирует также.
Есть встроенный в Burp.
Также есть множество реализаций, например:
https://github.com/gocolly/colly
---
## Дирбастинг (брут файлов/директорий)
Посылка большого количества запросов с разными путями. Просмотр и сравнение ответов.
Наиважнейший шаг в анализе веб-приложений!
Позволяет найти то что не найти другими методами, в том числе критичные вещи, такие как:
* бэкапы
* исходный код
* учетные записи
* логи
---
## Дирбастинг (брут файлов/директорий)
Существует множество программ для этого, рекомендуется dirsearch
https://github.com/maurosoria/dirsearch
Linux: `sudo apt-get install dirsearch`
<пример dirsearch>
---
## Словари
Словари:
* Встроенный словарь 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
(демо)
---
## Виртуальные хосты
Веб-сервер может по разному отвечать при разных значениях заголовка Host.
Мы можем провести попытку подбора имеющихся в веб-приложении виртуальных хостов и расширить поверхность атаки.
Делается с помощью 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
Команды git для анализа:
`git log` - показывает историю коммитов
`git checkout <commit_hash>` - позволяет откатиться к определенному коммиту
---
## Задания
- на CTFd (http://web-fund.hackeru.pro)
- тест для самопроверки в LMS
---
{"metaMigratedAt":"2023-06-16T09:48:41.062Z","metaMigratedFrom":"YAML","title":"Web App Pentest - 2 - Web application overview Information gathering","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://i.imgur.com/YClZ1aY.jpg\"}","contributors":"[{\"id\":\"0c054233-c19a-4022-8ae1-7189582f00e1\",\"add\":5466,\"del\":18}]"}