Skip to content

Lab 1.5: Nmap -O -sV, EyeWitness, Netcat and NSE

オンライン演習

接続性: この演習では、クラス内ネットワーク(560A VPN経由)に接続している必要があります

目的

  • Nmapを使用してターゲットマシンのオペレーティングシステムフィンガープリンティングを実行する
  • Nmapのバージョンスキャン機能を使用して、ターゲットが使用している特定のソフトウェアバージョンとプロトコルバージョンを特定する
  • Nmap Scripting Engine (NSE) スクリプトのカテゴリを分析する
  • 最も有用なNSEスクリプトのいくつかを実行する
  • ターゲットのWindowsマシンからSMB情報を収集する
  • 古く脆弱なSSHプロトコルバージョン1を使用するSSHサーバーを見つけるためにターゲット環境をスキャンする
  • NSEスクリプトをバージョンスキャンありとなしで実行した場合のNmapの動作を比較する

Walkthrough Video

ラボのセットアップ

使用するVM:

  • Linux
  • Windows 11

Linux VMから10.130.10.10にpingできる必要があります:

コマンド

ping -c 4 10.130.10.10

想定される結果

sec560@560vm:~$ ping -c 4 10.130.10.10
PING 10.130.10.10 (10.130.10.10) 56(84) bytes of data.
64 bytes from 10.130.10.10: icmp_seq=1 ttl=63 time=79.4 ms
64 bytes from 10.130.10.10: icmp_seq=2 ttl=63 time=77.1 ms
64 bytes from 10.130.10.10: icmp_seq=3 ttl=63 time=78.4 ms
64 bytes from 10.130.10.10: icmp_seq=4 ttl=63 time=81.7 ms

--- 10.130.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 77.100/79.161/81.744/1.693 ms

ラボ – 詳細手順

1: 初期スキャン

このラボでは、まずNmapのOSフィンガープリンティング機能を実行することから始めます。

ターミナルを開き、以下を実行するようにNmapを呼び出します:

  • 名前解決をしない(代わりにIPアドレスを表示する)
  • OSフィンガープリンティングを使用する
  • TCP接続スキャンを実行する(各オープンポートに対して3ウェイハンドシェイク)
  • 10.130.10.21と.22システムをスキャンする

このNmapコマンドラインを自分で作成してみてください。その後、以下を見て、推奨されるNmapコマンドで計画した使用法を確認してください。

Nmapの実行中は、時々スペースバーを押してNmapが何をしているか確認してください。

コマンド

sudo nmap -n -sT -F -O --open 10.130.10.21-22

-nオプションは、Nmapに名前の代わりにIPアドレス番号を使用させます。-O(これは文字のOであり、ゼロではありません)は、第2世代の機能を使用するOSフィンガープリンティングを実行するようNmapに指示します。-sTは、3ウェイハンドシェイクを完了するTCPスキャン(接続スキャン)を実行するようにNmapを構成します。

想定される結果

sec560@560vm:~$ sudo nmap -n -sT -F -O --open 10.130.10.21-22
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-20 23:15 UTC
Nmap scan report for 10.130.10.21
Host is up (0.19s latency).
Not shown: 96 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3389/tcp open  ms-wbt-server
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
No OS matches for host

Nmap scan report for 10.130.10.22
Host is up (0.19s latency).
Not shown: 94 closed tcp ports (conn-refused), 4 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE
22/tcp   open  ssh
9100/tcp open  jetdirect
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
...trimmed for brevity...

上記の出力でOS一致がないことに注意してください。10.130.10.22は実際にはLinuxサーバーです!Windowsシステムは最も一般的にTCPポート445(SMB)と3389(Terminal Services)でリッスンしています。

残念ながら、-Oオプションはかつてほど効果的ではなくなりました。最新のシステムでは、OS検出は最小限からゼロの価値しか追加せず、余分な時間がかかり、混乱を招く可能性があります。著者の意見では、このオプションを使用しないことが最適であることが多いです。

ラボを完了した後に時間がある場合は、他のホストでOS識別(-O)を実行すると、おそらく同様の結果が表示されます。

2: nmap-service-probesファイル

バージョンスキャンの場合、Nmapはサービスの分析を、Nmapディレクトリにあるnmap-service-probesというファイルの内容に基づいて行います。そのファイルでは、"Probe"で始まる行はターゲットサービスに送信するメッセージを示し、"match"で始まる行は特定のサービスを識別する際に探すレスポンステキストを示します。

