hacktricks/network-services-pentesting/pentesting-snmp
2024-09-23 23:34:09 +00:00
..
cisco-snmp.md Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat 2024-09-23 23:34:09 +00:00
README.md Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat 2024-09-23 23:34:09 +00:00
snmp-rce.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00

161,162,10161,10162/udp - Pentesting SNMP

{% hint style="success" %} AWSハッキングを学び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする
{% endhint %}

ハッキングキャリアに興味があり、ハッキング不可能なものをハッキングしたい方 - 私たちは採用しています! (流暢なポーランド語の読み書きが必要です)。

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

基本情報

SNMP - シンプルネットワーク管理プロトコルは、ネットワーク内のさまざまなデバイスルーター、スイッチ、プリンター、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アクセスが異なるメーカーや異なるクライアント-サーバーの組み合わせで機能することを保証するために、管理情報ベースMIBが作成されました。MIBは、デバイス情報を保存するための独立したフォーマットです。MIBは、デバイスのすべてのクエリ可能なSNMPオブジェクト標準化されたツリー階層にリストされているテキストファイルです。少なくとも1つのオブジェクト識別子OIDが含まれており、必要な一意のアドレス名前に加えて、タイプ、アクセス権、およびそれぞれのオブジェクトの説明に関する情報も提供します。
MIBファイルは、抽象構文表記法1ASN.1に基づくASCIIテキストフォーマットで記述されています。MIBはデータを含まないが、どこにどの情報があるか、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。

OIDs

**オブジェクト識別子OIDs**は重要な役割を果たします。これらの一意の識別子は、**管理情報ベースMIB**内のオブジェクトを管理するために設計されています。

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

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

ここからOIDツリーをナビゲートできます: http://www.oid-info.com/cgi-bin/display?tree=#focus またはOIDの意味を確認できます(例えば1.3.6.1.2.1.1: http://oid-info.com/get/1.3.6.1.2.1.1.
よく知られたOIDには、MIB-2で定義されたシンプルネットワーク管理プロトコルSNMP変数を参照する1.3.6.1.2.1内のものがあります。また、この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または国防総省で、最初にインターネットを確立した組織です。
  • 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では、悪いコミュニティ文字列を使用すると、サーバーは応答しません。したがって、応答がある場合は、有効なコミュニティ文字列が使用されたことになります。

ポート

ウィキペディアから:

ブルートフォースコミュニティ文字列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

extended queries (download-mibs)のおかげで、次のコマンドを使用してシステムについてさらに多くの情報を列挙することが可能です:

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

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

実行中(パスワードを含む可能性があります)....

危険な設定

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

アクセス設定

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

  1. rwuser noauth は、認証なしでOIDツリーへの完全アクセスを許可するように設定されています。この設定は簡単で、制限のないアクセスを可能にします。
  2. より具体的な制御のために、次のようにアクセスを付与できます:
  • rwcommunityIPv4アドレス用、そして
  • rwcommunity6IPv6アドレス用です。

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

Microsoft WindowsのSNMPパラメータ

一連の管理情報ベースMIBが、SNMPを通じてWindowsシステムのさまざまな側面を監視するために利用されます

  • システムプロセス: 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 %}

大規模SNMP

Braaは、大規模SNMPスキャナーです。このようなツールの意図された使用法はもちろん、SNMPクエリを行うことですが、net-snmpのsnmpwalkとは異なり、数十または数百のホストに同時に、そして単一のプロセスでクエリを行うことができます。したがって、非常に少ないシステムリソースを消費し、スキャンを非常に速く行います。

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

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

braa ignite123@192.168.1.125:.1.3.6.*

これは手動で処理できない多くのMBの情報を抽出できます。

では、最も興味深い情報を見てみましょう(https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/から):

デバイス

プロセスは、各ファイルからデバイスを特定するために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コマンドを使用して「trap」という単語を含むSNMPトラップデータを分析することに依存することが多いです。

grep -i "trap" *.snmp

ユーザー名/パスワード

MIBテーブルに保存されたログは、ログオン試行の失敗を調べるために検査され、これにはユーザー名として入力されたパスワードが偶然含まれることがあります。failfailed、または login などのキーワードが、貴重なデータを見つけるために検索されます:

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

Emails

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

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

SNMP値の変更

NetScanTools を使用して 値を変更 できます。そのためには プライベート文字列 を知っている必要があります。

スプーフィング

ACLが特定のIPのみがSNMPサービスをクエリできるように制限している場合、UDPパケット内でこれらのアドレスの1つをスプーフィングし、トラフィックをスニッフィングできます。

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


{% hint style="success" %} AWSハッキングを学び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする
{% endhint %}