Объединение Gobuster с Nmap для обнаружения целей

Beginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите мощный метод обнаружения целей, объединяющий возможности Nmap и Gobuster. Nmap — это универсальный сетевой сканер, используемый для обнаружения хостов и служб в компьютерной сети, а Gobuster — это инструмент, используемый для перебора URI (каталогов и файлов) и поддоменов DNS. Интегрируя эти два инструмента, вы можете автоматизировать процесс идентификации потенциальных веб-серверов в заданном диапазоне сети, а затем систематически обнаруживать скрытые каталоги и файлы на этих серверах. Такой подход значительно улучшает ваши разведывательные действия, делая процесс обнаружения более эффективным и полным.

Использование Nmap для сканирования диапазона сети на наличие открытых веб-портов (80, 443)

На этом шаге вы будете использовать Nmap для сканирования локального диапазона сети на наличие хостов с открытыми распространенными веб-портами (80 для HTTP и 443 для HTTPS). Это начальный этап идентификации потенциальных веб-серверов. Мы будем сканировать диапазон сети 172.17.0.0/24, который обычно используется Docker для своих внутренних сетей.

Сначала убедимся, что Nmap установлен. Он должен быть предустановлен на виртуальной машине LabEx.

nmap --version

Вы должны увидеть вывод, похожий на этот, указывающий на то, что Nmap установлен:

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Теперь выполните сканирование Nmap. Мы будем использовать флаг -p для указания портов 80 и 443, а -oG для вывода результатов в формате Grepable, который легче парсить.

nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24

Эта команда просканирует указанный диапазон сети на наличие хостов с открытыми портами 80 или 443 и сохранит вывод в файл nmap_web_scan.txt. Сканирование может занять несколько минут.

После завершения сканирования вы можете просмотреть содержимое выходного файла:

cat nmap_web_scan.txt

Вы увидите строки, указывающие на обнаруженные хосты и их открытые порты. Например:

## Nmap 7.80 scan initiated Mon Jan 1 00:00:00 2024 as: nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Host: 172.17.0.2 ()	Ports: 80/open/tcp//http///, 443/open/tcp//https///
Host: 172.17.0.3 ()	Ports: 80/open/tcp//http///
## Nmap done at Mon Jan 1 00:00:00 2024 -- 256 IP addresses (2 hosts up) scanned in 5.00 seconds

Парсинг вывода Nmap для создания списка URL веб-серверов

На этом шаге вы будете парсить файл nmap_web_scan.txt для извлечения IP-адресов хостов с открытыми веб-портами и форматирования их в список URL. Этот список затем будет использоваться в качестве входных данных для Gobuster.

Мы будем использовать grep и awk для обработки файла nmap_web_scan.txt. Цель состоит в том, чтобы извлечь строки, содержащие открытые порты 80 или 443, затем извлечь IP-адрес и, наконец, сформировать URL (например, http://172.17.0.2 или https://172.17.0.2).

Выполните следующую команду для парсинга вывода Nmap и создания файла web_servers.txt:

grep "open" nmap_web_scan.txt | awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}' | sort -u > web_servers.txt

Разберем эту команду:

  • grep "open" nmap_web_scan.txt: Фильтрует строки из nmap_web_scan.txt, содержащие слово "open", указывающее на открытый порт.
  • awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}': Обрабатывает отфильтрованные строки.
    • /80\/open/ {print "http://" $2}: Если строка содержит "80/open", выводится "http://" с последующим вторым полем ($2), которое является IP-адресом.
    • /443\/open/ {print "https://" $2}: Если строка содержит "443/open", выводится "https://" с последующим вторым полем ($2), которое является IP-адресом.
    • Примечание: У хоста могут быть открыты оба порта, 80 и 443, что приведет к двум URL для одного и того же IP.
  • sort -u: Сортирует URL и удаляет любые дубликаты.
  • > web_servers.txt: Перенаправляет окончательный вывод в новый файл с именем web_servers.txt.

Теперь просмотрите содержимое файла web_servers.txt:

cat web_servers.txt

Вы должны увидеть список URL, по одному на строку, примерно такой:

http://172.17.0.2
https://172.17.0.2
http://172.17.0.3

Этот файл теперь содержит цели для нашего сканирования Gobuster.

Написание простого Bash-скрипта для перебора списка URL

На этом шаге вы создадите Bash-скрипт, который будет считывать каждый URL из файла web_servers.txt и готовиться к сканированию с помощью Gobuster. Этот скрипт послужит основой автоматизации для нашего комбинированного рабочего процесса Nmap и Gobuster.

Сначала создадим новый файл скрипта с именем gobust_scan.sh с помощью nano:

nano gobust_scan.sh

Вставьте следующее содержимое в файл gobust_scan.sh:

#!/bin/bash

## Определение списка слов для Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Общий список слов для брутфорса директорий

## Проверка существования списка слов
if [ ! -f "$WORDLIST" ]; then
  echo "Error: Wordlist not found at $WORDLIST. Please ensure it exists."
  echo "You might need to install 'dirb' or 'wordlists' package, e.g., sudo apt install dirb"
  exit 1
fi

## Проверка существования файла web_servers.txt
if [ ! -f "web_servers.txt" ]; then
  echo "Error: web_servers.txt not found. Please run Step 2 first."
  exit 1
fi

echo "Starting Gobuster scans..."
echo "-------------------------"

## Перебор каждого URL в web_servers.txt
while IFS= read -r url; do
  echo "Scanning $url..."
  ## Заполнитель для команды Gobuster - будет добавлен на следующем шаге
  ## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
  echo "Finished scanning $url."
  echo "-------------------------"
