Skip to content

Lab 1.3: Masscan

オフライン演習

接続性:これはオフライン演習です。この演習ではターゲットネットワークに接続する必要はありません。

目的

  • Masscanを使用してターゲットネットワークのスキャンを実行する
  • Masscanのバイナリ形式と他の出力形式との間で変換を行う

ウォークスルービデオ

ラボのセットアップ

使用するVM:

  • Linux

ラボ – ステップバイステップの手順

1:スキャンの準備

このラボでは、まずターゲットネットワークのスキャンを開始します。このスキャンにはMasscanを使用します。教科書で学んだように、Masscanはパケットを送信する際にカーネルをバイパスします。つまり、LinuxシステムがSYN-ACK応答を受信すると、Linuxシステムはそれをどう処理すべきか分からず、RSTで応答してしまいます。このスキャンはノイジーですが、これらのリセットを防ぐことで影響を軽減したいと思います。これを実現するには2つの方法があります。1つ目は、RSTパケットを送信しないようにファイアウォールを設定する方法です。2つ目は、既知のソースポートを使用してSYN-ACK応答が既知のポートに届くようにし、そのポートへのトラフィックをブロックする方法です。ここでは後者のアプローチを使用します。

ソースポートとして55555番ポートを選択し、このポートへのパケットをブロックするファイアウォールルールを作成しましょう。Masscanは引き続きパケットを検出するため、応答を見逃すことはありませんが、OSが余分なRSTパケットを送信するのを防ぐことができます。

ファイアウォールルールを作成するには、以下のコマンドを使用します:

コマンド

sudo iptables -A INPUT -p tcp --dport 55555 -j DROP

このコマンドからの出力はありません。

2:初期スキャン

スキャンを開始しましょう。このスキャンでは、一致するソースポート55555と毎秒15,000パケットのレートを使用します。複数の人が同時にスキャンを実行することによるターゲットの飽和を防ぐため、ローカルホストをスキャンします。

次の設定でMasscanを起動します:

  • 全65536個のTCPポートをスキャン
  • レート 15000
  • ソースポート 55555
  • 出力をバイナリ形式で*local.masscan*という名前のファイルに保存
  • ターゲット 127.0.0.1

VPN帯域幅を節約するため、(今のところ)localhostをスキャンします。

コマンド

sudo masscan --ports 0-65535 --rate 15000 --src-port=55555 -oB /tmp/local.masscan 127.0.0.1

想定される結果

