Nmap
- 会社のネットワーク全体の内部侵入テストを実施する必要がある場合、ネットワーク上で生きているホストを探索するために、Nmapホスト検出オプションが使える
- wifiとかネットワークに侵入できた後に、どんなマシンがあるかなって見ていく感じ
- ここでは、ポートスキャンはしないで、本当にマシンが生きているかいないかの確認だけを扱う
- 公式ドキュメント
- HTBのコマンドチートシート
単一IPをスキャンする
一のホストをスキャンしてオープンポートとそのサービスを調べる前に、まずそれが生きているかどうかを判断する
snowyowl644@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-14 23:59 CEST
Nmap scan report for 10.129.2.18
Host is up (0.087s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
スキャンオプション |
説明 |
10.129.2.18 |
ターゲットに対して定義されたスキャンを実行します。 |
-sn |
ポートスキャンを無効にします。 |
-oA host |
結果を「ホスト」という名前で始まるすべての形式で保存します。 |
-sn
オプション(ポートスキャンの無効化)を指定すると、Nmapは自動的にICMP Echoリクエスト(-PE
)によるpingスキャンを行う。
- ICMP Echoリクエストを送信すると、対象が稼働中の場合はICMP Echo Replyが返ってくるのが通常。
- 以前のスキャンでICMP Echoリクエストが行われなかった理由は、ICMPを送る前にARP pingを送信し、ARP応答が返っていたため。
--packet-trace
オプションを使うと、実際にどのパケットが送信されているかを確認できる。
- ICMP Echoリクエストを確実に送信したい場合は、
-PE
オプションを明示的に指定する。
snowyowl644@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host -PE --packet-trace
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 00:08 CEST
SENT (0.0074s) ARP who-has 10.129.2.18 tell 10.10.14.2
RCVD (0.0309s) ARP reply 10.129.2.18 is-at DE:AD:00:00:BE:EF
Nmap scan report for 10.129.2.18
Host is up (0.023s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
スキャンオプション |
説明 |
10.129.2.18 |
ターゲットに対して定義されたスキャンを実行します。 |
-sn |
ポートスキャンを無効にします。 |
-oA host |
結果を「ホスト」という名前で始まるすべての形式で保存します。 |
-PE |
ターゲットに対して「ICMPエコー要求」を使用してpingスキャンを実行します。 |
--packet-trace |
送受信されたすべてのパケットを表示します |
複数のIPをスキャン
snowyowl644@htb[/htb]$ sudo nmap -sn -oA tnet 10.129.2.18 10.129.2.19 10.129.2.20| grep for | cut -d" " -f5
10.129.2.18
10.129.2.19
10.129.2.20
オクテットでの指定もできる
snowyowl644@htb[/htb]$ sudo nmap -sn -oA tnet 10.129.2.18-20| grep for | cut -d" " -f5
10.129.2.18
10.129.2.19
10.129.2.20
Nmap
がARP request
とARP reply
のみを通じてホストが生きているかどうかを実際に検出することがわかる
- ARPリクエストを無効にし、目的の
ICMP echo requests
でターゲットをスキャンするには、「--disable-arp-ping
」オプションを設定して、ARP pingを無効にすることができる
snowyowl644@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host -PE --packet-trace --disable-arp-ping
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 00:12 CEST
SENT (0.0107s) ICMP [10.10.14.2 > 10.129.2.18 Echo request (type=8/code=0) id=13607 seq=0] IP [ttl=255 id=23541 iplen=28 ]
RCVD (0.0152s) ICMP [10.129.2.18 > 10.10.14.2 Echo reply (type=0/code=0) id=13607 seq=0] IP [ttl=128 id=40622 iplen=28 ]
Nmap scan report for 10.129.2.18
Host is up (0.086s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
- ttlから大体のOSは特定できるよーって話
ttl=64
→ Linux OS/Mac OS
ttl=128
→ Windows OS
ttl=255
→ UNIX OS/ネットワーク機器
IPスキャンリスト
- 内部ペネトレーションテスト中に、テストする必要があるホストのIPリストが提供されたら、
Nmap
で、リストからホストを読み取れる
- こんな感じで.lstファイルで書けばおけ
snowyowl644@htb[/htb]$ cat hosts.lst
10.129.2.4
10.129.2.10
10.129.2.11
10.129.2.18
10.129.2.19
10.129.2.20
10.129.2.28
事前定義されたリストで同じスキャン手法を使用すると、コマンドはこんな感じ
snowyowl644@htb[/htb]$ sudo nmap -sn -oA tnet -iL hosts.lst | grep for | cut -d" " -f5
10.129.2.18
10.129.2.19
10.129.2.20
スキャンオプション |
説明 |
-sn |
ポートスキャンを無効にします。 |
-oA tnet |
結果を「tnet」という名前で始まるすべての形式で保存します。 |
-iL |
提供された「hosts.lst」リストのターゲットに対して定義されたスキャンを実行します。 |
- この例では、7つのホストのうち3つだけがアクティブであることがわかる。
- でも、他のホストがファイアウォール設定のためにデフォルトのICMPエコー要求を無視してる可能性もあるので注意が必要
ネットワーク範囲のスキャン
snowyowl644@htb[/htb]$ sudo nmap 10.129.2.0/24 -sn -oA tnet | grep for | cut -d" " -f5
10.129.2.4
10.129.2.10
...
スキャンオプション |
説明 |
10.129.2.0/24 |
ターゲットネットワーク範囲。 |
-sn |
ポートスキャンを無効にします。 |
-oA tnet |
結果を「tnet」という名前で始まるすべての形式で保存します。 |
- ホストのファイアウォールが許可している場合にのみ機能する。
- それ以外の場合は、他のスキャンを使用して、ホストがアクティブかどうかを確認できる