owned this note
owned this note
Published
Linked with GitHub
---
title: Web App Pentest - 1 - Intro
tags: presentation
slideOptions:
transition: 'fade'
parallaxBackgroundImage: 'https://i.imgur.com/YClZ1aY.jpg'
---
<style>
.reveal {
font-size: 36px;
}
</style>
# Web App Pentest
## 1 - Intro
---
## whoami
Алимов Азиз
ведущий специалист по тестированию на проникновение в Bi.Zone
опыт работы более 5 лет
---
## Сертификаты
Offensive Security Certified Professional (OSCP)
Offensive Security Certified Expert (OSCE)
Offensive Security Web Expert (OSWE)
CREST Registered Penetration Tester (CRT)
и другие
---
## Темы модуля
1. Введение.
2. Обзор веб-технологий
3. Структура веб-приложений
4. Первоначальный анализ, сбор информации
5. Уязвимости серверной части веб-приложений
6. Тестирование механизмов аутентификации и менеджмента сессий
7. Логические уязвимости
8. Безопасность протокола HTTP
9. Безопасность клиентской части веб-приложений
10. Вопросы на собеседовании
---
## Темы занятия
* Обзор тестирования веб-приложений
* Что есть полезного для изучающих пентест веба
* HTTP
* Кодировки в вебе
* HTTPS vs HTTP
* HTML, Javascript, CSS.
---
# Обзор тестирования веб-приложений
---
* Пресейл - определение объема работы и уточнение деталей
* Договор
* Авторизационное письмо - перед началом работы клиент подтверждает что разрешает такой-то компании его пенетрировать, с таких то IP-адресов, в такие то даты и т.д. и т.п.
* <span style="color:red">Непосредственный анализ защищенности</span>
* <span style="color:red">Формирование рекомендаций и написание отчета</span>
---
Тестирование веб-приложений может быть как отдельным проектом, так и входить в более крупный проект (например, в проект по внешнему тестированию на проникновение)
---
## Подходы к анализу
Blackbox
Graybox
Whitebox
---
## Подходы к анализу
* Черный ящик - специалисту не известно ничего о системе
* Серый ящик - клиент предоставляет ограниченный доступ, например, с правами обычного пользователя
* Белый ящик - клиент предоставляет полный доступ к приложению, в том числе к исходным кодам
---
## Полезные материалы
---
## 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/
* etc
---
## Площадки для тренировок
### Vulnerable Applications
* bWAPP
* Damn Vulnerable Web Application
* etc
---
## Площадки для тренировок
### Bug Bounty
Поиск уязвимостей за вознаграждение
https://www.hackerone.com
https://bugcrowd.com
---
## Площадки для тренировок
### Статья 272 УК РФ. Неправомерный доступ к компьютерной информации
---
## Программное обеспечение
- Burp Suite
- Сервис хранения заметок
---
## Репозитории на github
* https://github.com/danielmiessler/SecLists - словари для всех случаев жизни
* https://github.com/swisskyrepo/PayloadsAllTheThings - информация по эксплуатации различных уязвимостей
* https://github.com/tennc/webshell - коллекция веб-шеллов
---
## Настройка среды
* Burp
* FoxyProxy
* Инструменты разработчика браузера
---
# HTTP
---
## HTTP
HyperText Transfer Protocol
* Протокол 7 уровня ISO OSI.
* Работает поверх TCP.
* Клиент-серверный протокол
* Сейчас используются две версии: HTTP/1.1 и HTTP/2
---
## HTTP request

---
## 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-адрес;
**Порт**: порт ресурса (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.
---
## Кодировки в вебе
HEX - кодирует каждый символ в два символа из набора `0123456789abcedf`. Шестнадцатиричная кодировка
`admin/test` -> `61646d696e2f74657374`
URL - кодирует некоторые символы в HEX, добавляя перед ними символ %
`admin/test` -> `admin%2ftest`
Base64 - кодирует 3 байта в 4 символа из набора [a-z A-Z 0-9] а также / и +. В конце может быть несколько символов = для выравнивания.
`admin/test` -> `YWRtaW4vdGVzdA==`
---
## Кодировки в вебе
Демонстрация кодировок
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 без шифрования.
---
## Content-Type
Content-Type - заголовок HTTP. Определяет тип передаваемого содержимого. В зависимости от него веб-приложение и браузер будут обрабатывать тело HTTP по разному
Для указания формата использует MIME типы.
---
## 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 http://web-fund.hackeru.pro/
---
## Тест для самопроверки
В LMS
---