다양한 Nmap 출력 형식 탐색
이 단계에서는 Nmap 이 제공하는 다양한 출력 형식에 대해 배우게 됩니다. 출력 형식은 사이버 보안에서 매우 중요합니다. 이는 필요에 따라 스캔 결과를 다양한 방식으로 표시할 수 있기 때문입니다. 예를 들어, 일부 형식은 사람이 읽기 쉽고, 다른 형식은 기계가 구문 분석하도록 설계되어 다른 도구와 통합할 때 유용합니다.
Nmap 출력 형식 개요
Nmap 은 여러 출력 형식을 지원하며, 각 형식은 고유한 특성과 사용 사례를 가지고 있습니다.
- Normal Output (기본값): 이는 사람이 읽을 수 있는 형식입니다. 스캔 결과를 한눈에 이해하기 쉽도록 표시하므로 빠른 수동 분석에 적합합니다.
- XML Output (
-oX): XML 은 Extensible Markup Language 의 약자입니다. 이는 구조화된 형식으로, 데이터가 계층적 방식으로 구성됨을 의미합니다. 이를 통해 프로그램과 스크립트가 데이터를 쉽게 구문 분석할 수 있으며, Nmap 을 다른 보안 도구와 통합할 때 일반적으로 사용됩니다.
- Grepable Output (
-oG): 이는 라인 기반 형식입니다. grep, awk, cut 과 같은 Unix 도구로 쉽게 처리하도록 설계되었습니다. 이 형식은 스캔 결과에서 특정 정보를 빠르게 추출하려는 경우에 유용합니다.
- Script Kiddie Output (
-oS): 이 형식은 일반 출력과 유사하지만 ASCII 아트를 포함합니다. 그러나 실제 시나리오에서는 거의 사용되지 않습니다.
- All Formats (
-oA): 이 옵션을 사용하면 스캔 결과를 일반, XML 및 grepable 형식으로 동시에 저장할 수 있습니다. 모든 유형의 출력을 한 번에 사용할 수 있는 편리한 방법입니다.
로컬 웹 서버를 다시 스캔하여 이러한 형식을 살펴보겠습니다.
XML 출력 형식
XML(Extensible Markup Language) 은 데이터 저장 및 교환에 널리 사용되는 구조화된 형식입니다. 계층적 구조로 인해 프로그램이 데이터를 쉽게 구문 분석할 수 있으므로 다른 보안 도구와의 통합에 일반적으로 사용됩니다.
-
Nmap 스캔을 실행하고 출력을 XML 형식으로 저장합니다.
nmap -p 8080 localhost -oX /home/labex/project/scan_results.xml
이 명령에서 -p 8080은 포트 8080 을 스캔하고 있음을 지정하고, localhost는 스캔 대상 (로컬 머신) 이며, -oX는 Nmap 에 출력을 XML 형식으로 지정된 파일 경로에 저장하도록 지시합니다.
-
XML 출력을 봅니다.
cat /home/labex/project/scan_results.xml
cat 명령은 파일의 내용을 표시하는 데 사용됩니다. 이 명령을 실행하면 다음과 유사한 XML 형식의 출력이 표시됩니다 (약어).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<nmaprun scanner="nmap" args="nmap -p 8080 localhost -oX /home/labex/project/scan_results.xml" ...>
<scaninfo type="connect" protocol="tcp" .../>
<verbose level="0"/>
<debugging level="0"/>
<host>
<status state="up" reason="conn - refused" reason_ttl="0"/>
<address addr="127.0.0.1" addrtype="ipv4"/>
<hostnames>
<hostname name="localhost" type="user"/>
<hostname name="localhost" type="PTR"/>
</hostnames>
<ports>
<port protocol="tcp" portid="8080">
<state state="open" reason="syn - ack" reason_ttl="0"/>
<service name="http - proxy" method="table" conf="3"/>
</port>
</ports>
<times srtt="97" rttvar="5000" to="100000"/>
</host>
<runstats>...</runstats>
</nmaprun>
-
XML 형식에는 계층적 구조로 구성된 자세한 정보가 포함되어 있습니다. 특정 포트 정보를 추출해 보겠습니다.
grep -A5 "<port " /home/labex/project/scan_results.xml > /home/labex/project/port_details.txt
grep 명령은 파일에서 특정 패턴을 검색하는 데 사용됩니다. -A5는 패턴과 일치하는 줄 이후 5 줄을 표시함을 의미합니다. XML 파일에서 <port를 포함하는 줄을 검색하고 결과를 port_details.txt라는 새 파일에 저장합니다.
-
추출된 포트 세부 정보를 봅니다.
cat /home/labex/project/port_details.txt
이 명령을 실행하면 XML 의 포트 정보 섹션이 표시됩니다.
Grepable 출력 형식
Grepable 출력은 grep, awk, cut 과 같은 도구로 쉽게 처리하도록 특별히 설계되었습니다. 이러한 Unix 도구는 텍스트 처리에 매우 강력하며 스캔 결과에서 필요한 정보를 빠르게 추출하는 데 도움이 될 수 있습니다.
-
Nmap 스캔을 실행하고 출력을 grepable 형식으로 저장합니다.
nmap -p 8080 localhost -oG /home/labex/project/scan_results.grep
여기서 -oG는 Nmap 에 출력을 grepable 형식으로 지정된 파일에 저장하도록 지시합니다.
-
grepable 출력을 봅니다.
cat /home/labex/project/scan_results.grep
출력은 다음과 유사하게 표시됩니다.
## Nmap 7.80 scan initiated Wed Nov 8 12:40:00 2023 as: nmap -p 8080 localhost -oG /home/labex/project/scan_results.grep
Host: 127.0.0.1 (localhost) Status: Up
Host: 127.0.0.1 (localhost) Ports: 8080/open/tcp//http - proxy///
## Nmap done at Wed Nov 8 12:40:00 2023 -- 1 IP address (1 host up) scanned in 0.05 seconds
-
grepable 형식은 모든 호스트 정보를 단일 줄에 배치하여 텍스트 처리 도구와 함께 사용하기 쉽게 만듭니다. 예를 들어, 포트 정보를 포함하는 줄만 추출할 수 있습니다.
grep "Ports:" /home/labex/project/scan_results.grep > /home/labex/project/ports_info.txt
이 명령은 grepable 출력 파일에서 "Ports:"라는 단어를 포함하는 줄을 검색하고 일치하는 줄을 ports_info.txt라는 새 파일에 저장합니다.
-
추출된 포트 정보를 봅니다.
cat /home/labex/project/ports_info.txt
모든 형식으로 동시 저장
Nmap 은 -oA 옵션을 사용하여 출력을 여러 형식으로 한 번에 저장하는 편리한 옵션을 제공합니다. 다양한 목적으로 다양한 유형의 출력이 필요한 경우 시간을 절약할 수 있습니다.
-
Nmap 스캔을 실행하고 출력을 모든 형식으로 저장합니다.
nmap -p 8080 localhost -oA /home/labex/project/all_formats
이 명령은 로컬 머신에서 포트 8080 을 스캔하고 결과를 일반, XML 및 grepable 형식으로 저장합니다.
-
생성된 파일을 확인합니다.
ls -la /home/labex/project/all_formats.*
ls -la 명령은 자세한 정보와 함께 디렉토리의 모든 파일을 나열합니다. 이 명령을 실행하면 세 개의 파일이 표시됩니다.
all_formats.nmap (일반 출력)
all_formats.xml (XML 출력)
all_formats.gnmap (grepable 출력)
이제 Nmap 이 제공하는 다양한 출력 형식과 이를 사용하는 방법을 이해했습니다. 각 형식에는 고유한 장점이 있습니다.
- 일반 출력은 사람이 읽기 쉽습니다.
- XML 출력은 기계 구문 분석 및 다른 도구와의 통합을 위해 구조화되었습니다.
- Grepable 출력은 Unix 텍스트 처리 도구로 빠른 분석을 위해 설계되었습니다.
다음 단계에서는 이러한 출력을 자세히 분석하는 방법을 배우게 됩니다.