<style>
.reveal {
font-size: 36px;
}
</style>
# Web App Pentest
## 0x01 - Intro
---
## whoami
**Павел Сорокин**
Работал:
- пентестером в Информзащите и Bi.Zone
- AppSec в Яндекс и Ozon
https://github.com/sorokinpf
https://t.me/naryl_sec
OSCP, OSWE
---
## Темы модуля
<!-- .slide: style="font-size: 20px;" -->
1. Знакомство с базовыми технологиями веба.
2. Устройство современных веб-приложений и сбор информации
3. Уязвимости OS Command injection
4. Уязвимость SQL Injection
5. Уязвимость SQL Injection
6. Аутентификация и менеджмент сессий Онлайн брутфорс
7. Уязвимость Path traversal. Уязвимость File Upload. Атака Local File Read
8. Уязвимость Broken Access Control
9. Небезопасное сравнение и приведение типов в PHP. Состояние гонки.
10. Небезопасная десериализация
11. Уязвимость Server Side Request Forgery.
12. Уязвимость XML External Entity.
13. Same Origin Policy. Cross-Site Request Forgery.
14. Cross-origin resource sharing. Cross-Site Scripting.
15. Content Security Policy. Security Headers.
16. Финальное занятие. Собеседования. Вопросы и дальнейшее развитие
---
## Организационные вопросы
- Ко мне можно обращаться на "ты"
- Камеры
- Расписание
- Один или два перерыва?
- Презентации на hackmd.io
- https://hackmd.io/6qrAKA33SH6XAvW0a5emmg?view
- Зачет на основе домашних заданий
- http://ctfd.r420.psorokin.ru/challenges
- Тесты для самопроверки в LMS
- Ожидания от модуля (следующий слайд)
- Знакомство
---
## Ожидания от модуля
- цель - стать пентестером веба
- изучаем устройство веб-приложений и фундаментальные уязвимости
- ~~уязвимости Bitrix, Drupal, Joomla, Wordpress~~
- ~~разбор эксплойта log4shell, последнего под Confluence, того через который поломали <company_name>~~
---
## Темы занятия
* Обзор тестирования веб-приложений
* Что есть полезного для изучающих пентест веба
* HTTP
* Кодировки в вебе
* HTTPS vs HTTP
* HTML, Javascript, CSS.
* Burp intro
---
# Обзор тестирования веб-приложений
---
## Обзор тестирования веб-приложений
* Пресейл - определение объема работы и уточнение деталей
* Договор
* Авторизационное письмо - перед началом работы клиент подтверждает что разрешает такой-то компании его пенетрировать, с таких то IP-адресов, в такие то даты и т.д. и т.п.
* <span style="color:red">Непосредственный анализ защищенности</span>
* <span style="color:red">Формирование рекомендаций и написание отчета</span>
---
## Обзор тестирования веб-приложений
Тестирование веб-приложений может быть как отдельным проектом, так и входить в более крупный проект (например, в проект по внешнему тестированию на проникновение)
---
## Подходы к анализу
* Черный ящик - специалисту не известно ничего о системе
* Серый ящик - клиент предоставляет ограниченный доступ, например, с правами обычного пользователя
* Белый ящик - клиент предоставляет полный доступ к приложению, в том числе к исходным кодам
---
## Полезные материалы
---
## OWASP - Open Web Application Security Project
[Testing Guide](https://github.com/OWASP/wstg)
[Cheat sheets](https://github.com/OWASP/CheatSheetSeries/tree/master/cheatsheets)
[Developer Guide](https://github.com/OWASP/DevGuide)
[OWASP Top 10](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017_(en).pdf.pdf)
---
## Portswigger Web Security Academy
https://portswigger.net/web-security
Тут есть как текстовые материалы, так и лаборатории,
в которых можно упражняться
---
## Площадки для тренировок
### CTF (Capture the Flag)
https://ctftime.org/ - агрегатор
Основные категории:
* web
* crypto
* reverse
* binary (он же pwn, он же exploit)
* forensics
* osint
---
## Площадки для тренировок
### ever CTF
* https://www.root-me.org/
* https://w3challs.com/
* https://www.hackthebox.com/
* etc
---
## Площадки для тренировок
### Vulnerable Applications
* bWAPP
* Damn Vulnerable Web Application
* etc
---
## Площадки для тренировок
### Bug Bounty
Поиск уязвимостей за вознаграждение
https://bugbounty.bi.zone
https://standoff365.com
---
## Площадки для тренировок
### Статья 272 УК РФ. Неправомерный доступ к компьютерной информации
---
## Программное обеспечение
- Burp Suite
- Сервис хранения заметок
---
## Другие материалы
* https://github.com/danielmiessler/SecLists - словари для всех случаев жизни
* https://github.com/swisskyrepo/PayloadsAllTheThings - информация по эксплуатации различных уязвимостей
* [Hacktrics](https://book.hacktricks.xyz/pentesting-web/web-vulnerabilities-methodology) - заметки о уязвимостях/атаках
---
## Настройка среды
* Burp
* FoxyProxy
* Инструменты разработчика браузера
---
# HTTP
---
## HTTP
HyperText Transfer Protocol
* Протокол 7 уровня ISO OSI.
* Работает поверх TCP.
* Клиент-серверный протокол
* Сейчас используются две версии: HTTP/1.1 и HTTP/2
---
## HTTP request

---
## HTTP request
<img src="https://i.imgur.com/pHolGfw.png" alt="drawing" style="width:600px;"/>
---
## HTTP response

---
## Методы HTTP (HTTP verbs)
Метод – операция, выполняемая над ресурсом.
Виды методов:
* GET – получает содержимое узла (Read)
* POST – передаёт пользовательские данные (Write).
* PUT – загружает содержимое на сервер, чаще обновляет существующее (Update)
* DELETE – удаляет указанный ресурс (Delete)
* HEAD – аналогичен GET, но возвращает только заголовки
* OPTIONS – определение параметров сервера (почти не используется).
* и другие (TRACE, PATCH, CONNECT).
---
## Коды состояния ответов HTTP
Код состояния:
* 1xx – информационной (102 Processing);
* 2xx – успех (200 OK);
* 3xx – перенаправление (301 Moved Permanently);
* 4xx – ошибка клиента (400 Bad Request);
* 5xx – ошибка сервера (500 Internal Server Error).
---
## URL - Uniform Resource Locator
**Структура**: schema://host:port/path?parameter=value#anchor
- **Схема**: http, https, ftp и другие;
- **Узел**: доменное имя или IP-адрес;
- **Порт**: TCP-порт ресурса (80 – порт по умолчанию для HTTP);
- **Путь**: путь к ресурсу;
- **Параметр**: отправляемые на сервер переменные имеют вид – parameter0=value0¶meter1=value1;
- **Якорь**: идентификатор элемента HTML внутри документа для перемещения браузера на него;
---
## HTTP - текстовый протокол
Демонстрация запроса через nc
---
## HTML - HyperText Markup Language
Язык разметки гипертекста.
Является XML-образным языком.
(демонстрация)
* `<body>`
* `<title>`
* `<hX>`
* `<a>`
* `<form>`
* `<input>`
---
## Javascript и CSS
Javascript - язык программирования, который позволяет работать с отображаемыми в браузере элементами. Позволяет создавать динамические веб-интерфейсы
CSS - Cascading Style Sheets - язык описания внешнего вида документа. Декларирует как браузер должен отображать тот или иной элемент HTML.
---
## Кодировки в вебе
- Url
- Base64
---
## Hex and Url encoding
HEX - кодирует каждый символ в два символа из набора `0123456789abcedf`. Шестнадцатиричная кодировка
`admin/test` -> `61646d696e2f74657374`
URL - кодирует некоторые символы в HEX, добавляя перед ними символ %
`admin/test` -> `admin%2ftest`
Не все символы обязательно должны быть закодированы в URL-кодировке
---
## Base64
Base64 - кодирует 3 байта в 4 символа из набора [a-z A-Z 0-9] а также / и +. В конце может быть несколько символов = для выравнивания.
`admin/test` -> `YWRtaW4vdGVzdA==`
<img src="https://i.imgur.com/z7qlY7u.png" alt="drawing" style="width:500px;"/>
---
## Кодировки в вебе
Демонстрация кодировок
CyberChef: https://gchq.github.io/CyberChef/
Burp
Автоматическая URL-кодировка параметров
---
## Кодировки в вебе
Практика.
Раскодируйте:
* 4865782d656e636f64696e67272068657265
* %48%34%43%6b%33%52%59%30%55
* %22hack%65r%22%20%69%73%20%68er%65%3f
* SSBMaUszIFAzblQzc3Q=
---
## HTTP vs HTTPS
HTTPS - это тот же HTTP, который работает поверх SSL/TLS.
Данные передаваемые по HTTPS криптографически защищены от перехвата в канале (просмотра и модификации).
Важные данные не должны передаваться по HTTP без шифрования.
Материал: https://github.com/MaksimDzhangirov/complete-gRPC/blob/main/SSL_TLS_lecture_rus.md
---
## Content-Type
Content-Type - заголовок HTTP. Определяет тип передаваемого содержимого. В зависимости от него веб-приложение и браузер будут обрабатывать тело HTTP по разному
Для указания формата использует MIME типы.
---
# Знакомство с Burp
---
## Content-Type
Браузер как правило использует в запросах:
* text/plain
* application/x-www-form-urlencoded
* multipart/form-data
<демонстрация различия>
---
## Content-Type
Веб-приложение использует в ответах:
* text/html
* text/javascript
* text/css
* application/json
* text/xml
* и многие другие.
---
## Практика
- https://hackmd.io/O-8R0RNpR8GqS7WAj5DVmA?view
- на CTFd.
---
## Тест для самопроверки
В LMS
---
{"metaMigratedAt":"2023-06-16T00:42:58.307Z","metaMigratedFrom":"YAML","title":"Web App Pentest - 0x01 - Intro","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://hackmd.io/_uploads/SJhktzri2.png\"}","description":"Павел Сорокин","contributors":"[{\"id\":\"74341f14-c8ac-49ac-b077-53e0eec889fc\",\"add\":10848,\"del\":1901}]"}