---
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
---