---
# System prepended metadata

title: Web App Pentest - 0x02 - Web application overview Information gathering
tags: [CSR - Web App Pentest]

---

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

---

