Введение
При тестировании на проникновение и анализе веб-приложений часто используются такие инструменты, как Burp Suite Intruder, для отправки большого количества запросов к цели. Ключевой функцией в этом процессе является "Grep - Match", которая позволяет автоматически помечать ответы, содержащие определенные ключевые слова (например, "Welcome", "Login successful", "admin_access_granted"). Это помогает быстро просеять тысячи ответов, чтобы найти интересные.
В этой лаборатории вы научитесь воспроизводить эту мощную функциональность "Grep - Match" с использованием стандартных инструментов командной строки Linux. Вы будете использовать curl для выполнения HTTP-запросов, цикл оболочки (shell loop) для автоматизации процесса для списка полезных нагрузок (payloads) и grep для поиска ключевого слова успеха в ответах. Это фундаментальный навык для всех, кто интересуется автоматизацией безопасности и написанием скриптов.
В Intruder > Options, прокрутите до раздела 'Grep - Match'
В графическом инструменте, таком как Burp Suite, это шаг, на котором вы переходите в панель настроек для конфигурации правил сопоставления. В нашей среде командной строки эквивалентным действием является подготовка необходимых компонентов: списка полезных нагрузок (payloads) и целевого URL.
В рамках процесса настройки в вашем каталоге ~/project уже создан файл с именем payloads.txt. Этот файл содержит список потенциальных значений, которые мы хотим протестировать против веб-приложения, выполняя ту же функцию, что и список полезных нагрузок Intruder.
Давайте посмотрим содержимое этого файла.
cat ~/project/payloads.txt
Вы должны увидеть следующий вывод:
orange
banana
apple
grape
mango
Наше целевое приложение — это простой веб-сервер, работающий по адресу http://localhost:8000. Мы будем тестировать каждую полезную нагрузку против этой цели.
Очистка правил по умолчанию
В Burp Suite вы обычно очищаете любые существующие или правила по умолчанию, чтобы убедиться, что вы сопоставляете только то, что явно определили. Для нашей симуляции это означает установление базового уровня путем выполнения одного запроса с известной "неудачной" полезной нагрузкой. Это поможет нам понять, как выглядит обычный, неуспешный ответ.
Давайте используем curl для отправки запроса к серверу с полезной нагрузкой orange, которая, как мы знаем, не является правильной.
curl "http://localhost:8000/?item=orange"
Команда получит веб-страницу и выведет ее HTML-источник в терминал. Вывод должен выглядеть следующим образом:
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<script>
const params = new URLSearchParams(window.location.search);
if (params.get("item") === "apple") {
document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
} else {
document.body.innerHTML = "<h1>Item not found.</h1>";
}
</script>
</body>
</html>
Обратите внимание на логику JavaScript и результирующий текст "Item not found". Это наш базовый "неудачный" ответ.
Добавление нового правила для сопоставления ключевого слова успеха (например, 'Welcome', 'Logged in')
Это основа техники "Grep - Match". Нам нужно определить уникальную строку или шаблон, который будет появляться только в "успешном" ответе. Глядя на HTML из предыдущего шага, мы видим, что успешный запрос (где item=apple) приведет к появлению текста "Welcome to the secret page!". Ключевое слово "Welcome" является идеальным кандидатом для нашего правила.
Мы можем использовать команду grep для фильтрации вывода curl и проверки наличия нашего ключевого слова. Флаг -s для curl используется для запуска в тихом режиме, который скрывает индикатор прогресса.
Сначала протестируем это правило на неудачной полезной нагрузке. Эта команда не должна выдавать никакого вывода, потому что слово "Welcome" отсутствует в ответе.
curl -s "http://localhost:8000/?item=orange" | grep "Welcome"
Теперь протестируем его на известной успешной полезной нагрузке, apple.
curl -s "http://localhost:8000/?item=apple" | grep "Welcome"
На этот раз grep находит совпадение и выводит строку, содержащую ключевое слово:
document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';
Конструкция "pipe" (|) и команда grep "Welcome" вместе формируют наше правило "Grep - Match". Мы успешно создали способ отличить успешный ответ от неуспешного.
Запуск атаки Intruder
"Атака Intruder" — это, по сути, процесс автоматизации наших запросов для каждой полезной нагрузки из нашего списка. Мы можем добиться этого с помощью простого цикла оболочки (shell loop). Цикл будет считывать каждую строку из payloads.txt, выполнять для нее нашу команду curl | grep и показывать нам результаты.
Чтобы сделать вывод более чистым и похожим на таблицу результатов, мы создадим небольшой скрипт оболочки. Используйте редактор nano для создания нового файла с именем attack.sh.
nano attack.sh
Теперь скопируйте и вставьте следующий скрипт в редактор nano:
#!/bin/bash
echo "Payload,Found"
for payload in $(cat ~/project/payloads.txt); do
response=$(curl -s "http://localhost:8000/?item=$payload")
if echo "$response" | grep -q "Welcome"; then
echo "$payload,True"
else
echo "$payload,False"
fi
done
Этот скрипт сначала выводит заголовок (Payload,Found). Затем он перебирает каждую полезную нагрузку. Внутри цикла он использует grep -q (тихий режим) для проверки ключевого слова "Welcome". Если оно найдено, он выводит полезную нагрузку с последующим True; в противном случае он выводит False.
Нажмите Ctrl+X, затем Y и Enter, чтобы сохранить файл и выйти из nano.
Далее, сделайте скрипт исполняемым:
chmod +x attack.sh
Наконец, запустите атаку:
./attack.sh
Наблюдение за новым столбцом в таблице результатов для вашего совпадения
После выполнения скрипта из предыдущего шага вы увидите в терминале чистый вывод, похожий на таблицу.
Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False
Этот вывод является эквивалентом таблицы результатов в Burp Suite Intruder для командной строки. Первый столбец перечисляет протестированную полезную нагрузку, а второй столбец, который мы назвали "Found", действует как наш индикатор "Grep - Match".
Простым просмотром этого второго столбца на наличие значения True вы можете немедленно определить успешную полезную нагрузку. Как вы можете видеть, строка apple,True явно выделяется, сообщая нам, что полезная нагрузка apple привела к ответу, содержащему наше целевое ключевое слово. Это демонстрирует, насколько эффективна эта техника для поиска иголки в стоге сена HTTP-ответов.
Резюме
В этой лаборатории вы успешно симулировали функцию "Grep - Match", являющуюся краеугольным камнем многих автоматизированных инструментов веб-безопасности. Вы научились объединять несколько фундаментальных инструментов командной строки Linux для достижения мощного результата.
Вы практиковались в:
- Использовании
curlдля выполнения веб-запросов из терминала. - Использовании
grepдля поиска конкретных ключевых слов в данных ответа. - Написании цикла
forв оболочке для автоматизации задачи для списка входных данных. - Объединении этих инструментов в единый скрипт для систематического тестирования полезных нагрузок и выявления успешных попыток.
Этот подход с использованием командной строки не только является отличным способом понять, как работают сложные инструменты "изнутри", но также представляет собой чрезвычайно гибкий и мощный навык для ваших собственных задач автоматизации и написания скриптов безопасности.
