소개
이 랩에서는 Nmap 과 Gobuster 의 기능을 결합하여 강력한 타겟 발굴 기법을 배우게 됩니다. Nmap 은 컴퓨터 네트워크에서 호스트와 서비스를 검색하는 데 사용되는 다목적 네트워크 스캐너이며, Gobuster 는 URI(디렉토리 및 파일) 와 DNS 서브도메인을 무차별 대입하는 데 사용되는 도구입니다. 이 두 도구를 통합함으로써 특정 네트워크 범위 내에서 잠재적인 웹 서버를 식별하는 프로세스를 자동화한 다음 해당 서버의 숨겨진 디렉토리와 파일을 체계적으로 발굴할 수 있습니다. 이 접근 방식은 정찰 노력을 크게 향상시켜 발굴 프로세스를 더욱 효율적이고 포괄적으로 만듭니다.
열린 웹 포트 (80, 443) 를 위해 네트워크 범위를 스캔하는 Nmap 사용
이 단계에서는 Nmap 을 사용하여 일반적인 웹 포트 (HTTP 의 경우 80, HTTPS 의 경우 443) 가 열려 있는 호스트를 로컬 네트워크 범위에서 스캔합니다. 이는 잠재적인 웹 서버를 식별하는 초기 단계입니다. Docker 가 내부 네트워크에 일반적으로 사용하는 172.17.0.0/24 네트워크 범위를 스캔할 것입니다.
먼저 Nmap 이 설치되어 있는지 확인합니다. LabEx VM 에 사전 설치되어 있어야 합니다.
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 을 지정하고, 파싱하기 쉬운 Grepable 형식으로 결과를 출력하기 위해 -oG를 사용합니다.
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 파일을 처리할 것입니다. 목표는 "open" 포트 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: 열린 포트를 나타내는 "open"이라는 단어를 포함하는nmap_web_scan.txt의 줄을 필터링합니다.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 이 모두 열려 있을 수 있으며, 이 경우 동일한 IP 에 대해 두 개의 URL 이 생성됩니다.
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 스캔 대상이 포함됩니다.
URL 목록을 반복하는 간단한 Bash 스크립트 작성
이 단계에서는 web_servers.txt에서 각 URL 을 읽고 Gobuster 스캔을 준비하는 Bash 스크립트를 생성합니다. 이 스크립트는 Nmap 과 Gobuster 를 결합한 워크플로우의 자동화 백본 역할을 할 것입니다.
먼저 nano를 사용하여 gobust_scan.sh라는 새 스크립트 파일을 만듭니다.
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 "-------------------------"
## web_servers.txt의 각 URL을 반복
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 명령을 통합합니다. Nmap 에서 발견한 각 URL 에 대해 Gobuster 는 일반적인 단어 목록을 사용하여 숨겨진 디렉토리와 파일을 찾으려고 시도합니다.
먼저 Gobuster 가 설치되어 있는지 확인합니다. LabEx VM 에 사전 설치되어 있어야 합니다.
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 "-------------------------"
## web_servers.txt의 각 URL을 반복
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).
이제 스크립트를 실행합니다. 이렇게 하면 각 URL 에 대해 Gobuster 가 실행되고 결과가 별도의 파일에 저장됩니다.
./gobust_scan.sh
스크립트는 이제 각 URL 에 대해 Gobuster 를 실행합니다. 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 목록을 생성했습니다. 다음으로, 이러한 URL 을 반복하고 각 URL 에 대해 Gobuster 를 호출하여 숨겨진 디렉토리와 파일을 찾는 Bash 스크립트를 개발했습니다. 마지막으로 모든 Gobuster 결과를 단일 보고서로 통합하여 효율적이고 포괄적인 정찰 워크플로우를 시연했습니다. 이 통합 접근 방식은 네트워크 보안 또는 웹 애플리케이션 테스트에 관련된 모든 사람에게 귀중한 기술입니다.



