<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 ![](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 - на 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}]"}
    1808 views