21 KiB
161,162,10161,10162/udp - SNMPのペネトレーションテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか?HackTricksで会社の広告を掲載したいですか?または、最新版のPEASSを入手したり、HackTricksをPDFでダウンロードしたいですか?サブスクリプションプランをチェックしてください!
- The PEASS Familyを発見し、独占的なNFTsのコレクションを手に入れましょう。
- 公式のPEASS & HackTricksグッズを入手しましょう。
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出して、ハッキングのコツを共有してください。
バグバウンティのヒント: 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アクセスが機能するように、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)は異なる標準組織に属しています。 ベンダーは、自社製品の管理対象オブジェクトを含むプライベートブランチを定義します。
こちらのウェブサイトから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。
いくつかのよく知られたOIDがあります。例えば、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)
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およびInformRequests)を受信します。
- Transport Layer SecurityまたはDatagram Transport Layer Securityを使用する場合、リクエストはポート 10161 で受信され、通知はポート 10162 に送信されます。
コミュニティ文字列のブルートフォース (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 <コミュニティ文字列> <IPv4アドレス> |
リクエストの送信元に関係なく、完全なOIDツリーにアクセスできます。 |
rwcommunity6 <コミュニティ文字列> <IPv6アドレス> |
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 [コミュニティ文字列]@[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を介してデバイスにログインしようとして、うっかりユーザー名としてパスワードを入力した最後の時を考えてみてください。私は通常、fail、failed、login などのキーワードを検索し、価値のあるものがないかそのデータを調べます。
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
バグバウンティのヒント: Intigritiに登録しましょう。ハッカーによって作られたプレミアムなバグバウンティプラットフォームです!今すぐhttps://go.intigriti.com/hacktricksに参加して、最大**$100,000**の報酬を獲得し始めましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか?HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?サブスクリプションプランをチェックしてください!
- The PEASS Familyを発見しましょう。私たちの独占的なNFTsのコレクションです。
- 公式のPEASS & HackTricksグッズを手に入れましょう。
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出して、あなたのハッキングのコツを共有しましょう。