Nmap のさまざまな出力形式を探索する
このステップでは、Nmap が提供するさまざまな出力形式について学びます。出力形式はサイバーセキュリティにおいて重要です。なぜなら、それによってスキャン結果を必要に応じてさまざまな方法で提示することができるからです。たとえば、ある形式は人間が読みやすく、他の形式は機械が解析しやすいように設計されており、他のツールと統合する際に便利です。
Nmap 出力形式の概要
Nmap はいくつかの出力形式をサポートしており、それぞれ独自の特徴と使用例があります。
- 通常出力 (デフォルト): これは人間が読みやすい形式です。スキャン結果を一目で理解しやすいように表示するため、迅速な手動分析に最適です。
- XML 出力 (
-oX
): XML は Extensible Markup Language の略です。構造化された形式で、データが階層的に整理されています。このため、プログラムやスクリプトがデータを解析しやすく、Nmap を他のセキュリティツールと統合する際に一般的に使用されます。
- grep 可能な出力 (
-oG
): これは行ベースの形式です。grep、awk、cut などの Unix ツールで簡単に処理できるように設計されています。スキャン結果から特定の情報を迅速に抽出したい場合に便利です。
- Script Kiddie 出力 (
-oS
): この形式は通常出力に似ていますが、ASCII アートが含まれています。ただし、実際のシナリオではあまり使用されません。
- すべての形式 (
-oA
): このオプションを使用すると、スキャン結果を通常、XML、および grep 可能な形式で同時に保存できます。すべての種類の出力を一度に利用できる便利な方法です。
ローカル Web サーバーを再度スキャンして、これらの形式を探索しましょう。
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 からのポート情報セクションが表示されます。
grep 可能な出力形式
grep 可能な出力は、grep、awk、cut などのツールで簡単に処理できるように特別に設計されています。これらの Unix ツールはテキスト処理に非常に強力で、スキャン結果から必要な情報を迅速に抽出するのに役立ちます。
-
Nmap スキャンを実行し、出力を grep 可能な形式で保存します。
nmap -p 8080 localhost -oG /home/labex/project/scan_results.grep
ここで、-oG
は Nmap に出力を指定されたファイルに grep 可能な形式で保存するよう指示します。
-
grep 可能な出力を表示します。
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
-
grep 可能な形式では、すべてのホスト情報が 1 行にまとめられているため、テキスト処理ツールで使用しやすいです。たとえば、ポート情報を含む行だけを抽出することができます。
grep "Ports:" /home/labex/project/scan_results.grep > /home/labex/project/ports_info.txt
このコマンドは、grep 可能な出力ファイル内で「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、および grep 可能な形式で保存します。
-
作成されたファイルを確認します。
ls -la /home/labex/project/all_formats.*
ls -la
コマンドはディレクトリ内のすべてのファイルを詳細情報とともにリスト表示します。このコマンドを実行すると、次の 3 つのファイルが表示されるはずです。
all_formats.nmap
(通常出力)
all_formats.xml
(XML 出力)
all_formats.gnmap
(grep 可能な出力)
これで、Nmap が提供するさまざまな出力形式とその使い方がわかりました。それぞれの形式には独自の利点があります。
- 通常出力は人間が読みやすい
- XML 出力は機械が解析しやすい構造で、他のツールとの統合に適している
- grep 可能な出力は Unix テキスト処理ツールで迅速に分析できるように設計されている
次のステップでは、これらの出力をより詳細に分析する方法を学びます。