hacktricks/network-services-pentesting/pentesting-snmp
2024-04-17 05:41:53 +00:00
..
cisco-snmp.md Translated ['binary-exploitation/basic-binary-exploitation-methodology/t 2024-04-17 05:41:53 +00:00
README.md Translated ['binary-exploitation/basic-binary-exploitation-methodology/t 2024-04-17 05:41:53 +00:00
snmp-rce.md Translated ['network-services-pentesting/11211-memcache/README.md', 'net 2024-02-09 09:15:30 +00:00

161,162,10161,10162/udp - SNMPのペンテスト

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

ハッキングキャリアに興味がある方や解読不能なものをハックしたい方 - 採用中です!流暢なポーランド語の読み書きが必要です)。

{% embed url="https://www.stmcyber.com/careers" %}

基本情報

SNMP - Simple Network Management Protocolは、ネットワーク内のさまざまなデバイスルーター、スイッチ、プリンター、IoTなどを監視するために使用されるプロトコルです。

PORT    STATE SERVICE REASON                 VERSION
161/udp open  snmp    udp-response ttl 244   ciscoSystems SNMPv3 server (public)

{% hint style="info" %} SNMPはトラップ用にもポート162/UDPを使用します。これらは、明示的に要求されていない場合にSNMPサーバーからクライアントに送信されるデータパケットです。 {% endhint %}

MIB

SNMPアクセスがさまざまな製造業者や異なるクライアントサーバーの組み合わせで機能するようにするために、Management Information BaseMIBが作成されました。MIBはデバイス情報を格納するための独立した形式です。MIBは標準化されたツリー階層にすべての問い合わせ可能なSNMPオブジェクトがリストされたテキストファイルです。少なくとも1つのObject IdentifierOIDを含み、一意のアドレス名前に加えて、各オブジェクトのタイプ、アクセス権、および説明に関する情報も提供します。
MIBファイルは、Abstract Syntax Notation OneASN.1ベースのASCIIテキスト形式で記述されます。MIBにはデータが含まれていませんが、どこでどの情報を見つけるか、どのようなものか、特定のOIDの返り値、または使用されるデータ型について説明します。

OIDs

**オブジェクト識別子OID**は重要な役割を果たします。これらのユニークな識別子は、**Management Information BaseMIB**内のオブジェクトを管理するために設計されています。

MIBオブジェクトIDOIDの最上位レベルは、さまざまな標準設定組織に割り当てられています。これらのトップレベルでは、グローバル管理慣行と標準の枠組みが確立されています。

さらに、ベンダーはプライベートブランチを設立する権利を与えられています。これらのブランチ内では、独自の製品ラインに関連する管理オブジェクトを含める権限があります。このシステムにより、異なるベンダーや標準間でさまざまなオブジェクトを識別および管理するための構造化された方法が確立されています。

ウェブからOIDツリーナビゲートすることができます: http://www.oid-info.com/cgi-bin/display?tree=#focus または1.3.6.1.2.1.1のようなOIDが何を意味するかを確認することができます: http://oid-info.com/get/1.3.6.1.2.1.1
1.3.6.1.2.1内のようなよく知られたOIDがあり、これはMIB-2で定義されたSimple Network Management ProtocolSNMP変数を参照しています。そして、このOIDから派生するOIDからいくつかの興味深いホストデータ(システムデータ、ネットワークデータ、プロセスデータ)を取得できます。

OIDの例

ここからの例:

1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7

このアドレスの分解は次のとおりです。

  • 1 これはISOと呼ばれ、これがOIDであることを確立します。これはすべてのOIDが「1」で始まる理由です。
  • 3 これはORGと呼ばれ、デバイスを構築した組織を指定するために使用されます。
  • 6 これはdodまたはDepartment of Defenseであり、最初にインターネットを確立した組織です。
  • 1 これはインターネットの値で、すべての通信がインターネットを介して行われることを示します。
  • 4 この値は、このデバイスが政府機関ではなく私企業によって製造されたことを決定します。
  • 1 この値は、デバイスが企業またはビジネスエンティティによって製造されたことを示します。

これらの最初の6つの値はすべてのデバイスで同じであり、それらについての基本情報を提供します。これらの数字のシーケンスは、政府機関が製造したデバイス以外はすべてのOIDに対して同じになります。

次の数字に進みましょう。

  • 1452 このデバイスを製造した組織の名前を示します。
  • 1 デバイスのタイプを説明します。この場合、アラームクロックです。
  • 2 このデバイスがリモート端末ユニットであることを決定します。

残りの値はデバイスに関する具体的な情報を提供します。

  • 5 離散アラームポイントを示します。
  • 1 デバイス内の特定のポイント
  • 3 ポート
  • 21 ポートのアドレス
  • 1 ポートの表示
  • 4 ポイント番号
  • 7 ポイントの状態

SNMPバージョン

SNMPには2つの重要なバージョンがあります:

  • SNMPv1: 主要なバージョンであり、認証は文字列(コミュニティ文字列)に基づいており、すべての情報が平文で送信されます。バージョン2および2c情報が平文で送信され、認証にコミュニティ文字列が使用されます。
  • SNMPv3: より良い認証形式を使用し、情報は暗号化されます(辞書攻撃は実行できますが、SNMPv1およびv2よりも正しい資格情報を見つけるのははるかに難しいでしょう

コミュニティ文字列

前述のように、MIBに保存されている情報にアクセスするには、バージョン1および2/2cのコミュニティ文字列、バージョン3の資格情報を知る必要があります。
コミュニティ文字列には2種類あります:

  • public 主に読み取り専用機能
  • private 一般的に読み取り/書き込み

OIDの書き込み可能性は使用されるコミュニティ文字列に依存するため、たとえpublic」が使用されているとしても、一部の値を書き込むことができる可能性があります。また、常に「読み取り専用」であるオブジェクトが存在するかもしれません。
オブジェクトを
書き込もうと
すると**noSuchNameまたはreadOnlyエラー**が受信されます。

バージョン1および2/2cでは、誤ったコミュニティ文字列を使用するとサーバーが応答しないため、サーバーが応答した場合は有効なコミュニティ文字列が使用されたことになります。

ポート

Wikipediaより:

コミュニティ文字列の総当たり攻撃v1およびv2c

コミュニティ文字列を推測するには、辞書攻撃を実行できます。SNMPに対する総当たり攻撃の異なる方法については、こちらを確認してください。頻繁に使用されるコミュニティ文字列はpublicです。

SNMPの列挙

デバイスから収集された各OIDの意味を確認するために、以下をインストールすることをお勧めします:

apt-get install snmp-mibs-downloader
download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf

もし有効なコミュニティストリングを知っている場合、SNMPWalkまたはSNMP-Checkを使用してデータにアクセスできます:

snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .

snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP]
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] 1.3.6.1.2.1.4.34.1.3 #Get IPv6, needed dec2hex
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] NET-SNMP-EXTEND-MIB::nsExtendObjects #get extended
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] .1 #Enum all

snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING]

nmap --script "snmp* and not snmp-brute" <target>

braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID

拡張クエリdownload-mibsのおかげで、次のコマンドを使用してシステムについてさらに詳細な情報を列挙することができます

snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull

SNMPには、ホストに関する多くの情報が含まれており、興味深い情報には、ネットワークインターフェースIPv4およびIPv6アドレス)、ユーザー名、稼働時間、サーバー/OSバージョン、およびプロセス(パスワードを含む場合があります)があります。

危険な設定

ネットワーク管理の領域では、特定の構成とパラメータが包括的な監視と制御を確保するために重要です。

アクセス設定

ネットワーク管理において、完全なOIDツリーへのアクセスを可能にする2つの主要な設定があります

  1. **rwuser noauth**は、認証を必要とせずにOIDツリーへの完全なアクセスを許可するように設定されています。この設定は直感的で制限なしのアクセスを可能にします。
  2. より具体的な制御のために、次のようにアクセスを許可できます:
  • IPv4アドレスに対しては**rwcommunity**、および
  • IPv6アドレスに対しては**rwcommunity6**。

両方のコマンドはコミュニティ文字列と関連するIPアドレスが必要で、リクエストの出どころに関係なく完全なアクセスを提供します。

Microsoft Windows用のSNMPパラメータ

