---
# System prepended metadata

title: Web App Pentest - 0x01 - Intro
tags: [CSR - Web App Pentest]

---

---
title: Web App Pentest - 0x01 - Intro
tags: CSR - Web App Pentest
slideOptions:
  transition: 'fade'
  parallaxBackgroundImage: 'https://i.imgur.com/YClZ1aY.jpg'
---

<style>
.reveal {
  font-size: 36px;
}
</style>



# Web App Pentest 

##  0x01 - Intro

---

## Whoami

Николаев Кирилл
Telegram: @kiriknik 


## Certificates

- Offensive security certified professional (OSCP)
- x86 Assembly Language and Shellcoding on Linux (SLAE)
- Offensive security certified expert (OSCE)
- Offensive security web expert (OSWE)
- Certified Red Team Professional (CRTP)

## Work experience

- Penetration testing specialist at Informzashita
- Senior penetration tester at Kaspersky
- lecturer at Hackeru
- just a little bit of a bug bounty.


## Темы модуля

<!-- .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. Финальное занятие. Собеседования. Вопросы и дальнейшее развитие

---

## Организационные вопросы

- Ко мне можно обращаться на "ты"
- Камеры
- Расписание
- Один или два перерыва?
- Зачет на основе домашних заданий
    - http://ttesting.ru:8080/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-project-top-ten/)

---

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

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

---

## HTTP request

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

---

## 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-адрес; 
- **Порт**: TCP-порт ресурса (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. 

---

## Кодировки в вебе

- 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

- https://www.root-me.org/en/Challenges/Web-Server/
    - HTML - source
    - HTTP - User-agent
    - HTTP - Headers
    - HTTP - Improper redirect
    - HTTP - Verb tampering


---

## Тест для самопроверки

* В LMS
* CTFD
http://ttesting.ru:8000

---

