Nmapの概要 (ESP)

Reading time: 25 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

パラメータ

スキャンするIP

  • <ip>,<net/mask>: IPを直接指定
  • -iL <ips_file>: list_IPs
  • -iR <number>: ランダムなIPの数、--exclude <Ips>または--excludefile <file>で除外可能。

機器発見

デフォルトでは、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 <ports>: SYNパケットを送信し、SYN/ACKで応答すればオープン(RSTで応答して接続を終了しない)、RSTで応答すればクローズ、応答がなければ到達不能です。特権がない場合は、自動的に完全接続が使用されます。ポートが指定されていない場合、80に送信されます。
  • -PA <ports>: 前のものと同様ですがACKを使用し、両方を組み合わせることでより良い結果が得られます。
  • -PU <ports>: 目的は逆で、クローズされていると予想されるポートに送信されます。一部のファイアウォールはTCP接続のみをチェックします。クローズされている場合はポート到達不能で応答し、他のICMPで応答するか応答がない場合は到達不能と見なされます。
  • -PE, -PP, -PM : ICMP PINGS: エコー応答、タイムスタンプ、アドレスマスク。ターゲットがアクティブかどうかを確認するために送信されます。
  • -PY<ports>: デフォルトで80にSCTP INITプローブを送信し、INIT-ACK(オープン)またはABORT(クローズ)または何も返さないかICMP到達不能(非アクティブ)で応答される可能性があります。
  • -PO <protocols>: ヘッダーにプロトコルを指定し、デフォルトは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 <server>: FTPhost--> 他のホストからスキャンするために使用され、別のマシンのftpに接続し、スキャンしたいポートにファイルを送信するように依頼します。応答に応じて、オープンかどうかがわかります。 [<user>:<password>@]<server>[:<port>] ほとんどの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 , --max-rtt-timeout , --initial-rtt-timeout

試行回数を変更できます: --max-retries

ホストのスキャン時間を変更できます: --host-timeout

各テスト間の時間を変更して遅くすることができます: --scan-delay ; --max-scan-delay

1秒あたりのパケット数を変更できます: --min-rate ; --max-rate

多くのポートは、フィルタリングまたはクローズされているときに応答に時間がかかります。オープンなものにのみ興味がある場合は、次のようにして速くできます: --defeat-rst-ratelimit

Nmapの攻撃性を定義するには: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> 一度に1ポートのみをスキャンし、次のスキャンまで5分待ちます。

-T1およびT2 --> 非常に似ていますが、それぞれのテスト間に15秒と0.4秒待ちます。

-T3 --> デフォルトの動作で、並列スキャンを含みます。

-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms

-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms

ファイアウォール/IDS

ポートへのアクセスを許可せず、パケットを分析します。

-f パケットをフラグメント化します。デフォルトでは、ヘッダーの後に8バイトにフラグメント化されます。このサイズを指定するには..mtuを使用します(この場合、-fは使用しないでください)。オフセットは8の倍数でなければなりません。バージョンスキャナーとスクリプトはフラグメンテーションをサポートしていません。

-D decoy1,decoy2,ME Nmapはスキャナーを送信しますが、他のIPアドレスを起源として使用し、これにより隠れます。リストにMEを入れると、Nmapはそこにあなたを配置します。完全にマスクするには、5または6を前に置く方が良いです。ランダムIPはRND:で生成できます。のランダムIPを生成します。接続なしのTCPバージョン検出器では機能しません。ネットワーク内にいる場合は、アクティブなIPを使用することが重要です。そうでないと、あなたが唯一のアクティブなものであることが非常に簡単にわかります。

ランダムIPを使用するには: nmap -D RND:10 Target_IP

-S IP NmapがあなたのIPアドレスをキャッチしない場合にこれを指定します。また、他のターゲットがスキャンしていると思わせるためにも役立ちます。

-e インターフェースを選択するために使用します。

多くの管理者は、すべてが正しく機能するためにエントリポートを開いたままにしており、他の解決策を見つけるよりも簡単です。これらはDNSポートやFTPポートなどです。この脆弱性を見つけるために、Nmapは次のように組み込まれています: --source-port ;-g 同等です。

--data 16進数テキストを送信するために使用します: --data 0xdeadbeefおよび--data \xCA\xFE\x09

--data-string 通常のテキストを送信するために使用します: --data-string "Security Opsによって実施されたスキャン、内線7192"

--data-length Nmapはヘッダーのみを送信します。これにより、追加のバイト数を追加できます(ランダムに生成されます)。

IPパケットを完全に構成するには、--ip-optionsを使用します。

送信および受信したパケットのオプションを表示するには、--packet-traceを指定します。NmapでのIPオプションの使用に関する詳細情報と例については、http://seclists.org/nmap-dev/2006/q3/52を参照してください。

--ttl

--randomize-hosts 攻撃を目立たなくするために使用します。

--spoof-mac <MAC address, prefix, or vendor name> MACを変更するために使用します。例: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, および Cisco

--proxies プロキシを使用するために使用します。時々、プロキシはNmapが望むほど多くのオープン接続を維持しないため、並列性を変更する必要があります: --max-parallelism

-sP ARPによってネットワーク内のホストを発見するために使用します。

多くの管理者は、特定のポートから来るすべてのパケットを通過させるファイアウォールルールを作成します(20、53、67のように)。Nmapにこれらのポートからパケットを送信させることができます: nmap --source-port 53 IP

出力

-oN file 通常の出力

-oX file XML出力

-oS file スクリプトキディの出力

-oG file Greppable出力

-oA file -oSを除くすべて

-v level 冗長性

-d level デバッグ

--reason ホストと状態の理由

--stats-every time その時間ごとに進行状況を知らせます。

--packet-trace どのパケットが出ているかを見るために、--version-traceや--script-traceのようなフィルタを指定できます。

--open オープン、オープン|フィルタリング、フィルタリングされていないものを表示します。

--resume file 概要を出力します。

その他

-6 IPv6を許可します。

-A -O -sV -sC --tracerouteと同じです。

実行時間

Nmapが実行中の間、オプションを変更できます:

v / V 冗長性レベルを増加/減少させます。

d / D デバッグレベルを増加/減少させます。

p / P パケットトレースをオン/オフにします。

? 実行時のインタラクションヘルプ画面を表示します。

Vulscan

Nmapスクリプトは、オフラインデータベース(他の非常に重要なものからダウンロードされた)で取得したサービスのバージョンを調べ、可能な脆弱性を返します。

使用するDBは次のとおりです:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

Nmapフォルダーにダウンロードしてインストールするには:

wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/

DBパッケージもダウンロードして/usr/share/nmap/scripts/vulscan/に追加する必要があります。

使用法:

すべてを使用するには: sudo nmap -sV --script=vulscan HOST_TO_SCAN

特定のDBを使用するには: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN

Nmapサービススキャンをx16速くする

この投稿によると、すべての**totalwaitms値を/usr/share/nmap/nmap-service-probes300に、tcpwrappedms200**に変更することで、nmapサービス分析を速くできます。

さらに、特に定義された**servicewaitmsを持たないプローブは、デフォルト値5000を使用します。したがって、各プローブに値を追加するか、service_scan.hでデフォルト値を変更するためにnmapをコンパイル**することができます。

/usr/share/nmap/nmap-service-probesファイル内の**totalwaitmsおよびtcpwrappedms**の値を変更したくない場合は、解析コードを編集して、nmap-service-probesファイル内のこれらの値を完全に無視させることができます。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする