20 KiB
161,162,10161,10162/udp - SNMPペネトレーションテスト
AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をチェック!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションをチェックする
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦 @carlospolopmをフォローする
- HackTricksとHackTricks Cloudのgithubリポジトリに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アクセスがメーカー間や異なるクライアント-サーバー組み合わせで機能するように、管理情報ベース(MIB)が作成されました。MIBは、デバイス情報を格納するための独立した形式です。MIBは、デバイスの問い合わせ可能なSNMPオブジェクトが標準化されたツリー階層でリストされたテキストファイルです。少なくとも1つのオブジェクト識別子
(OID
)を含み、必要なユニークなアドレスと名前に加えて、該当オブジェクトのタイプ、アクセス権、説明についての情報も提供します。
MIBファイルは、抽象構文記法ワン
(ASN.1
)ベースのASCIIテキスト形式で書かれています。MIBにはデータが含まれていませんが、どの情報をどこで見つけるか、どのように見えるか、特定のOIDの戻り値、または使用されるデータタイプについて説明します。
OIDs
OIDはオブジェクト識別子を意味します。OIDは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があり、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 – ポイントの状態
(例は こちらから取られました)
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で通知(トラップおよびInformRequests)を受信します。
- トランスポート層セキュリティまたはデータグラムトランスポート層セキュリティを使用する場合、リクエストはポート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 <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を介してデバイスにログインし、うっかりユーザー名としてパスワードを入力した最後の時間を考えてみてください。私は通常、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
<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>