ファイルを開いて、probeとmatchの行を見てみましょう:

コマンド

less /usr/share/nmap/nmap-service-probes

ファイルをスクロールしてmatchパターンを見てみましょう。次に、Apacheの一致の1つを見てみましょう。対話型のlessセッションで、以下を入力してApacheを検索(/)します:

コマンド

/Apache

Abstract

match ftp m|^220 ([-\w_.]+) FTP server ready \(mod_ftpd/([\d.]+)\)\r\n| p/Apache mod_ftpd/ v/$2/ h/$1/ cpe:/a:apache:http_server/

Nmapがこの特定のサービスを識別するために使用する文字列Apache mod_ftpdやその他の情報に注目してください。

qを押してファイルを閉じ、次にNmapをバージョンスキャンに使用します。

3: .21と.22のバージョンスキャン

まず、OSフィンガープリンティングやバージョン検出なしで、10.130.10.21と.22の簡単なスキャンを実行しましょう。

コマンド

sudo nmap -n -sT -F --open 10.130.10.21-22

想定される結果

sec560@560vm:~$ sudo nmap -n -sT -F --open 10.130.10.21-22
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-20 23:17 UTC
Nmap scan report for 10.130.10.21
Host is up (0.13s latency).
Not shown: 96 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3389/tcp open  ms-wbt-server