sec560@560vm:~$ sudo masscan --ports 0-65535 --rate 15000 --src-port=55555 -oB /tmp/local.masscan 127.0.0.1
Starting masscan 1.3.9-integration (http://bit.ly/14GZzcT) at 2024-08-13 21:38:41 GMT
Initiating SYN Stealth Scan
Scanning 1 hosts [65536 ports/host]

/tmpディレクトリにlocal.masscanファイルが表示されるはずです。

コマンド

ls -l /tmp/local.masscan

想定される結果

sec560@560vm:~$ ls -l /tmp/local.masscan
-rw-r--r-- 1 root root 228 Aug 13 21:39 /tmp/local.masscan

このスキャンはローカルシステムに対して実行したため、結果は特に興味深いものではありません。重要なのは、Masscanの実行方法に慣れることです。

ターゲットネットワーク全体に対して完全なポートスキャンを実行するには、Masscanを使用してもしばらく時間がかかります。時間を節約するため、~/labs/masscan_10.130.10.0_24_full.binに完全なMasscanバイナリファイルが用意されています。分析にはこれを使用します。

提供されたファイル内のMasscan結果を見てみましょう。

3:スキャンのXML形式への変換

Masscanでのスキャンがいかに簡単かはすでに見てきました。時間を節約するため、以下のオプションを使用したMasscanからのバイナリ出力が提供されています。注意:これらのオプションを実行すると時間がかかりすぎるため、使用しないでください!

  • --ports 0-65535:全TCPポートをチェック
  • --rate 15000:毎秒最大15,000パケットを送信、他の人がスキャンを実行していないラボ環境では安全
  • --banners:SYN-ACKの後にRSTパケットを送信する代わりに、ACKを送信(完全な接続を確立)してから、サーバーから送信されたデータ(SSHやSMTPバナーなど)を確認
  • --src-port=55555:ファイアウォールルールでRSTパケットを制御できるようにソースポートを指定
  • -oB ~/labs/masscan_10.130.10.0_24_full.bin:バイナリ出力を保存
  • -e tun0:VPNインターフェースを指定
  • 10.130.10.0/24:スキャンするネットワーク範囲

このファイルを使用して、Masscanで利用可能なさまざまな出力形式を見てみましょう。--readscanオプションを使用して既存のバイナリ形式を読み取り、出力形式のいずれかでファイルを書き込むことができます。出力形式は次のとおりです:

  • -oX:XML
  • -oG:Grepable
  • -oJ:JSON
  • -oL:List

まず、--readscanオプションを使用してXML形式に変換し、ファイルをfull.xmlとして保存しましょう。次に、lessを使用してファイルの内容を表示します。

コマンド

masscan --readscan ~/labs/masscan_10.130.10.0_24_full.bin -oX /tmp/masscan_10.130.10.0_24_full.xml
less /tmp/masscan_10.130.10.0_24_full.xml

XML形式は人間が読むためのものではありませんが、他のツール(EyeWitnessや脆弱性スキャナーなど)とうまく連携します。lessコマンドを終了するには、qと入力します。

このファイル名について気になりますか?

多くの人が使用するよりも冗長ですが、著者は、明確で説明的なファイル名に少し時間をかけることが、実際のペネトレーションテスト中の避けられない混乱に役立つと考えています。ファイル名は、ツール(masscan_)、ターゲットネットワーク(10.130.10.0/24)、スキャンタイプ(_full)、および出力形式(.xml.bin)を示しています。これは、ディレクトリに複数のファイルがある場合に特に役立ちます。

より読みやすい形式であるGrepable形式を見てみましょう。

4:Grepable形式

バイナリ形式からgrepable形式(-oGを使用)を抽出し、ファイルをfull.grepとして保存します。

コマンド

masscan --readscan ~/labs/masscan_10.130.10.0_24_full.bin -oG /tmp/masscan_10.130.10.0_24_full.gnmap

想定される結果

sec560@560vm:~$ masscan --readscan ~/labs/masscan_10.130.10.0_24_full.bin -oG /tmp/masscan_10.130.10.0_24_full.gnmap
[+] --readscan ~/labs/masscan_10.130.10.0_24_full.bin

full.grepファイルに対してcatコマンドを使用して、ソートされたgrepable形式を表示しましょう。

コマンド

cat /tmp/masscan_10.130.10.0_24_full.gnmap | sort

想定される結果

sec560@560vm:~$ cat /tmp/masscan_10.130.10.0_24_full.gnmap | sort
Host: 10.130.10.10 ()   Port: 22    Service: ssh    Banner: SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5\x0d\x0a\x00\x00\x04\x5c\x07\x14\xd9\x8f\xde\xc2\xd5\x05\xcc\x13\xfb\xa9\xe3\xf09cb\xa9\x00\x00\x011sntrup761x25519-sha512@openssh.com,[...trimmed...]
Host: 10.130.10.10 ()   Port: 23    Service: ssh    Banner: SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5\x0d\x0a\x00\x00\x04\x5c\x07\x14%Z\x9b\x8d\xe5\xd8\x912.\xcc\xd9\xd6\x01\x93\xb5@\x00\x00\x011sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,[...trimmed...]
Host: 10.130.10.10 ()   Port: 80    Service: http   Banner: HTTP/1.1 200 OK\x0d\x0aServer: nginx/1.24.0 (Ubuntu)\x0d\x0aDate: Tue, 24 Sep 2024 04:22:22 GMT\x0d\x0aContent-Type: text/html\x0d\x0aContent-Length: 615\x0d\x0aLast-Modified: Wed, 11 Sep 2024 23:16:10 GMT\x0d\x0aConnection: close\x0d\x0aETag: \x2266e224ba-267\x22\x0d\x0aAccept-Ranges: bytes\x0d\x0a\x0d
Host: 10.130.10.10 ()   Port: 80    Service: http.server    Banner: nginx/1.24.0 (Ubuntu)
Host: 10.130.10.10 ()   Port: 80    Service: title  Banner: Welcome to nginx!
Host: 10.130.10.11 ()   Port: 22    Service: ssh    Banner: SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5\x0d\x0a\x00\x00\x04\x5c\x07\x14\xe6s=A;\xa1\xfb\xe9\x22\xae\xbcz\x86\x87\x18O\x00\x00\x011sntrup761x25519-sha512@openssh.com,
...truncated for brevity...

Nmap形式では、特定のホストのすべてのポートが1行に表示されます。効果はほぼ同じですが、Masscanのgrepable形式は、各システム/ポートの組み合わせが別々の行に表示される点で若干異なります。

また、ポート22と80のバナー情報に注目してください。Masscanは--bannersオプションを使用すると、この情報を保存します。Masscanにはバージョン情報を抽出する機能が含まれていないため、これを手動で行う必要があります。

次に、grepを使用して、環境内のポート53でリスニングしているすべてのDNSサービスを見つけます。

コマンド

grep -w 53/open /tmp/masscan_10.130.10.0_24_full.gnmap

想定される結果

sec560@560vm:~$ grep -w 53/open /tmp/masscan_10.130.10.0_24_full.gnmap
Timestamp: 1727151766   Host: 10.130.10.4 ()    Ports: 53/open/tcp//domain//

ポート53でリスニングしている単一のDNSサーバーがあることがすぐにわかります。このサービスにはバナーがないことに注意してください。これは、DNSがクライアントがリクエストを送信するまで応答を送信しないためです。

次に、ポート445でリスニングしているホストを探して、Windowsシステムと思われるものをすばやく検索します。

コマンド

grep -w 445/open /tmp/masscan_10.130.10.0_24_full.gnmap

想定される結果

sec560@560vm:~$ grep -w 445/open /tmp/masscan_10.130.10.0_24_full.gnmap
Timestamp: 1727151580   Host: 10.130.10.21 ()   Ports: 445/open/tcp//microsoft-ds//
Timestamp: 1727151634   Host: 10.130.10.7 ()    Ports: 445/open/tcp//microsoft-ds//
Timestamp: 1727151644   Host: 10.130.10.25 ()   Ports: 445/open/tcp//microsoft-ds//
Timestamp: 1727151649   Host: 10.130.10.23 ()   Ports: 445/open/tcp//microsoft-ds//
Timestamp: 1727151680   Host: 10.130.10.5 ()    Ports: 445/open/tcp//microsoft-ds//
Timestamp: 1727151688   Host: 10.130.10.4 ()    Ports: 445/open/tcp//microsoft-ds//
Timestamp: 1727151777   Host: 10.130.10.44 ()   Ports: 445/open/tcp//microsoft-ds//

ポート445が開いているホストの数を数えましょう:

コマンド

grep -w 445/open /tmp/masscan_10.130.10.0_24_full.gnmap | wc -l

想定される結果

sec560@560vm:~$ grep -w 445/open /tmp/masscan_10.130.10.0_24_full.gnmap | wc -l
7

ポート445でリスニングしており、アクセス可能なシステムが7つあることがわかります。おそらくWindowsシステムです。

5:JSON形式

バイナリ形式からJSON形式(-oJを使用)を抽出し、ファイルをfull.jsonとして保存します。

コマンド

masscan --readscan ~/labs/masscan_10.130.10.0_24_full.bin -oJ /tmp/masscan_10.130.10.0_24_full.json

それでは、JSONファイルの最初の数行を見てみましょう。

コマンド

head /tmp/masscan_10.130.10.0_24_full.json

想定される結果

sec560@560vm:~$ head /tmp/masscan_10.130.10.0_24_full.json
[
{   "ip": "10.130.10.11",   "timestamp": "1727151519", "ports": [ {"port": 80, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 63} ] }
,
{   "ip": "10.130.10.6",   "timestamp": "1727151523", "ports": [ {"port": 80, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 127} ] }
,
{   "ip": "10.130.10.11",   "timestamp": "1727151523", "ports": [ {"port": 80, "proto": "tcp", "service": {"name": "http.server", "banner": "nginx/1.24.0 (Ubuntu)"} } ] }
,
{   "ip": "10.130.10.11",   "timestamp": "1727151523", "ports": [ {"port": 80, "proto": "tcp", "service": {"name": "title", "banner": "Welcome to nginx!"} } ] }
,
{   "ip": "10.130.10.11",   "timestamp": "1727151523", "ports": [ {"port": 80, "proto": "tcp", "service": {"name": "http", "banner": "HTTP/1.1 200 OK\u000d\u000aServer: nginx/1.24.0 (Ubuntu)\u000d\u000aDate: Tue, 24 Sep 2024 04:18:42 GMT\u000d\u000aContent-Type: text/html\u000d\u000aContent-Length: 615\u000d\u000aLast-Modified: Wed, 11 Sep 2024 23:16:45 GMT\u000d\u000aConnection: close\u000d\u000aETag: \u002266e224dd-267\u0022\u000d\u000aAccept-Ranges: bytes\u000d\u000a\u000d"} } ] }

XML形式と同様に、これは人間が読むためのものではありません。これは、他のツールによって解析され、使用されるように設計されています。JSON形式にもバナー情報が含まれていることに注意してください。

別のツールでJSONを解析したいですか?

興味があれば、jqを使用してJSON出力を解析することもできます。たとえば、ポート445が開いているすべてのIPアドレスをリストするには:

jq -r '.[] | select(.ports[] | select(.port == 445 and .status == "open")) | .ip' /tmp/masscan_10.130.10.0_24_full.json

このコマンドは、ポート445が開いているすべてのIPアドレスをリストします。

jq構文の学習は強力ですが、正規表現や新しいプログラミング言語を学ぶのと似ています。ただし、人生のどこかの時点で役立つかもしれません。

6:List形式

バイナリ形式からList形式(-oLを使用)を抽出し、出力をfull.txtとして保存します。

コマンド

masscan --readscan ~/labs/masscan_10.130.10.0_24_full.bin -oL /tmp/masscan_10.130.10.0_24_full.txt

想定される結果

sec560@560vm:~$ masscan --readscan ~/labs/masscan_10.130.10.0_24_full.bin -oL /tmp/masscan_10.130.10.0_24_full.txt
[+] --readscan /home/sec560/labs/masscan_10.130.10.0_24_full.bin

それでは、新しく作成されたファイルの内容を表示しましょう。

コマンド

head -n 15 /tmp/masscan_10.130.10.0_24_full.txt

想定される結果

sec560@560vm:~$ head -n 15 /tmp/masscan_10.130.10.0_24_full.txt
#masscan
open tcp 80 10.130.10.11 1727151519
open tcp 80 10.130.10.6 1727151523
banner tcp 80 10.130.10.11 1727151523 http.server nginx/1.24.0 (Ubuntu)
banner tcp 80 10.130.10.11 1727151523 title Welcome to nginx!
banner tcp 80 10.130.10.11 1727151523 http HTTP/1.1 200 OK\x0d\x0aServer: nginx/1.24.0 (Ubuntu)\x0d\x0aDate: Tue, 24 Sep 2024 04:18:42 GMT\x0d\x0aContent-Type: text/html\x0d\x0aContent-Length: 615\x0d\x0aLast-Modified: Wed, 11 Sep 2024 23:16:45 GMT\x0d\x0aConnection: close\x0d\x0aETag: \x2266e224dd-267\x22\x0d\x0aAccept-Ranges: bytes\x0d\x0a\x0d
open tcp 3389 10.130.10.21 1727151524
banner tcp 80 10.130.10.6 1727151526 http.server Microsoft-IIS/10.0
banner tcp 80 10.130.10.6 1727151526 title IIS Windows Server
banner tcp 80 10.130.10.6 1727151526 http HTTP/1.1 200 OK\x0d\x0aContent-Type: text/html\x0d\x0aLast-Modified: Wed, 11 Sep 2024 23:28:42 GMT\x0d\x0aAccept-Ranges: bytes\x0d\x0aETag: \x2282b3d57a24db1:0\x22\x0d\x0aServer: Microsoft-IIS/10.0\x0d\x0aDate: Tue, 24 Sep 2024 04:18:45 GMT\x0d\x0aConnection: close\x0d\x0aContent-Length: 703\x0d\x0a\x0d
open tcp 3389 10.130.10.5 1727151531
open tcp 135 10.130.10.7 1727151534
open tcp 8172 10.130.10.25 1727151536
open tcp 5985 10.130.10.21 1727151539
open tcp 5985 10.130.10.23 1727151539

これははるかに読みやすい形式です。列は次のとおりです:

  • type:openまたはbanner
  • protocol:常にtcp
  • port:この項目のポート番号
  • IP address:項目のアドレス
  • timestamp:エントリのエポック時間
  • extra:バナー行の場合、プロトコル(例ではhttp)とバナーを表示

grepを使用してtcp 22を検索し、ポート22の結果を確認します。

コマンド

grep -w 'tcp 22' /tmp/masscan_10.130.10.0_24_full.txt

想定される結果

sec560@560vm:~$ grep -w 'tcp 22' /tmp/masscan_10.130.10.0_24_full.txt
open tcp 22 10.130.10.22 1727151568
banner tcp 22 10.130.10.22 1727151599 ssh SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5\x0d\x0a\x00\x00\x04\x5c\x07\x14(\x82\x18\xf5\xbc\xe4\x9am\xea\xe2s\x00;\xa9\x03 \x00\x00\x011sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org[...trimmed...]

ここでは、10.130.10.22に開いているSSHサーバーとそれに関連するバナーが表示されています。

再度grepを使用して、ポート25(SMTP)でリスニングしているシステムを確認します。

コマンド

grep -w 'tcp 25' /tmp/masscan_10.130.10.0_24_full.txt

想定される結果

sec560@560vm:~$ grep -w 'tcp 25' /tmp/masscan_10.130.10.0_24_full.txt
open tcp 25 10.130.10.25 1727151674
banner tcp 25 10.130.10.25 1727151706 ssl TLS/1.2 cipher:0xc030, mail01, mail01, mail01.hiboxy.com
banner tcp 25 10.130.10.25 1727151706 X509 MIIDBzCCAe+gAwIBAgIQODDHsNbjBZNBr4Q8jkb1izANBgkqhkiG9w0BAQUFADARMQ8wDQYDVQQDEwZtYWlsMDEwHhcNMjQwOTExMjM1NTUyWhcNMjkwOTExMjM1NTUyWjARMQ8wDQYDVQQDEwZtYWlsMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDF/T7gFVULRoivsyQQQjJIdbLydrPKEKdlaoA8akwan4LDX8hT+OoISu19i0/Khdn8Xy6DUZSY3dGeMZPBO149CNeyiSXQVOr38BDPBL2mxJhdBjf3BKFe2H0CspBdo7vCDkLnVoKCYahUdpgkO5kL8m51g7nTH5L117L48nX2NJg7W5kTcFp6fBfCdAKBZk79f+8udN4gKCVJf+YcUIeyKpezziGdbQXowAGI5KhXM21iwbKMrDVW/Bw8cQlgNgtq7/gBG4xVQmIc57msgbMozZiIEUmNjbEzLmOlEz1La/AUWb4QeBVW3m/Py4UPgJ3OuRFyC6nwKEKNxb4cjqARAgMBAAGjWzBZMA4GA1UdDwEB/wQEAwIFoDAkBgNVHREEHTAbggZtYWlsMDGCEW1haWwwMS5oaWJveHkuY29tMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEFBQADggEBAAY9K0ea6ExbNZdkc6VavH0U1VnudcdGpTSc6v+K+rWiUC3W/yE96/zWMbPoBoZcdFUA269H9DZK4z0yTQL9queIY7I2XuldS3vPRuiTLlo5V93wM5YgWWmfmpFdX4gcbqi9catyzmuMIGJIYjguPUfSSmBeRU/7hb9J5bplJ3eoKYc+4msRrh6gvQNYvm0CdaQ9wnpHRbYRKc5KsLjYGJgaMf700lqOyRjMLARw1m8pJnK/z42h2zjLue2Sn1KCFNscl8m0NTu7BUfwYWInZuE6bZxlKubSNCKNk7fXjhUkXdOHH7/TIycg02bWKXGK53froqvkJiWOPULI6h1ur0g=
banner tcp 25 10.130.10.25 1727151706 smtp 220 mail01.hiboxy.com Microsoft ESMTP MAIL Service ready at Tue, 24 Sep 2024 04:21:14 +0000\x0a250-mail01.hiboxy.com Hello [10.254.252.3]\x0a250-SIZE 37748736\x0a250-PIPELINING\x0a250-DSN\x0a250-ENHANCEDSTATUSCODES\x0a250-STARTTLS\x0a250-X-ANONYMOUSTLS\x0a250-AUTH NTLM\x0a250-X-EXPS GSSAPI NTLM\x0a250-8BITMIME\x0a250-BINARYMIME\x0a250-CHUNKING\x0a250-SMTPUTF8\x0a250 XRDST\x0a220 2.0.0 SMTP server ready

10.130.10.25システムのSMTPバナーは、ホスト名がmail01.hiboxy.comであることも示しています。

7:稼働ホストとポートの抽出

Greppable(.gnmap)出力の一部を見てみましょう。

想定される結果

Timestamp: 1727151519   Host: 10.130.10.11 ()   Ports: 80/open/tcp//http//
Timestamp: 1727151523   Host: 10.130.10.6 ()    Ports: 80/open/tcp//http//
Host: 10.130.10.11 ()   Port: 80    Service: http.server    Banner: nginx/1.24.0 (Ubuntu)

各ポートのステータスは出力で1行になり、バナー情報は別の行にあることに注意してください。

grepを使用して、/open/tcp/を含むすべての行を検索しましょう。これを行うには、grepコマンドを使用できます:

コマンド

grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap

想定される結果

sec560@560vm:~$ grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap
Timestamp: 1727151519   Host: 10.130.10.11 ()   Ports: 80/open/tcp//http//
Timestamp: 1727151523   Host: 10.130.10.6 ()    Ports: 80/open/tcp//http//
Timestamp: 1727151524   Host: 10.130.10.21 ()   Ports: 3389/open/tcp//ms-wbt-server//
Timestamp: 1727151531   Host: 10.130.10.5 ()    Ports: 3389/open/tcp//ms-wbt-server//
...output truncated for brevity...

ポートが必要な場合は、awkコマンドを使用できます。これは、複数の連続する区切り文字を処理できるという点でcutよりも有利です(masscanは列を揃えるために必要に応じてスペースを追加するため)。

まず、出力の4番目のフィールドである稼働ホストを取得します:

コマンド

grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $4}' | sort -uV

想定される結果

sec560@560vm:~$ grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $4}' | sort -uV
10.130.10.4
10.130.10.5
10.130.10.6
10.130.10.7
10.130.10.10
10.130.10.11
10.130.10.21
10.130.10.22
10.130.10.23
10.130.10.25
10.130.10.33
10.130.10.44
10.130.10.45

sortオプション:

  • u:一意の値のみを返す
  • V:バージョン番号の自然なソート(IPアドレスでもうまく機能します!)

稼働ホストを/tmp/10.130.10.0_24_alivehosts.txtのような名前のファイルに、nmapなどの他のツールが使用できる形式で保存することができます。これは演習として残しておきます。

次に、組織内のすべてのリスニングポートのリストを取得します。ポートは7番目のフィールドに含まれているので、それから始めましょう:

コマンド

grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $7}' | sort -uV | head

想定される結果

sec560@560vm:~$ grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $7}' | sort -uV | head
22/open/tcp//ssh//
23/open/tcp//telnet//
25/open/tcp//smtp//
53/open/tcp//domain//
80/open/tcp//http//
135/open/tcp//epmap//
139/open/tcp//netbios-ssn//
389/open/tcp//ldap//
443/open/tcp//https//
444/open/tcp//snpp//

次に、cutを使用して、これらの一意のポート番号のみを取得しましょう:

コマンド

grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $7}' | cut -d '/' -f 1 | sort -un

想定される結果

sec560@560vm:~$ grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $7}' | cut -d '/' -f 1 | sort -un
22
23
25
53
80
135
139
389
443
444
445
464
465
475
476
477
587
[...truncated for brevity...]

次に、nmapなどの他のツールが使用できる形式で、開いているポートをopen_ports.txtという名前のファイルに保存しましょう。

コマンド

grep '/open/tcp' /tmp/masscan_10.130.10.0_24_full.gnmap | awk '{print $7}' | cut -d '/' -f 1 | sort -un | tr '\n' ',' | sed 's/,$//' > /tmp/10.130.10.0_24_openports.txt

このコマンドからの出力はありません。

稼働しているIPアドレスとポートを特定することで、Nmapを含む他のツールにより良いターゲットリストを提供し、スキャンを高速化できます。

まとめ

このラボでは、Masscanがポートスキャンを実行する高速な方法であることを確認しました。スキャンが速すぎてターゲットインフラストラクチャをダウンさせないように注意する必要があります。Masscanは1つのこと、つまりポートスキャンに優れています。

後のラボでは、Nmapのより高度な機能と、NmapのOSフィンガープリンティングおよびバージョンスキャンがターゲットマシンで実行されているオペレーティングシステムのタイプとソフトウェアのバージョンに関する情報をどのように収集できるかを見ていきます。この情報は、ペネトレーションテスターが攻撃に焦点を当て、特定のツールとエクスプロイトを使用してターゲット環境にアクセスするために非常に役立ちます。

さらに、EyeWitnessを使用して、組織内で利用可能なWebサイトをすばやく確認します。これにより、ペネトレーションテスターは興味深いWebサイトをすばやく特定できます。