출력 형식 및 스캔 결과 분석
Nmap 은 다양한 용도로 매우 유용한 여러 출력 형식을 제공합니다. 예를 들어, 스캔 결과를 기록하기 위한 문서화, 심층 분석 또는 다른 보안 도구와의 통합에 사용할 수 있습니다. 이 단계에서는 이러한 출력 형식을 자세히 살펴보고 스캔 결과를 효과적으로 분석하는 방법을 배우겠습니다.
Nmap 은 다음과 같은 주요 출력 형식을 지원합니다.
- 일반 출력 (기본값): 이것은 사람이 읽을 수 있는 텍스트 형식입니다. 보고서와 유사하게, 한눈에 이해하기 쉽도록 스캔 결과를 표시합니다.
- XML 출력 (
-oX): XML 은 구조화된 형식입니다. 데이터를 계층적이고 체계적인 방식으로 배열하여 프로그램이 구문 분석하고 처리하는 데 매우 편리합니다.
- Greppable 출력 (
-oG): 이 형식은 grep 및 기타 텍스트 처리 유틸리티와 같은 도구를 사용하여 쉽게 구문 분석할 수 있도록 설계되었습니다. 관련 정보를 추출하기 쉽게 만드는 특정 구조를 가지고 있습니다.
- 모든 형식 (
-oA): 이 옵션을 사용하면 Nmap 이 일반, XML 및 greppable 형식으로 스캔 결과를 동시에 저장합니다. 다양한 요구 사항에 대해 모든 유형의 출력을 원하는 경우 유용합니다.
이러한 각 형식을 하나씩 시도해 보겠습니다.
먼저, 일반 형식으로 스캔을 저장합니다. 다음 명령은 localhost의 포트 8888 을 스캔하고 결과를 텍스트 파일에 저장합니다.
nmap -p 8888 localhost -oN /home/labex/project/normal_output.txt
이제 XML 형식으로 스캔을 저장해 보겠습니다. 이 명령은 localhost의 포트 8888 에 대해 동일한 스캔을 수행하고 결과를 XML 파일에 저장합니다.
nmap -p 8888 localhost -oX /home/labex/project/xml_output.xml
다음으로, greppable 형식으로 스캔을 저장합니다. 아래 명령은 localhost의 포트 8888 을 스캔하고 grep으로 쉽게 구문 분석할 수 있는 파일에 결과를 저장합니다.
nmap -p 8888 localhost -oG /home/labex/project/grep_output.txt
마지막으로, 모든 형식으로 스캔을 저장해 보겠습니다. 다음 명령은 localhost의 포트 8888 에 대한 동일한 스캔에 대해 서로 다른 형식의 세 개의 파일을 생성합니다.
nmap -p 8888 localhost -oA /home/labex/project/all_formats
이렇게 하면 all_formats.nmap, all_formats.xml 및 all_formats.gnmap의 세 개의 파일이 생성됩니다.
이제 이러한 각 파일을 검사하여 형식의 차이점을 이해해 보겠습니다.
일반 출력을 보려면 cat 명령을 사용합니다.
cat /home/labex/project/normal_output.txt
사람이 읽기 쉬운 표준 Nmap 출력을 볼 수 있습니다. 다음은 그 예입니다.
## Nmap 7.80 scan initiated Mon Oct 30 16:45:00 2023 as: nmap -p 8888 -oN /home/labex/project/normal_output.txt localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
PORT STATE SERVICE
8888/tcp open sun-answerbook
## Nmap done at Mon Oct 30 16:45:00 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds
XML 출력을 보려면 cat 명령도 사용합니다.
cat /home/labex/project/xml_output.xml
이 형식은 프로그램에서 쉽게 구문 분석할 수 있도록 구조화되어 있습니다. 다음은 XML 출력의 예입니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<nmaprun scanner="nmap" args="nmap -p 8888 -oX /home/labex/project/xml_output.xml localhost" start="1698684307" startstr="Mon Oct 30 16:45:07 2023" version="7.80" xmloutputversion="1.04">
<scaninfo type="connect" protocol="tcp" numservices="1" services="8888"/>
<verbose level="0"/>
<debugging level="0"/>
<host starttime="1698684307" endtime="1698684307"><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="8888"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="sun-answerbook" method="table" conf="3"/></port>
</ports>
<times srtt="100" rttvar="5000" to="100000"/>
</host>
<runstats><finished time="1698684307" timestr="Mon Oct 30 16:45:07 2023" elapsed="0.04" summary="Nmap done at Mon Oct 30 16:45:07 2023; 1 IP address (1 host up) scanned in 0.04 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>
greppable 출력을 보려면 다시 cat 명령을 사용합니다.
cat /home/labex/project/grep_output.txt
이 형식은 grep과 같은 도구로 쉽게 구문 분석할 수 있도록 설계되었습니다. 다음은 greppable 출력의 예입니다.
## Nmap 7.80 scan initiated Mon Oct 30 16:45:15 2023 as: nmap -p 8888 -oG /home/labex/project/grep_output.txt localhost
Host: 127.0.0.1 (localhost) Status: Up
Host: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///
## Nmap done at Mon Oct 30 16:45:15 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds
grep을 사용하여 greppable 출력에서 특정 정보를 추출하는 연습을 해보겠습니다. 다음 명령은 열린 포트가 있는 모든 줄을 표시합니다.
grep "open" /home/labex/project/grep_output.txt
출력은 다음과 같습니다.
Host: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///
더 복잡한 필터를 사용할 수도 있습니다. 다음 명령은 열린 포트의 포트 번호만 추출합니다.
grep -E "Ports:.*open" /home/labex/project/grep_output.txt | cut -d':' -f3 | cut -d'/' -f1
출력은 다음과 같습니다.
8888
이러한 다양한 출력 형식을 사용하면 Nmap 스캔 결과를 다른 도구 및 워크플로와 통합하여 보안 툴킷에 다재다능하게 추가할 수 있습니다.