# Nmapの概要 (ESP) {{#include ../../banners/hacktricks-training.md}} ``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## パラメータ ### スキャンするIP - **`,`:** IPを直接指定 - **`-iL `:** list_IPs - **`-iR `**: ランダムなIPの数、`--exclude `または`--excludefile `で除外可能。 ### 機器発見 デフォルトでは、Nmapは次のような発見フェーズを開始します: `-PA80 -PS443 -PE -PP` - **`-sL`**: 非侵襲的で、ターゲットをリストし、名前を解決するために**DNS**リクエストを行います。例えば、www.prueba.es/24のすべてのIPがターゲットであるかどうかを知るのに役立ちます。 - **`-Pn`**: **Pingなし**。すべてがアクティブであることがわかっている場合に便利です(そうでない場合、多くの時間を失う可能性がありますが、このオプションはアクティブでないと誤って判断することもあります)、発見フェーズを防ぎます。 - **`-sn`** : **ポートスキャンなし**。偵察フェーズが完了した後、ポートをスキャンしません。比較的ステルスで、小規模なネットワークスキャンを許可します。特権がある場合、80にACK(-PA)、443にSYN(-PS)、エコーリクエストとタイムスタンプリクエストを送信し、特権がない場合は常に接続を完了します。ターゲットがネットワークの場合、ARP(-PR)のみを使用します。他のオプションと一緒に使用した場合、他のオプションのパケットのみがドロップされます。 - **`-PR`**: **Ping ARP**。ネットワーク内のコンピュータを分析する際にデフォルトで使用され、pingを使用するよりも速いです。ARPパケットを使用したくない場合は、`--send-ip`を使用します。 - **`-PS `**: SYNパケットを送信し、SYN/ACKで応答すればオープン(RSTで応答して接続を終了しない)、RSTで応答すればクローズ、応答がなければ到達不能です。特権がない場合は、自動的に完全接続が使用されます。ポートが指定されていない場合、80に送信されます。 - **`-PA `**: 前のものと同様ですがACKを使用し、両方を組み合わせることでより良い結果が得られます。 - **`-PU `**: 目的は逆で、クローズされていると予想されるポートに送信されます。一部のファイアウォールはTCP接続のみをチェックします。クローズされている場合はポート到達不能で応答し、他のICMPで応答するか応答がない場合は到達不能と見なされます。 - **`-PE, -PP, -PM`** : ICMP PINGS: エコー応答、タイムスタンプ、アドレスマスク。ターゲットがアクティブかどうかを確認するために送信されます。 - **`-PY`**: デフォルトで80にSCTP INITプローブを送信し、INIT-ACK(オープン)またはABORT(クローズ)または何も返さないかICMP到達不能(非アクティブ)で応答される可能性があります。 - **`-PO `**: ヘッダーにプロトコルを指定し、デフォルトは1(ICMP)、2(IGMP)、4(Encap IP)です。ICMP、IGMP、TCP(6)、UDP(17)プロトコルの場合、プロトコルヘッダーが送信され、その他はIPヘッダーのみが送信されます。これは、ヘッダーの不正形成により、プロトコル到達不能または同じプロトコルの応答が返され、稼働しているかどうかを知るためです。 - **`-n`**: DNSなし - **`-R`**: 常にDNS ### ポートスキャン技術 - **`-sS`**: 接続を完了しないため、痕跡を残さず、使用できる場合は非常に良いです。(特権あり)デフォルトで使用されます。 - **`-sT`**: 接続を完了するため、痕跡を残しますが、確実に使用できます。デフォルトでは特権なし。 - **`-sU`**: 遅い、UDP用。主に: DNS(53)、SNMP(161,162)、DHCP(67および68)、(-sU53,161,162,67,68):オープン(応答)、クローズ(ポート到達不能)、フィルタリング(他のICMP)、オープン/フィルタリング(何もなし)。オープン/フィルタリングの場合、-sVはnmapがサポートするバージョンを検出するために多数のリクエストを送信し、真の状態を検出できます。時間が大幅に増加します。 - **`-sY`**: SCTPプロトコルが接続を確立できないため、ログは残りません。-PYのように機能します。 - **`-sN,-sX,-sF`:** Null、Fin、Xmas、いくつかのファイアウォールを突破し、情報を抽出できます。標準準拠のマシンは、SYN、RST、またはACKラグがないすべてのリクエストにRSTで応答するはずです: オープン/フィルタリング(何もなし)、クローズ(RST)、フィルタリング(ICMP到達不能)。Windows、Cisco、BSDI、OS/400では信頼性がありません。Unixでは信頼性があります。 - **`-sM`**: Maimonスキャン: FINおよびACKフラグを送信し、BSD用に使用され、現在はすべてをクローズとして返します。 - **`-sA, sW`**: ACKおよびウィンドウ、ファイアウォールを検出するために使用され、ポートがフィルタリングされているかどうかを知るために使用されます。-sWはオープン/クローズを区別します。オープンは異なるウィンドウ値で応答します: オープン(ウィンドウが0以外のRST)、クローズ(RSTウィンドウ=0)、フィルタリング(ICMP到達不能または何もなし)。すべてのコンピュータがこのように機能するわけではないため、すべてがクローズされている場合は機能していないことになります。いくつかがオープンであれば正常に機能しており、多くがオープンで少数がクローズされている場合は逆に機能しています。 - **`-sI`:** Idleスキャン。アクティブなファイアウォールがあるが、特定のIPに対してフィルタリングしないことがわかっている場合(または単に匿名性を求める場合)、ゾンビスキャナーを使用できます(すべてのポートに機能します)。可能なゾンビを探すために、スクリプトipidseqまたはexploit auxiliary/scanner/ip/ipidseqを使用できます。このスキャナーはIPパケットのIPID番号に基づいています。 - **`--badsum`:** 不正な合計を送信し、コンピュータはパケットを破棄しますが、ファイアウォールは何かに応答する可能性があります。ファイアウォールを検出するために使用されます。 - **`-sZ`:** "奇妙な" SCTPスキャナー、クッキーエコーフラグメントを持つプローブを送信すると、オープンの場合は破棄され、クローズの場合はABORTで応答する必要があります。initを通過しないファイアウォールを通過できますが、フィルタリングとオープンを区別しません。 - **`-sO`:** プロトコルIPスキャン。時にはプロトコルさえも区別できない不正または空のヘッダーを送信します。ICMP到達不能プロトコルが到着すればクローズ、到達不能ポートが到着すればオープン、他のエラーが到着すればフィルタリング、何も到着しなければオープン|フィルタリングです。 - **`-b `:** FTPhost--> 他のホストからスキャンするために使用され、別のマシンのftpに接続し、スキャンしたいポートにファイルを送信するように依頼します。応答に応じて、オープンかどうかがわかります。 \[\:\@]\\[:\] ほとんどのftpサーバーはこれを許可しなくなっているため、実用的な用途はほとんどありません。 ### **フォーカス分析** **-p:** スキャンするポートを指定するために使用されます。すべての65,335ポートを選択するには: **-p-** または **-p all**。Nmapは人気に基づいた内部分類を持っています。デフォルトでは、上位1000ポートを使用します。**-F**(高速スキャン)を使用すると、上位100ポートを分析します。**--top-ports **を使用すると、その数の上位ポートを分析します(1から65,335まで)。ポートをランダムな順序でチェックします。これを防ぐには、**-r**を使用します。特定のポートを選択することもできます: 20-30,80,443,1024-(後者は1024以降を探すことを意味します)。プロトコルによってポートをグループ化することもできます: U:53,T:21-25,80,139,S:9。Nmapの人気ポート内で範囲を選択することもできます: -p [-1024]はnmap-servicesに含まれるポート1024までを分析します。**--port-ratio **は、0から1の比率内で最も一般的なポートを分析します。 **-sV** バージョンスキャン、強度は0から9まで調整可能で、デフォルトは7です。 **--version-intensity ** 強度を調整し、低いほど最も可能性の高いプローブのみを発射しますが、すべてではありません。これにより、UDPスキャン時間を大幅に短縮できます。 **-O** OS検出 **--osscan-limit** 適切なホストスキャンには、少なくとも1つのオープンポートと1つのクローズポートが必要です。この条件が満たされていない場合、OS予測を試みません(時間を節約します)。 **--osscan-guess** OS検出が完璧でない場合、これによりより努力します。 **スクリプト** --script __|__|__|__[,...] デフォルトのスクリプトを使用するには、-sCまたは--script=defaultを使用します。 利用可能なタイプは: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, および vulnです。 - **Auth:** 利用可能なすべての認証スクリプトを実行します。 - **Default:** 基本的なデフォルトツールスクリプトを実行します。 - **Discovery:** ターゲットまたは被害者から情報を取得します。 - **External:** 外部リソースを使用するためのスクリプト。 - **Intrusive:** 被害者またはターゲットに対して侵入的と見なされるスクリプトを使用します。 - **Malware:** 悪意のあるコードやバックドアによって開かれた接続をチェックします。 - **Safe:** 非侵入的なスクリプトを実行します。 - **Vuln:** 最も知られている脆弱性を発見します。 - **All:** 利用可能なすべてのNSE拡張スクリプトを実行します。 スクリプトを検索するには: **nmap --script-help="http-\*" -> http-で始まるもの** **nmap --script-help="not intrusive" -> それ以外のすべて** **nmap --script-help="default or safe" -> どちらか両方のもの** **nmap --script-help="default and safe" --> 両方のもの** **nmap --script-help="(default or safe or intrusive) and not http-\*"** --script-args __=__,__={__=__},__={__,__} --script-args-file __ --script-help __|__|__|__|all[,...] --script-trace ---> スクリプトの進行状況に関する情報を提供します。 --script-updatedb **スクリプトを使用するには、次のように入力します: nmap --script Script_Name target** --> スクリプトを使用すると、スクリプトとスキャナーの両方が実行されるため、スキャナーオプションも追加できます。**"safe=1"**を追加して、安全なもののみを実行できます。 **時間制御** **Nmapは秒、分、ミリ秒で時間を変更できます:** --host-timeout引数900000ms、900、900s、15mはすべて同じことをします。 Nmapはスキャンするホストの総数をグループに分け、これらのグループをブロックで分析します。すべてが分析されるまで次のブロックに移動せず(ユーザーはブロックが分析されるまで更新を受け取りません)、Nmapが大きなグループを使用する方が最適です。デフォルトではクラスCで256を使用します。 これは**--min-hostgroup** _****_**;** **--max-hostgroup** _****_で変更できます(並列スキャングループサイズを調整)。 並列スキャナーの数を制御できますが、あまり推奨されません(Nmapはネットワークの状態に基づいて自動制御を組み込んでいます): **--min-parallelism** _****_**;** **--max-parallelism** _****_ RTTタイムアウトの数値を変更できますが、通常は必要ありません: **--min-rtt-timeout** _**