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サイトをすばやく特定できます。