hacktricks/network-services-pentesting/pentesting-snmp/README.md

20 KiB
Raw Blame History

161,162,10161,10162/udp - SNMPペネトレーションテスト

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をチェック!

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


バグバウンティのヒント: Intigriti登録し、ハッカーのために作られたプレミアムなバグバウンティプラットフォームに参加しましょう!今日https://go.intigriti.com/hacktricksにアクセスして、最大**$100,000**のバウンティを獲得し始めましょう!

{% embed url="https://go.intigriti.com/hacktricks" %}

基本情報

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アクセスがメーカー間や異なるクライアント-サーバー組み合わせで機能するように、管理情報ベースMIBが作成されました。MIBは、デバイス情報を格納するための独立した形式です。MIBは、デバイスの問い合わせ可能なSNMPオブジェクト標準化されたツリー階層でリストされたテキストファイルです。少なくとも1つのオブジェクト識別子OID)を含み、必要なユニークなアドレス名前に加えて、該当オブジェクトのタイプ、アクセス権、説明についての情報も提供します。 MIBファイルは、抽象構文記法ワンASN.1ベースのASCIIテキスト形式で書かれています。MIBにはデータが含まれていませんが、どの情報をどこで見つけるか、どのように見えるか、特定のOIDの戻り値、または使用されるデータタイプについて説明します。

OIDs

OIDオブジェクト識別子を意味します。OIDはMIB階層内の管理オブジェクトを一意に識別します。これはツリーとして表され、そのレベルは異なる組織によって割り当てられます。トップレベルのMIBオブジェクトIDOIDは異なる標準組織に属しています。 ベンダーは、自社製品の管理オブジェクトを含むプライベートブランチを定義します。

ウェブ上で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があり、1.3.6.1.2.1内のものは、Simple Network Management ProtocolSNMP変数を定義したMIB-2を参照しています。そして、この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
拡張クエリdownload-mibsのおかげで、以下のコマンドを使用してシステムについてさらに多くの情報を列挙することが可能です
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull

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

(パスワードが含まれている可能性があります)があります....

危険な設定

**https://academy.hackthebox.com/module/112/section/1075**より****

設定 説明
rwuser noauth 認証なしで完全なOIDツリーにアクセスできます。
rwcommunity <community string> <IPv4 address> リクエストの送信元に関係なく、完全なOIDツリーにアクセスできます。
rwcommunity6 <community string> <IPv6 address> rwcommunityと同じアクセス権を持ち、IPv6を使用する点が異なります。

Microsoft Windows SNMPパラメータ

MIB値 説明
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 プロセスパス。
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 ユーザーアカウント。
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 [Community-string]@[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 .1.3.6.1.2.1.1.1.0 MIBデータを抽出することです。これは以下のgrepコマンドを使用して簡単に行うことができます

grep ".1.3.6.1.2.1.1.1.0" *.snmp

プライベート文字列の特定

例として、ある組織がCisco IOSルーターで使用しているプライベートコミュニティ文字列を特定できれば、そのコミュニティ文字列を使用してルーターから実行中の設定を抽出する可能性があります。このようなデータを見つける最良の方法は、しばしばSNMPトラップデータに関連していました。したがって、以下のgrepを使用して、「trap」というキーワードを素早く検索しながら多くのMIBデータを解析できます

grep -i "trap" *.snmp

ユーザー名/パスワード

もう一つの関心事はログです。MIBテーブル内にログを保持しているデバイスがあることがわかりました。これらのログには、ログオンの失敗試行も含まれていることがあります。TelnetやSSHを介してデバイスにログインし、うっかりユーザー名としてパスワードを入力した最後の時間を考えてみてください。私は通常、failfailedlogin などのキーワードを検索し、価値があるかどうかそのデータを調べます。

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

電子メール

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

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
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">
**バグバウンティのヒント**: **Intigriti**に**登録**しましょう。ハッカーによって作られたプレミアムな**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得し始めましょう!

{% embed url="https://go.intigriti.com/hacktricks" %}

<details>

<summary><strong>AWSハッキングをゼロからヒーローになるまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>

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

* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有**してください。

</details>