К списку уроков

Урок 6. Web Hard

Онлайн и в Б-835, 13 ноября (четверг), 15:00

Переходим к третьему, финальному уровню погружения в Веб.

1. The Ultimate Weapon: Burp Suite

Прежде чем ломать сложный веб, забудьте про F12. Вам нужен прокси-инструмент, который встанет между вашим браузером и сервером.

Burp Suite — это профессиональный инструмент для тестирования безопасности веб-приложений, используемый для поиска и эксплуатации уязвимостей.

Основные вкладки:

  • Proxy: Перехват и изменение запросов «на лету». Вы нажимаете кнопку в браузере, а запрос зависает в Burp, где вы можете поменять admin=false на admin=true перед отправкой.

  • Repeater: Лаборатория для экспериментов. Вы отправляете запрос в Repeater, меняете один байт, отправляете, смотрите ответ. И так 100 раз.

  • Intruder: Автоматизация атак (брутфорс, фаззинг параметров).

2. XXE (XML External Entity)

Если сайт принимает данные в формате XML (или офисные документы, которые тоже XML внутри), он может быть уязвим.

Суть уязвимости:

XXE позволяет злоумышленнику вмешаться в процесс обработки XML-данных приложением. Вы определяете свою "сущность" (entity), которая ссылается на внешний ресурс.

Что можно сделать:

  • LFI (Чтение файлов): Просматривать файлы файловой системы сервера (например, /etc/passwd).

  • SSRF: Взаимодействовать с внутренними системами.

Пример атаки (Payload):

Вместо обычного XML мы отправляем модифицированный:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ 
  <!ENTITY xxe SYSTEM "file:///etc/passwd"> 
]>
<stockCheck>
  <productId>&xxe;</productId>
</stockCheck>

Если сервер уязвим, вместо productId он подставит содержимое файла /etc/passwd и вернет его вам в ошибке или ответе.

3. SSRF (Server-Side Request Forgery)

SSRF — это уязвимость, при которой вы заставляете сервер делать запросы к произвольным ресурсам (внешним или внутренним).

Почему это работает?

Приложение принимает URL от пользователя и делает по нему запрос без должной проверки. Для сервера этот запрос выглядит "доверенным", так как он исходит от самого себя.

Векторы атак:

  • Сканирование внутренней сети: Доступ к админкам, которые доступны только с localhost (например, http://localhost/admin или http://192.168.0.1:8080).

  • Чтение метаданных облака: В AWS/Google Cloud можно украсть ключи доступа, обратившись к специальному адресу (например, http://169.254.169.254/...).

Пример:

Если сайт загружает аватарку по ссылке, попробуйте подсунуть ему:

stockApi=http://stock.weliketoshop.net:8080/product/stock/...

меняем на

stockApi=http://localhost/admin

4. SSTI (Server-Side Template Injection)

Современные сайты собираются из шаблонов. SSTI возникает, когда ввод пользователя небезопасно объединяется с шаблоном (конкатенация), и движок шаблонизатора начинает исполнять ваш текст как код.

Как определить (Detection):

Попробуйте математику. Если вы вводите {{7*7}} и видите на сайте 49 — это SSTI.

Популярные движки и синтаксис:

  • Jinja2 (Python/Flask): {{ user.name }}. Часто позволяет получить RCE (удаленное выполнение кода) через доступ к глобальным объектам Python.

  • Twig (PHP/Symfony): {{ user.name }}. Компилируется в PHP.

  • Freemarker (Java): ${user.name}.

5. SQL Injection (SQLi)

Это классика взлома баз данных.

Суть: Внедрение произвольного SQL-кода в запрос к базе данных. Происходит, когда данные пользователя подставляются в запрос без фильтрации.

Типы SQLi:

  1. Union-Based: Самая наглядная. Позволяет объединить результаты легитимного запроса с вашим.

    • Payload: ' UNION SELECT username, password FROM users--

    • Результат: Сайт выводит список логинов и паролей прямо на страницу.

  2. Error-Based: Мы намеренно ломаем синтаксис, чтобы база данных "выплюнула" ошибку, содержащую данные.

    • Payload: ' AND (SELECT 1/0) -- (вызовет ошибку деления на ноль или синтаксиса).

  3. Boolean-Blind (Слепая): Сайт не показывает данные, но реагирует по-разному на TRUE и FALSE.

    • Payload: id=1' AND 1=1-- (страница загрузилась нормально) vs id=1' AND 1=0-- (страница пустая/ошибка 404).

    • Метод: Мы перебираем пароль посимвольно: "Первая буква пароля 'A'?"

  4. Time-Based (Временная): Мы спрашиваем: "Если пароль начинается на 'A', подожди 10 секунд". Если сайт завис — мы угадали.

Инструмент:

Для автоматизации SQLi используйте SQLMap.

sqlmap -u "http://site.com/page?id=1" --dbs

6. Полезные материалы

  • PortSwigger Web Security Academy (Burp Suite Creators):

    Лучший в мире ресурс для изучения XXE, SSRF, SSTI и SQLi. Вся теория подкреплена лабами.

    Ссылка: portswigger.net/web-security

  • HackTricks:

    Энциклопедия хакера. Если нашли SSTI, идите туда за готовыми пейлоадами для Jinja2 или Twig.

    Ссылка: book.hacktricks.xyz

  • PayloadsAllTheThings:

    Репозиторий на GitHub с огромными списками векторов атак для всего, что мы обсудили.

Задания