nmap
攻撃先のランドスケープ、つまりサーバーの構成や開いているポートが何かというのを調べるためにnmapはよく使われる。
タイミングテンプレート
paranoid(0)、sneaky(1)、polite(2)、normal(3)、aggressive(4)、insane(5)
最初の2つはIDS回避のためのものです。丁寧モードは、スキャンを遅くして、使用する帯域幅を減らし、マシンのリソースをターゲットにします。通常モードはデフォルトであるため、-T3は何もしません。Aggressiveモードは、それなりに高速で信頼性の高いネットワーク上にいることを想定してスキャンを高速化します。最後にinsaneモードは、非常に高速なネットワークを使用しているか、速度のために精度を犠牲にすることをいとわないことを想定しています。
IDSとは
不正侵入検知システムのこと
vulnとは
脆弱性を確認するscript全体の総称?みたいなもの
Usage and Examples | Nmap Network Scanning
色々なフラグ
TCP Connect Scans (-sT
)
SYN Scans (-sS
)
- TCP Scansと違い完全な3ウェイハンドシェイクによる接続をしない
- 1回だけSYN → SYN/ACKと帰ってきたらあとはRSTを返してそれ以上の通信を行わない
- sudo権限でnmap scanをするとデフォルトでSYN scanとなる
UDP Scans(-sU
)
- UDPは応答がないのでScanが困難であることが多いらしい
- 返答がない → Portは開いていると判断
- ICMPで返答 → Portは閉じている
ping sweep
- ICMP通信を通してどのポートが使われているかを応答確認によって調査する
Nmap Script Engine
引数を持つscriptの実行方法。
script名.引数=””
という形式に当てはめて実行できる。
nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php'
Scriptの探し方
/usr/share/nmap/scripts/scripts.dbにフォーマットされたテキストファイルとして記載されている。
以下のような形式になっているので、grepで絞り込んだりもできる。ここに記載のないweb上のscriptや自作のscriptをnmapから使えるようにするには、/usr/share/nmap/scripts/配下に置いた上で、nmap --script-updatedb
を実行する必要がある。
Firewall回避
いかにしてFirewallを突破するかに関するスイッチが多い。
- パケットを細分化するもの
- 細分化する際のサイズを8の倍数で指定できるもの
- 送信するパケットとパケットの間に遅延を挟ませるもの
- firewallの存在確認のために、無効なチェックサムをパケットに含めるもの
Firewall spotting and networks analysis with a broken CRC
上記記事によると、Firewallはchecksumをほとんどの場合チェックしないのでchecksumによってFirewall回避を試みる。
- まず、Firewall(packat filter)がパケットをドロップするようにしているか、エラーが出るようにしているか確認する
telnet www.oracle.com 31337
- → RSTがFirewallかホストから返されることを確認
- 以下コマンドのようにして値が帰ってこれば、filterされてるのかなと疑う。
hping -S -c 1 -p 31337 -b www.oracle.com
なぜpingを無効化する必要があるのか?
windowsホストはデフォルトで、全てのICMPパケットをブロックする。つまりpingリクエストによるホストの生存確認をしようとすると、生きているのにデフォルトfirewallによって死んでいると判断されてしまう。(nmapによる生存確認もICMPパケットを送っている)
よって-Pn
オプションによってpingを送らないようにする必要がある。
→ これにより、Portスキャンがブロックされることなくnmap
で行えるようになる。
nmap試してみる
nmap IPアドレス
を実行してpingが失敗するとき。上記記載のようにICMPパケットをブロックするようになっているかもしれないので-Pnを試すように言われる。
Note: Host seems down.if it is really up, but blocking our ping probes, try -Pn
sudo権限での実行
- sudo権限で実行するとTCP ConnectionではなくSYNフラグでの通信をするので、多分早い。
scan結果の理由・詳細を見る
-vv
や—-reason
を使うといい
開いているPortのみ表示する
—open
で開いているPortとServiceが表示される