Введение
В этой лабораторной работе вы изучите мощный метод обнаружения целей, объединяющий возможности 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 в один отчет, продемонстрировав эффективный и комплексный рабочий процесс разведки. Этот интегрированный подход является ценным навыком для всех, кто занимается сетевой безопасностью или тестированием веб-приложений.
