---
# System prepended metadata

title: Web App Pentest - 1 - Intro
tags: [presentation]

---

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

![](https://i.imgur.com/qBh9B6q.png)

---

## HTTP response

![](https://i.imgur.com/2zUO1p7.png)

---

##  Методы 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&parameter1=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

---

