# 161,162,10161,10162/udp - SNMPのペネトレーションテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ会社**で働いていますか?**HackTricksで会社の広告を掲載**したいですか?または、**最新版のPEASSを入手**したり、**HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを手に入れましょう。 * [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手しましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加するか**、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローしてください。** * [**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、**ハッキングのコツを共有してください。**
\ **バグバウンティのヒント**: **Intigriti**に**登録**しましょう。ハッカーによって作られたプレミアムな**バグバウンティプラットフォーム**です!今日[**https://go.intigriti.com/hacktricks**](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アクセスが機能するように、**Management Information Base (MIB)** が作成されました。MIBは、**デバイス情報を保存するための独立した形式**です。MIBは、デバイスの問い合わせ可能な**SNMPオブジェクト**が**標準化された**ツリー階層でリストされている**テキスト**ファイルです。少なくとも1つの `Object Identifier` (`OID`) を含み、必要な**ユニークなアドレス**と**名前**に加えて、対象オブジェクトのタイプ、アクセス権、説明についての情報も提供します。 MIBファイルは、`Abstract Syntax Notation One` (`ASN.1`) ベースのASCIIテキスト形式で書かれています。**MIBにはデータが含まれていません**が、どの情報をどこで見つけるか、どのように見えるかを説明し、特定のOIDに対してどの値を返すか、またはどのデータタイプが使用されるかを説明します。 ### OIDs **OIDs**は、**Object Identifiers**を意味します。**OIDsは、MIB階層内の管理対象オブジェクトを一意に識別します**。これはツリーとして描かれ、そのレベルは異なる組織によって割り当てられます。トップレベルのMIBオブジェクトID(OID)は異なる標準組織に属しています。 **ベンダーは、自社製品の管理対象オブジェクトを含むプライベートブランチを定義します。** ![](../../.gitbook/assets/snmp\_oid\_mib\_tree.png) こちらのウェブサイトからOIDツリーを**ナビゲート**できます: [http://www.oid-info.com/cgi-bin/display?tree=#focus](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](http://oid-info.com/get/1.3.6.1.2.1.1)。 いくつかの**よく知られたOID**があります。例えば、[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)内のものは、Simple Network Management Protocol (SNMP)変数を定義した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 – ポイントの状態 _**(こちらからの例**_ [_**here**_](https://www.netadmintools.com/snmp-mib-and-oids)_**)**_ ### SNMPのバージョン SNMPには2つの重要なバージョンがあります: * **SNMPv1**: 主要なもので、最も頻繁に使用されており、**認証は文字列**(コミュニティ文字列)に基づいており、**プレーンテキスト**で送信されます(すべての情報がプレーンテキストで送信されます)。**バージョン2と2c**も**トラフィックをプレーンテキストで送信**し、**認証にコミュニティ文字列を使用**します。 * **SNMPv3**: より良い**認証**形式を使用し、情報は**暗号化**されて送信されます(**辞書攻撃**が可能ですが、SNMPv1およびv2よりも正しい資格情報を見つけるのははるかに困難です)。 ### コミュニティ文字列 前述のように、**MIBに保存された情報にアクセスするには、バージョン1および2/2cではコミュニティ文字列を、バージョン3では資格情報を知る必要があります。**\ **コミュニティ文字列には2種類あります**: * **`public`** 主に**読み取り専用**機能 * **`private`** 一般的に**読み書き可能** **OIDの書き込み可能性は使用されるコミュニティ文字列に依存する**ため、"**public**"が使用されているとしても、**いくつかの値を書き込むことができる**可能性があります。また、**常に「読み取り専用」であるオブジェクト**も存在するかもしれません。\ オブジェクトに**書き込み**を試みると、**`noSuchName`または`readOnly`エラー**が返されます。 バージョン1および2/2cでは、**不正な**コミュニティ文字列を使用すると、サーバーは**応答しません**。したがって、応答がある場合は、**有効なコミュニティ文字列が使用された**ということです。 ## ポート * SNMPエージェントはUDPポート **161** でリクエストを受信します。 * マネージャーは、ポート **162** で通知([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap)および[InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest))を受信します。 * [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security)または[Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security)を使用する場合、リクエストはポート **10161** で受信され、通知はポート **10162** に送信されます。 ## コミュニティ文字列のブルートフォース (v1 と v2c) **コミュニティ文字列を推測する**ためには、辞書攻撃を行うことができます。SNMPに対してブルートフォース攻撃を行う[異なる方法はこちら](../../generic-methodologies-and-resources/brute-force.md#snmp)をチェックしてください。よく使われるコミュニティ文字列は `public` です。 ## SNMPの列挙 デバイスから収集した**各OIDが意味するものを確認する**ために、以下のインストールが推奨されます: ```bash 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** を使用してデータにアクセスできます: ```bash 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" braa @:.1.3.6.* #Bruteforce specific OID ``` ```markdown 拡張クエリ(download-mibs)のおかげで、以下のコマンドを使用してシステムについてさらに詳しく列挙することが可能です: ``` ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` **SNMP**にはホストに関する多くの情報が含まれており、興味深いものには次のようなものがあります:**ネットワークインターフェース**(IPv4および**IPv6**アドレス)、ユーザー名、稼働時間、サーバー/OSバージョン、**プロセス** (パスワードが含まれている可能性があります).... ### **危険な設定** **以下より** [**https://academy.hackthebox.com/module/112/section/1075**](https://academy.hackthebox.com/module/112/section/1075)\*\*\*\* | **設定** | **説明** | | ------------------------------------------------ | ------------------------------------------------------------------------------------- | | `rwuser noauth` | 認証なしで完全なOIDツリーにアクセスできます。 | | `rwcommunity <コミュニティ文字列> ` | リクエストの送信元に関係なく、完全なOIDツリーにアクセスできます。 | | `rwcommunity6 <コミュニティ文字列> ` | `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](cisco-snmp.md) {% endcontent-ref %} ## SNMPからRCEへ SNMPサービス内で値を**書き込む**ことを許可する**文字列**を持っている場合、それを悪用して**コマンドを実行**することができるかもしれません: {% content-ref url="snmp-rce.md" %} [snmp-rce.md](snmp-rce.md) {% endcontent-ref %} ## **大量のSNMP** [Braa ](https://github.com/mteg/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/](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データを迅速に解析することができます: ```bash grep -i "trap" *.snmp ``` ### ユーザー名/パスワード 興味のあるもう一つの領域はログです。MIBテーブル内にログを保持しているデバイスがあることがわかりました。これらのログには、ログオンの試行に失敗した記録も含まれていることがあります。TelnetやSSHを介してデバイスにログインしようとして、うっかりユーザー名としてパスワードを入力した最後の時を考えてみてください。私は通常、_fail_、_failed_、_login_ などのキーワードを検索し、価値のあるものがないかそのデータを調べます。 ```bash grep -i "login\|fail" *.snmp ``` ### メール ```bash 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 ``` \ **バグバウンティのヒント**: **Intigriti**に**登録**しましょう。ハッカーによって作られたプレミアムな**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**の報酬を獲得し始めましょう! {% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ会社**で働いていますか?**HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセス**したり、**HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加するか**、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。 * [**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを**共有**しましょう。