done < web_servers.txt

echo "All scans completed."

Сохраните файл, нажав Ctrl+X, затем Y для подтверждения и Enter для сохранения под текущим именем файла.

Далее, сделаем скрипт исполняемым:

chmod +x gobust_scan.sh

Теперь протестируем скрипт, чтобы убедиться, что он корректно перебирает URL. Он пока не будет запускать Gobuster, но будет выводить сообщения для каждого URL.

./gobust_scan.sh

Вы должны увидеть вывод, похожий на этот, указывающий на то, что скрипт корректно считывает и обрабатывает каждый URL:

Starting Gobuster scans...
-------------------------
Scanning http://172.17.0.2...
Finished scanning http://172.17.0.2.
-------------------------
Scanning https://172.17.0.2...
Finished scanning https://172.17.0.2.
-------------------------
Scanning http://172.17.0.3...
Finished scanning http://172.17.0.3.
-------------------------
All scans completed.

Это подтверждает, что наш скрипт готов к интеграции команды Gobuster.

Вызов Gobuster в скрипте для каждой обнаруженной цели

На этом шаге вы модифицируете скрипт gobust_scan.sh для интеграции команды Gobuster. Для каждого URL, обнаруженного Nmap, Gobuster попытается найти скрытые директории и файлы, используя общий список слов.

Сначала убедимся, что Gobuster установлен. Он должен быть предварительно установлен на виртуальной машине LabEx.

gobuster --version

Вы должны увидеть вывод, похожий на этот:

gobuster v3.1.0

Теперь снова откройте скрипт gobust_scan.sh для редактирования:

nano gobust_scan.sh

Найдите строку-заполнитель: ## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"

Раскомментируйте эту строку и убедитесь, что она выглядит точно так:

#!/bin/bash

## Определение списка слов для Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Общий список слов для брутфорса директорий

## Проверка существования списка слов
if [ ! -f "$WORDLIST" ]; then
  echo "Error: Wordlist not found at $WORDLIST. Please ensure it exists."
  echo "You might need to install 'dirb' or 'wordlists' package, e.g., sudo apt install dirb"
  exit 1
fi

## Проверка существования файла web_servers.txt
if [ ! -f "web_servers.txt" ]; then
  echo "Error: web_servers.txt not found. Please run Step 2 first."
  exit 1
fi

echo "Starting Gobuster scans..."
echo "-------------------------"

## Перебор каждого URL в web_servers.txt
while IFS= read -r url; do
  echo "Scanning $url..."
  ## Команда Gobuster
  gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
  echo "Finished scanning $url."
  echo "-------------------------"
done < web_servers.txt

echo "All scans completed."

Сохраните измененный скрипт (Ctrl+X, Y, Enter).

Теперь выполните скрипт. Это запустит Gobuster для каждого URL и сохранит результаты в отдельные файлы.

./gobust_scan.sh

Скрипт теперь выполнит Gobuster для каждого URL. Вы будете видеть вывод Gobuster непосредственно в терминале по мере его выполнения, а также результаты будут сохраняться в файлы с именами вроде gobuster_172.17.0.2.txt, gobuster_172.17.0.2_443.txt и т.д. (точные имена файлов зависят от URL).

После завершения скрипта вы можете вывести список сгенерированных файлов вывода Gobuster:

ls gobuster_*.txt

Вы должны увидеть файлы, похожие на:

gobuster_172.17.0.2.txt  gobuster_172.17.0.2_443.txt  gobuster_172.17.0.3.txt

Консолидация результатов Gobuster со всех целей

На этом заключительном шаге вы объедините все отдельные выходные файлы Gobuster в один комплексный отчет. Это облегчит просмотр всех обнаруженных директорий и файлов на всех сканируемых веб-серверах.

Мы будем использовать команду cat для объединения всех файлов, соответствующих шаблону gobuster_*.txt, в один файл с именем all_gobuster_results.txt.

cat gobuster_*.txt > all_gobuster_results.txt

Эта команда возьмет содержимое всех файлов, начинающихся с gobuster_ и заканчивающихся на .txt, и объединит их в файл all_gobuster_results.txt.

Теперь вы можете просмотреть консолидированные результаты:

cat all_gobuster_results.txt

Вы увидите объединенный вывод всех директорий и файлов, найденных Gobuster на сканируемых веб-серверах. Вывод будет варьироваться в зависимости от содержимого веб-серверов, но может выглядеть примерно так:

===============================================================
Gobuster v3.1.0
...
[+] Found: /index.html (Status: 200)
[+] Found: /css (Status: 301)
[+] Found: /js (Status: 301)
...
===============================================================
Gobuster v3.1.0
...
[+] Found: /admin (Status: 301)
[+] Found: /login.php (Status: 200)
...

Этот консолидированный файл предоставляет единую точку отсчета для всех обнаруженных веб-ресурсов, завершая ваш автоматизированный процесс обнаружения целей.

Резюме

В этой лабораторной работе вы успешно объединили Nmap и Gobuster для автоматизации процесса обнаружения веб-серверов и директорий. Вы начали с использования Nmap для сканирования сетевого диапазона на наличие открытых веб-портов, затем обработали его вывод для создания списка целевых URL. Далее вы разработали Bash-скрипт для итерации по этим URL, вызывая Gobuster для каждого, чтобы найти скрытые директории и файлы. Наконец, вы консолидировали все результаты Gobuster в один отчет, продемонстрировав эффективный и комплексный рабочий процесс разведки. Этот интегрированный подход является ценным навыком для всех, кто занимается сетевой безопасностью или тестированием веб-приложений.