Windowsシステムのさまざまな側面を監視するために使用される一連のManagement Information BaseMIBがSNMPを介して利用されます

  • システムプロセス1.3.6.1.2.1.25.1.6.0を介してアクセスされ、このパラメータはシステム内のアクティブなプロセスの監視を可能にします。
  • 実行中のプログラム1.3.6.1.2.1.25.4.2.1.2の値は現在実行中のプログラムを追跡するために指定されています。
  • プロセスのパス:プロセスがどこから実行されているかを判断するためには、1.3.6.1.2.1.25.4.2.1.4のMIB値が使用されます。
  • ストレージユニット:ストレージユニットの監視は1.3.6.1.2.1.25.2.3.1.4によって容易になります。
  • ソフトウェア名:システムにインストールされたソフトウェアを特定するためには、1.3.6.1.2.1.25.6.3.1.2が使用されます。
  • ユーザーアカウント1.3.6.1.4.1.77.1.2.25の値を使用すると、ユーザーアカウントを追跡できます。
  • TCPローカルポート:最後に、1.3.6.1.2.1.6.13.1.3はTCPローカルポートの監視に指定されており、アクティブなネットワーク接続に関する洞察を提供します。

Cisco

Cisco機器を使用している場合は、このページを参照してください

{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}

SNMPからRCEへ

SNMPサービス内で値を書き込むことを許可する文字列を持っている場合、それを悪用してコマンドを実行する可能性があります:

{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}

Massive SNMP

Braaは大規模なSNMPスキャナーです。このようなツールの意図された使用法は、もちろんSNMPクエリを実行することですが、net-snmpのsnmpwalkとは異なり、数十から数百のホストを同時にクエリし、1つのプロセスで行うことができます。そのため、システムリソースをほとんど消費せず、非常に高速にスキャンを実行します。

Braaは独自のSNMPスタックを実装しているため、net-snmpのようなSNMPライブラリは必要ありません。

構文: braa [コミュニティ文字列]@[SNMPサーバーのIP]:[iso id]

braa ignite123@192.168.1.125:.1.3.6.*

デバイス

プロセスは、各ファイルからsysDesc MIBデータ1.3.6.1.2.1.1.1.0)を抽出してデバイスを識別することから始まります。これはgrepコマンドを使用して実行されます。

grep ".1.3.6.1.2.1.1.1.0" *.snmp

プライベートストリングの特定

重要なステップは、特にCisco IOSルーターで組織が使用しているプライベートコミュニティストリングを特定することです。このストリングを使用すると、ルーターからランニング構成を抽出できます。特定は、しばしばgrepコマンドを使用してSNMPトラップデータを解析し、「trap」という単語を探すことに依存しています。

grep -i "trap" *.snmp

ユーザー名/パスワード

MIBテーブルに保存されたログは、失敗したログオン試行を調べるために調べられます。これには、ユーザー名として入力されたパスワードが誤って含まれる可能性があります。価値のあるデータを見つけるために、failfailed、または_login_などのキーワードが検索されます。

grep -i "login\|fail" *.snmp

Eメール

最後に、データからEメールアドレスを抽出するために、正規表現を使用したgrepコマンドが使用され、Eメール形式に一致するパターンに焦点を当てます

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp

SNMP値の変更

_NetScanTools_を使用して値を変更できます。これを行うにはプライベートストリングを知る必要があります。

スプーフィング

SMNPサービスへのクエリを許可するIPアドレスが制限されているACLがある場合、UDPパケット内のそのアドレスをスプーフィングしてトラフィックを嗅視できます。

SNMP構成ファイルの調査

  • snmp.conf
  • snmpd.conf
  • snmp-config.xml

ハッキングキャリアに興味がある方や、解読不能なものをハックしたい方向けに、採用中です!(流暢なポーランド語の読み書きが必要です)。

{% embed url="https://www.stmcyber.com/careers" %}

HackTricks自動コマンド

Protocol_Name: SNMP    #Protocol Abbreviation if there is one.
Port_Number:  161     #Comma separated if there is more than one.
Protocol_Description: Simple Network Managment Protocol         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for SNMP
Note: |
SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...).

https://book.hacktricks.xyz/pentesting/pentesting-snmp

Entry_2:
Name: SNMP Check
Description: Enumerate SNMP
Command: snmp-check {IP}

Entry_3:
Name: OneSixtyOne
Description: Crack SNMP passwords
Command: onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings-onesixtyone.txt {IP} -w 100

Entry_4:
Name: Nmap
Description: Nmap snmp (no brute)
Command: nmap --script "snmp* and not snmp-brute" {IP}

Entry_5:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} -v {IP} snmp


htARTEHackTricks AWS Red Team Expert を使って、ゼロからヒーローまでAWSハッキングを学ぶ

HackTricksをサポートする他の方法