Nmap scan report for 10.130.10.22
Host is up (0.16s latency).
Not shown: 97 closed tcp ports (conn-refused), 1 filtered tcp port (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE
22/tcp   open  ssh
9100/tcp open  jetdirect

Nmap done: 2 IP addresses (2 hosts up) scanned in 4.06 seconds

Nmapはポート番号に基づいてポートを識別します。SYN、SYN-ACK、ACKの後、Nmapは接続を切断することを覚えておいてください。システムから他のデータを処理しません。

次に、-sVを使用してこれら2つのホストのNmapバージョンスキャンを実行しましょう。

コマンド

sudo nmap -n -sT -F --open 10.130.10.21-22 -sV

想定される結果

sec560@560vm:~$ sudo nmap -n -sT -F --open 10.130.10.21-22 -sV
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:21 UTC
Nmap scan report for 10.130.10.21
Host is up (0.080s latency).
Not shown: 99 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE       VERSION
3389/tcp open  ms-wbt-server Microsoft Terminal Services
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Nmap scan report for 10.130.10.22
Host is up (0.079s latency).
Not shown: 98 closed tcp ports (conn-refused)
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 9.6p1 Ubuntu 3ubuntu13.4 (Ubuntu Linux; protocol 2.0)
9100/tcp open  jetdirect?
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 2 IP addresses (2 hosts up) scanned in 9.43 seconds

バージョンスキャンなしでスキャンを実行したときに発見された結果と比較してください。ターゲットサービスに関するより詳細な情報が得られることに注意してください。また、-sVがOS検出よりも優れたOS検出を提供することにも注意してください!

4: .25のバージョンスキャン

10.130.10.25のポート25に焦点を当てて、基本的なNmapスキャンを実行しましょう。

コマンド

sudo nmap -n -sT -p 25 10.130.10.25

想定される結果

sec560@560vm:~$ sudo nmap -n -sT -p 25 10.130.10.25
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:22 UTC
Nmap scan report for 10.130.10.25
Host is up (0.077s latency).

PORT   STATE SERVICE
25/tcp open  smtp

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

同じコマンドをもう一度実行しますが、今度は-sVを使用します。

コマンド

sudo nmap -n -sT -p 25 10.130.10.25 -sV

想定される結果

sec560@560vm:~$ sudo nmap -n -sT -p 25 10.130.10.25 -sV
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:22 UTC
Nmap scan report for 10.130.10.25
Host is up (0.078s latency).

PORT   STATE SERVICE VERSION
25/tcp open  smtp    Microsoft Exchange smtpd
Service Info: Host: mail01.hiboxy.com; OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds

2つのコマンドの出力を比較してください。

この特定のポートの検出の違いに注意してください。-sVオプションなしでは、Nmapはnmap-servicesファイルの名前を使用します。-sVを使用すると、Nmapはサービスをプローブし、(可能な場合)サービス情報を特定します。また、OSを正しく推測し、ホスト名(mail01.hiboxy.com)を抽出します。

5: Netcatでサービスを調査する

バージョンスキャンがホスト名を抽出したことがわかりました。どのようにしてそれを行ったのでしょうか?何が起こったかを確認するために、Netcatでシステムを調査しましょう。ncを使用して、ポート25でホストに接続します。

コマンドは次のようになります: nc -nv 10.130.10.25 25。オプションは次のとおりです

  • n: 名前を解決しない
  • v: 詳細表示(接続が発生したときに表示)
  • 10.130.10.25: ターゲットホスト
  • 25: ターゲットポート

コマンド

nc -nv 10.130.10.25 25

想定される結果

sec560@560vm:~$ nc -nv 10.130.10.25 25
(UNKNOWN) [10.130.10.25] 25 (smtp) open
220 mail01.hiboxy.com Microsoft ESMTP MAIL Service ready at Wed, 14 Aug 2024 19:22:43 +0000

CTRL+Cを押して接続を終了します。

サーバーからの応答に注目してください。これは、接続時にサーバーから即座に送信されるバナーまたは情報として知られているものです。文字列Microsoft ESMTP MAIL Serviceは、これがMicrosoft Exchangeサーバーであることを識別します。その左側にはホスト名mail01.hiboxy.comがあります。

nmap-service-probesファイルでMicrosoft ESMTP MAIL Service ready atを見返すと、Nmapによって適用されるマッチルールが表示されます。

コマンド

grep 'Microsoft ESMTP MAIL Service ready' /usr/share/nmap/nmap-service-probes

想定される結果

sec560@560vm:~$ grep 'Microsoft ESMTP MAIL Service ready' /usr/share/nmap/nmap-service-probes
match smtp m|^220 ([-\w_.]+) Microsoft ESMTP MAIL Service ready at| p/Microsoft Exchange smtpd/ o/Windows/ h/$1/ cpe:/a:microsoft:exchange_server/ cpe:/o:microsoft:windows/a

マッチでは、正規表現[-\w_.]+がホスト名を抽出するために使用されます。行の最後には、cpe:/o:microsoft:windows/aがホストをWindowsシステムとして識別するために使用されます。

6: .11のバージョンスキャン

次に、ポート80をターゲットにして10.130.10.11のバージョンスキャンを実行します。

コマンド

sudo nmap -n -sV -p 80 10.130.10.11

想定される結果

sec560@560vm:~$ sudo nmap -n -sV -p 80 10.130.10.11
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:23 UTC
Nmap scan report for 10.130.10.11
Host is up (0.076s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.24.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.24 seconds

バージョン番号が得られ、ホストがLinuxとして識別されていることに注意してください。このシステムをNetcatで見てみましょう。

コマンド

nc -nv 10.130.10.11 80

想定される結果

sec560@560vm:~$ nc -nv 10.130.10.11 80
(UNKNOWN) [10.130.10.11] 80 (http) open

このコマンドはハングします。Webサーバーは、クライアント(ブラウザ)がリクエストを送信するまでバナー情報を送信しません。GET / HTTP/1.0と入力してEnterキーを*2回*押してリクエストを送信しましょう。

コマンド

GET / HTTP/1.0

想定される結果

sec560@560vm:~$ nc -nv 10.130.10.11 80
(UNKNOWN) [10.130.10.11] 80 (http) open
GET / HTTP/1.0

HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Date: Wed, 14 Aug 2024 19:24:03 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Aug 2024 08:03:09 GMT
Connection: close
ETag: "66bb133d-267"
Accept-Ranges: bytes

<!DOCTYPE html>
<html>
[...trimmed for brevity...]

接続が自動的に切断されない場合は、CTRL+Cを押してNetcatを終了します。

nginx/1.24.0 (Ubuntu)のServerヘッダーに注目してください。この場合、Nmapのバージョン検出はシステムをプローブしてバージョン情報を取得します。

nmap-service-probesファイルをもう一度見て、一致を見つけましょう。

コマンド

grep 'Server: nginx/' /usr/share/nmap/nmap-service-probes

想定される結果

sec560@560vm:~$ grep 'Server: nginx/' /usr/share/nmap/nmap-service-probes
match ssl/http m|^HTTP/1.1 400 Bad Request\r\n.*?Server: nginx/([\d.]+)[^\r\n]*?\r\n.*<title>400 The plain HTTP request was sent to HTTPS port</title>|s p/nginx/ v/$1/ cpe:/a:igor_sysoev:nginx:$1/
match http m|^HTTP/1\.[01] \d\d\d.*\r\nServer: nginx/([\d.]+)\r\n|s p/nginx/ v/$1/ cpe:/a:igor_sysoev:nginx:$1/
match http m|^HTTP/1\.[01] \d\d\d.*\r\nServer: nginx/([\d.]+) \(Ubuntu\)\r\n|s p/nginx/ v/$1/ i/Ubuntu/ o/Linux/ cpe:/a:igor_sysoev:nginx:$1/ cpe:/o:canonical:ubuntu_linux/ cpe:/o:linux:linux_kernel/a
match http m|^HTTP/1\.[01] \d\d\d.*\r\nServer: nginx/([\d.]+) \+ ([^\r\n]*)\r\n|s p/nginx/ v/$1/ i/$2/ cpe:/a:igor_sysoev:nginx:$

正規表現[\d.]+はバージョン番号(1.24.0)を抽出します。テキスト(Ubuntu)は、Nmapがシステムをさらに Ubuntu Linuxシステムとして識別するのに役立ちます。

7: script.dbファイル

次に、Nmap Scripting Engineの機能を見ていきます。NSE用に定義されたすべてのスクリプトのインベントリを含むファイルを開くことから始めます。headを使用してファイルの最初の10行を見てみましょう。

コマンド

head /usr/share/nmap/scripts/script.db

想定される結果

sec560@560vm:~$ head /usr/share/nmap/scripts/script.db
Entry { filename = "acarsd-info.nse", categories = { "discovery", "safe", } }
Entry { filename = "address-info.nse", categories = { "default", "safe", } }
Entry { filename = "afp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "afp-ls.nse", categories = { "discovery", "safe", } }
Entry { filename = "afp-path-vuln.nse", categories = { "exploit", "intrusive", "vuln", } }
Entry { filename = "afp-serverinfo.nse", categories = { "default", "discovery", "safe", } }
Entry { filename = "afp-showmount.nse", categories = { "discovery", "safe", } }
Entry { filename = "ajp-auth.nse", categories = { "auth", "default", "safe", } }
Entry { filename = "ajp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ajp-headers.nse", categories = { "discovery", "safe", } }

このscript.dbファイルは単純な形式で、基本的に"safe"、"intrusive"、"vulnerability"などのスクリプトカテゴリを、.nseで終わる特定のスクリプトファイルにマッピングしています。一部のスクリプトは、discoveryカテゴリとintrusiveカテゴリにあるdns-zone-transfer.nseなど、複数のカテゴリに含まれていることに注意してください。

wc -lでスクリプトの数を数えてみましょう。

Commands

wc -l /usr/share/nmap/scripts/script.db

想定される結果

sec560@560vm:~$ wc -l /usr/share/nmap/scripts/script.db
605 /usr/share/nmap/scripts/script.db

script.dbファイルを-l(小文字のLは行数を意味します)オプション付きのwc(word count)コマンドに送信して、いくつかのカテゴリのスクリプトの数を数えてみましょう。

grepでscript.dbファイルを見てみましょう。以下の各カテゴリのスクリプト数を識別します:

  • safe
  • discovery
  • intrusive

Commands

grep safe /usr/share/nmap/scripts/script.db | wc -l
grep discovery /usr/share/nmap/scripts/script.db | wc -l
grep intrusive /usr/share/nmap/scripts/script.db | wc -l

想定される結果

sec560@560vm:~$ grep safe /usr/share/nmap/scripts/script.db | wc -l
348
sec560@560vm:~$ grep discovery /usr/share/nmap/scripts/script.db | wc -l
310
sec560@560vm:~$ grep intrusive /usr/share/nmap/scripts/script.db | wc -l
213

ご覧のとおり、script.dbファイルにはsafeという単語を含む行が348行、discoveryを含む行が310行、intrusiveを含む行が213行あります。これらは各カテゴリのスクリプト数の適切な近似値です。私たちのgrepコマンドは完璧ではなく、"category"(引用符付き)を探していないため、正確ではありませんが、速度のためにはこれでうまく機能します。正確な違いを見たい場合は、これら2つのコマンドの出力を比較してください。

8: SMBスクリプト

次に、Nmapに含まれているServer Message Block(SMB)スクリプトを見てみましょう。その多くはRon Bowesによって書かれました。まず、このバージョンのNmapに含まれているすべてのSMB NSEスクリプトの名前を見てみましょう:

コマンド

ls /usr/share/nmap/scripts/smb*.nse

想定される結果

sec560@560vm:~$ ls /usr/share/nmap/scripts/smb*.nse
/usr/share/nmap/scripts/smb2-capabilities.nse
/usr/share/nmap/scripts/smb2-security-mode.nse
/usr/share/nmap/scripts/smb2-time.nse
/usr/share/nmap/scripts/smb2-vuln-uptime.nse
/usr/share/nmap/scripts/smb-brute.nse
/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse
/usr/share/nmap/scripts/smb-enum-domains.nse
/usr/share/nmap/scripts/smb-enum-groups.nse
/usr/share/nmap/scripts/smb-enum-processes.nse
/usr/share/nmap/scripts/smb-enum-services.nse
/usr/share/nmap/scripts/smb-enum-sessions.nse
/usr/share/nmap/scripts/smb-enum-shares.nse
/usr/share/nmap/scripts/smb-enum-users.nse
/usr/share/nmap/scripts/smb-flood.nse
/usr/share/nmap/scripts/smb-ls.nse
... truncated for brevity ...

ここでは、ブルートフォースパスワード推測を実行できるスクリプト(smb-brute.nse)、一般的な脆弱性をチェックするスクリプト(smb-vuln-*)、およびターゲットから情報を略奪するスクリプト(smb-enum-domains、groups、processesなど)を確認できます。

さらに、smb-psexecスクリプトを使用すると、管理者グループのユーザー名とパスワード、および設定ファイルで実行したい1つ以上のコマンドを提供でき、このスクリプトはSMBを使用して通信していることを発見したターゲットにコマンドを実行させようとします。これは、Microsoft Sysinternalsのpsexecコマンドと同様の方法で動作します。Nmapオプションは次のようになります:

Command Line Option

--script-args=smbuser=ADMIN_USER,smbpass=ADMIN_PASSWORD,config=CONFIG_FILE_NAME

9: smb2-security-modeスクリプト

smb2-security-mode.nseスクリプトを見てみましょう。このスクリプトは、「すべてのサポートされているダイアレクトのSMBv2サーバーのメッセージ署名設定を判定します。」このコースの後半でこの設定の影響について説明しますが、より安全なオプションはSMB署名を要求することです。SMB署名を要求することは、SMBリレー攻撃を防ぐのに役立ちます。

環境内のターゲットのこの設定を見てみましょう。

コマンド

sudo nmap -n -PS445 -p 445 --script=smb2-security-mode --open 10.130.10.0/24

想定される結果

sec560@560vm:~$ sudo nmap -n -PS445 -p 445 --script=smb2-security-mode --open 10.130.10.0/24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:30 UTC
Nmap scan report for 10.130.10.4
Host is up (0.082s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

Nmap scan report for 10.130.10.5
Host is up (0.080s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
... truncated for brevity ...

.4システムは、署名を要求するより安全な設定になっています。.5システムは署名を要求しません。これは、ターゲットに提供するレポートに記載する所見となります。

10: smb-protocolsスクリプト

過去数年間、SMBv1プロトコルに対する多数の攻撃が見られました。最も注目すべきは、2017年のEternalBlueエクスプロイトでした。SMBv1プロトコルはネットワーク全体で無効にする必要があります。このスクリプトを使用して、このプロトコルを実行しているシステムがあるかどうかを確認しましょう。速度のために、.4と.44システムだけを見てみましょう。

コマンド

sudo nmap -n -PS445 -p 445 --open --script=smb-protocols 10.130.10.4,44

想定される結果

sec560@560vm:~$ sudo nmap -n -PS445 -p 445 --open --script=smb-protocols 10.130.10.4,44
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:31 UTC
Nmap scan report for 10.130.10.4
Host is up (0.081s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-protocols: 
|   dialects: 
|     2:0:2
|     2:1:0
|     3:0:0
|     3:0:2
|_    3:1:1

Nmap scan report for 10.130.10.44
Host is up (0.077s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-protocols: 
|   dialects: 
|     NT LM 0.12 (SMBv1) [dangerous, but default]
|     2:0:2
|     2:1:0
|     3:0:0
|     3:0:2
|_    3:1:1

Nmap done: 2 IP addresses (2 hosts up) scanned in 13.34 seconds

.44システムがSMBv1を有効にしていることに注意してください。これは最終レポートに所見として記載されます。このシステムをさらに詳しく見て、リスクをより多く判定しましょう。

11: smb-os-discoveryスクリプト

前のラボでは、OS検出に関連するいくつかの困難を見ました。バージョンスキャンはより多くの情報を提供しましたが、それでもかなり広範なLinux対Windowsでした。Windowsシステムに関する詳細情報が必要な場合は、smb-os-discovery.nseスクリプトを使用できます。ターゲットネットワーク内のホストに対してこれを実行し、結果を見てみましょう。このスクリプトはSMBv1でのみ動作するため、今のところ.44システムだけを見てみましょう。また、システムが稼働していることがわかっているので、-Pnでホスト発見をオフにしましょう。

コマンド

sudo nmap -n -p 445 --open -Pn --script=smb-os-discovery.nse 10.130.10.44

想定される結果

sec560@560vm:~$ sudo nmap -n -p 445 --open -Pn --script=smb-os-discovery.nse 10.130.10.44
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 19:31 UTC
Nmap scan report for 10.130.10.44
Host is up (0.076s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-os-discovery: 
|   OS: Windows Server 2022 Datacenter 20348 (Windows Server 2022 Datacenter 6.3)
|   Computer name: file01
|   NetBIOS computer name: FILE01\x00
|   Domain name: hiboxy.com
|   Forest name: hiboxy.com
|   FQDN: file01.hiboxy.com
|_  System time: 2024-08-14T19:31:55+00:00

Nmap done: 1 IP address (1 host up) scanned in 3.00 seconds

このサーバーがWindow Server 2022 Datacenterエディションを実行していることがわかります。ホスト名はfile01で、ドメインはhiboxy.comです。これは、ペンテストで後で必要になる可能性のある有用な情報です!

12: ssh-auth-methodsスクリプト

ssh-auth-methodsスクリプトは、SSHサーバーで利用可能なログイン方法を識別するために使用されます。理想的には、SSHサーバーは鍵ベースの認証のみを許可し、パスワード認証は無効になっています。範囲内のホストをチェックして、許可されている認証方法を確認できます。

ssh-auth-methodsスクリプトを使用して範囲をターゲットにしてNmapを実行します。.10ホストだけを見てみましょう。

コマンド

sudo nmap -n --open -F --script=ssh-auth-methods 10.130.10.10

想定される結果

sec560@560vm:~$ sudo nmap -n --open -F --script=ssh-auth-methods 10.130.10.10
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-20 23:22 UTC
Nmap scan report for 10.130.10.10
Host is up (0.17s latency).
Not shown: 96 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
| ssh-auth-methods: 
|   Supported authentication methods: 
|     publickey
|_    password
23/tcp   open  telnet
80/tcp   open  http
9100/tcp open  jetdirect

Nmap done: 1 IP address (1 host up) scanned in 1.92 seconds

ポート22で見つかった認証方法に注目してください。

また、NmapがこのホストでTelnetが実行されていると言っていることに注意してください。このTelnetが実行されていることを確認するために簡単に見てみましょう。実行されている場合は、このクリアテキストプロトコルをレポートに文書化する必要があります。レポートに記載する前に、常に所見を確認する必要があります。Netcatを使用してサービスを確認します。

コマンド

nc -nv -w 1 10.130.10.10 23

想定される結果

sec560@560vm:~$ nc -nv 10.130.10.10 23
(UNKNOWN) [10.130.10.10] 23 (telnet) open
SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5

CTRL+Cを押してNetcatを終了します。

ポート23で返送されたバナーに注目してください。SSHであると言っています。以前のNmapスキャンを振り返ると、NmapはこのサービスがTelnetであると言っていました。これは、Nmapがオープンポートを識別する以上にサービスと対話しなかったためです。Nmapは、ポート番号のみに基づいてサービスがTelnetであると仮定しました。

NmapがこのサービスをTelnetとして識別したため、このサービスに対してssh-auth-methodsスクリプトも実行しませんでした。ssh-auth-methodsスクリプトがどのように機能するかを見てみましょう。

13: ssh-auth-methodsスクリプトの調査

ssh-auth-methods.nseスクリプトは、SSHサーバーによって許可されている認証を識別します。理想的には、サーバーは鍵ベースの認証のみを使用し、パスワードは使用しません。

Nmapは、ポート23で実際には非標準ポートで実行されているSSHであることを知らなかったため、ポート23の認証方法をチェックしませんでした。

ssh-auth-methodsスクリプトをもう一度使用して実行しますが、今回はサービス検出(-sV)を行います。

コマンド

sudo nmap -n --open -F --script=ssh-auth-methods 10.130.10.10 -sV

想定される結果

sec560@560vm:~$ sudo nmap -n --open -F --script=ssh-auth-methods 10.130.10.10 -sV
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-20 23:28 UTC
Nmap scan report for 10.130.10.10
Host is up (0.16s latency).
Not shown: 96 closed tcp ports (reset)
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-auth-methods: 
|   Supported authentication methods: 
|     publickey
|_    password
23/tcp   open  ssh        OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-auth-methods: 
|   Supported authentication methods: 
|     publickey
|_    password
80/tcp   open  http       nginx 1.24.0 (Ubuntu)
|_http-server-header: nginx/1.24.0 (Ubuntu)
9100/tcp open  jetdirect?
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.64 seconds

今回は、-sVによるバージョンスキャンのおかげで、Nmapがポート23をSSHとして正しく識別したことがわかります。これにより、スクリプトがトリガーされ、ポート23のSSHの認証方法が表示されます。

では、このラボのこのコンポーネントのポイントは何でしょうか?

バージョンスキャンなしのNmapのスクリプトは、非標準ポートでリッスンしている重要なサービスを見逃す可能性があります。したがって、Nmap内からスクリプトを実行する場合は、スクリプトの呼び出し(-sCまたは--script)と一緒にバージョンスキャン(-sV)を実行することを確認することで、より良いサービスを受けられる可能性があります。

これらは、NSE機能を最大限に活用したいペネトレーションテスターにとって重要な教訓です。

14: EyeWitness

まず、EyeWitnessに入力できるNmapで迅速なスキャンを実行することから始めましょう。これを行うには、出力を保存する必要があります。-oXを使用してXML形式のみを保存することもできますが、-oAを使用してすべてのバージョンを保存する方がよいでしょう。ディスクスペースはあなたの時間よりも安価であり、大規模なスキャンには多くの時間がかかる可能性があることを覚えておいてください。もちろん、このスキャンは比較的迅速に実行されますが、より良いアプローチを実践するのは良いことです。

ホスト検出とポートスキャンのために、ポート80、443、8080をチェックすることから始めましょう。また、*webservers*のベース名を持つファイルにすべての出力形式を保存します。

コマンド

nmap -n --open -PS80,443,8080 -p 80,8080,443 10.130.10.0/24 -oA /tmp/webservers

想定される結果

sec560@560vm:~$ nmap -n --open -PS80,443,8080 -p 80,8080,443 10.130.10.0/24 -oA /tmp/webservers
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-20 23:29 UTC
Nmap scan report for 10.130.10.5
Host is up (0.24s latency).
Not shown: 2 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 10.130.10.6
Host is up (0.24s latency).
Not shown: 2 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 10.130.10.10
Host is up (0.30s latency).
Not shown: 2 closed tcp ports (conn-refused)
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 10.130.10.11
Host is up (0.17s latency).
Not shown: 2 closed tcp ports (conn-refused)
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 10.130.10.25
Host is up (0.22s latency).
Not shown: 1 filtered tcp port (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap done: 256 IP addresses (6 hosts up) scanned in 17.28 seconds

webserversで始まる/tmpディレクトリ内の新しく作成されたファイルを見てみましょう。

コマンド

ls /tmp/webservers*

想定される結果

sec560@560vm:~$ ls /tmp/webservers*
/tmp/webservers.gnmap
/tmp/webservers.nmap
/tmp/webservers.xml

次に、その出力をEyeWitnessに入力しましょう。EyeWitnessを使用してWebサーバー(--web)を見て、webservers.xmlファイルを提供します。

コマンド

/opt/eyewitness/Python/EyeWitness.py --web -x /tmp/webservers.xml

想定される結果

################################################################################
#                                  EyeWitness                                  #
################################################################################
#           FortyNorth Security - https://www.fortynorthsecurity.com           #
################################################################################

Starting Web Requests (6 Hosts)
Attempting to screenshot http://10.130.10.5
Attempting to screenshot http://10.130.10.6
Attempting to screenshot http://10.130.10.10
Attempting to screenshot http://10.130.10.11
Attempting to screenshot http://10.130.10.25
Attempting to screenshot https://10.130.10.25
Finished in 19.0958149433136 seconds

[*] Done! Report written in the /home/sec560/2022-22-22_222222 folder!
Would you like to open the report now? [Y/n]
y

yと入力してEnterキーを押す(または単にEnterキーを押してデフォルトを受け入れる)と、EyeWitnessがFireFoxを開きます。その後、結果をスクロールできます。サーバーソフトウェアとWebサイトのスクリーンショットが表示されることに注意してください。これは、多数のWebサイトを処理する際に非常に便利です。

15: Netcatでファイルを移動する

すでにNetcatを数回使用してサービスを調査しました。Netcatでもっと楽しみましょう!LinuxシステムからWindowsに/etc/passwdを送信します。

Linuxで、Netcatリスナーを実行しますが、今回は/etc/passwdを入力として使用します:

コマンド

nc -nvlp 9999 < /etc/passwd

このコマンドには出力がありません。

次に、Windowsに切り替えて、デスクトップの**Terminal**ショートカットを開き、ポート9999でLinuxホスト(eth0アドレス)に接続します。

コマンド

nc.exe -nv -w 1 LINUX_ETH0_ADDRESS 9999

LINUX_ETH0_ADDRESSを置き換えてください!

LINUX_ETH0_ADDRESSをLinux VMのeth0インターフェースのアドレスに置き換えてください(tun0の10.254.25X.Xのようなアドレスではありません)。

結果は次のようになります:

Netcatでファイルを移動する

上記の例では、ファイルを送信して出力を表示しました。これはテキストファイルには問題ありませんが、バイナリファイルを移動したい場合はどうでしょうか?次に、C:\CourseFiles\capture.pcapをWindowsからLinuxに移動し、表示する代わりに出力を保存します。

ファイル転送を準備します。ポート9999でリッスンし、C:\CourseFiles\capture.pcapファイルをNetcatにリダイレクトします。

Command - Windows

cat C:\CourseFiles\capture.pcap -AsByteStream | nc.exe -nvlp 9999 -w 1
-AsByteStreamについて知りたいですか?

-AsByteStreamオプションは、ファイルがバイナリストリームとして送信されることを保証するために使用されます。これは、capture.pcapのようなバイナリファイルに必要です。そうしないと、Windowsが「親切に」行末を変換したり、UTF-16に変換したりして、ファイルを破損する可能性があります。

次に、Linuxで、ポート9999でWindowsホストに接続し、出力をmy.pcapに保存します。

Command - Linux

nc -nv WINDOWS_ETHERNET0_ADDRESS 9999 > my.pcap

WINDOWS_ETHERNET0_ADDRESSを置き換えてください!

WINDOWS_ETHERNET0_ADDRESSをWindows VMのローカルアドレスに置き換えてください(10.254.25X.Xのようなアドレスではありません)。

接続できない場合は、Windowsファイアウォールを無効にしていること、および正しいIPアドレスを持っていることを確認してください。

エラーがある場合はWindowsファイアウォールを無効にする

上記のコマンドが接続に失敗した場合にのみ、これを行う必要があります。

デスクトップの*Terminal*というタイトルのアイコンをクリックして、昇格されたシェルを開始する必要があります。

昇格されたプロンプトで、次を実行します:

コマンド

netsh Advfirewall set allprofiles state off

ファイルをLinuxに転送したら、Wiresharkでバイナリキャプチャファイルを表示できます。

コマンド

wireshark my.pcap

Netcatでバイナリファイルを移動する

まとめ

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

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

最後に、Netcatを使用してホスト間でファイルを転送しました。このコースの後半で、さらに楽しむためにNetcatを再度使用します!

このラボでは、SMBやSSHに関連するものを含む、いくつかの非常に有用なNmap Scripting Engineスクリプトを探索しました。Nmap Scripting Engineは、Nmapの最もダイナミックで有用な機能の1つであり、大規模環境全体であらゆる種類の脆弱性スキャンとチェックオプションにNmapを開放します。