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

287 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 161,162,10161,10162/udp - SNMPのペンテスト
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**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 IdentifierOID`を含み、**一意のアドレス**と**名前**に加えて、各オブジェクトのタイプ、アクセス権、および説明に関する情報も提供します。\
MIBファイルは、`Abstract Syntax Notation OneASN.1`ベースのASCIIテキスト形式で記述されます。**MIBにはデータが含まれていません**が、**どこでどの情報を見つけるか**や、それがどのように見えるか、特定のOIDの返り値、または使用されるデータ型について説明します。
### OIDs
**オブジェクト識別子OID**は重要な役割を果たします。これらのユニークな識別子は、**Management Information Base (MIB)** 内のオブジェクトを管理するために設計されています。
MIBオブジェクトIDOIDの最上位レベルは、さまざまな標準設定組織に割り当てられています。これらのトップレベルでは、グローバル管理慣行と標準の枠組みが確立されています。
さらに、ベンダーはプライベートブランチを設立する権利を与えられています。これらのブランチ内で、彼らは**自社の製品ラインに関連する管理オブジェクトを含める権限**を持っています。このシステムにより、異なるベンダーや標準間でさまざまなオブジェクトを識別および管理するための構造化された方法が確立されています。
![](../../.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)にアクセスしてください。\
[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)内のような**よく知られたOID**があり、これはMIB-2で定義されたSimple Network Management Protocol (SNMP)変数を参照しています。そして、このOIDから**派生するOID**から、いくつかの興味深いホストデータ(システムデータ、ネットワークデータ、プロセスデータなど)を取得できます。
### **OIDの例**
[**ここからの例**](https://www.netadmintools.com/snmp-mib-and-oids/):
**`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またはDepartment of Defenseであり、最初にインターネットを確立した組織です。
* 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では、**誤った**コミュニティ文字列を使用すると、サーバーは**応答しません**。したがって、応答がある場合、**有効なコミュニティ文字列が使用**されています。
## ポート
[Wikipediaから](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
* SNMPエージェントはUDPポート**161**でリクエストを受信します。
* マネージャーはポート**162**で通知([トラップ](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" <target>
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```
拡張クエリdownload-mibsのおかげで、次のコマンドを使用してシステムについてさらに詳細な情報を列挙することができます
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP**には、ホストに関する多くの情報が含まれており、興味深い情報には、**ネットワークインターフェース**IPv4および**IPv6**アドレス)、ユーザー名、稼働時間、サーバー/OSバージョン、および**プロセス**(パスワードを含む場合があります)があります。
### **危険な設定**
ネットワーク管理の領域では、特定の構成とパラメータが包括的な監視と制御を確保するために重要です。
### アクセス設定
ネットワーク管理において、完全なOIDツリーへのアクセスを可能にする2つの主要な設定があります
1. **`rwuser noauth`**は、認証を必要とせずにOIDツリーへの完全なアクセスを許可するために設定されています。この設定は直感的で制限なしのアクセスを可能にします。
2. より具体的な制御のために、次のようにアクセスを許可できます:
* **IPv4**アドレスに対しては**`rwcommunity`**、および
* **IPv6**アドレスに対しては**`rwcommunity6`**。
両方のコマンドは**コミュニティ文字列**と関連するIPアドレスが必要で、リクエストの出所に関係なく完全なアクセスを提供します。
### Microsoft Windows用のSNMPパラメータ
Windowsシステムのさまざまな側面を監視するために使用される一連の**Management Information BaseMIB値**
* **システムプロセス**`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](cisco-snmp.md)
{% endcontent-ref %}
## SNMPからRCEへ
SNMPサービス内で**値を書き込む**ことを許可する**文字列**を持っている場合、それを悪用して**コマンドを実行**する可能性があります:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **Massive SNMP**
[Braa ](https://github.com/mteg/braa)は大規模なSNMPスキャナーです。このようなツールの意図された使用法は、もちろんSNMPクエリを実行することですが、net-snmpのsnmpwalkとは異なり、数十から数百のホストを同時にクエリし、1つのプロセスで行うことができます。そのため、システムリソースをほとんど消費せず、非常に高速にスキャンを実行します。
Braaは独自のSNMPスタックを実装しているため、net-snmpのようなSNMPライブラリは必要ありません。
**構文:** braa \[コミュニティ文字列]@\[SNMPサーバーのIP]:\[iso id]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
### **デバイス**
プロセスは、各ファイルから**sysDesc MIBデータ**1.3.6.1.2.1.1.1.0)を抽出してデバイスを識別することから始まります。これは**grepコマンド**を使用して実行されます。
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **プライベートストリングの特定**
重要なステップは、特にCisco IOSルーターで組織が使用している**プライベートコミュニティストリング**を特定することです。このストリングを使用すると、ルーターから**ランニング構成**を抽出できます。特定は、**grepコマンド**を使用してSNMPトラップデータを解析することに頼ることがよくあります。
```bash
grep -i "trap" *.snmp
```
### **ユーザー名/パスワード**
MIBテーブルに保存されたログは、**失敗したログオン試行**を調べるために調べられます。これには、ユーザー名として入力されたパスワードが誤って含まれる可能性があります。価値のあるデータを見つけるために、_fail_、_failed_、または_login_などのキーワードが検索されます。
```bash
grep -i "login\|fail" *.snmp
```
### **Eメール**
最後に、データから**Eメールアドレス**を抽出するために、正規表現を使用した**grepコマンド**が使用され、Eメール形式に一致するパターンに焦点を当てます
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## SNMP値の変更
_**NetScanTools**_を使用して**値を変更**できます。これを行うには**プライベートストリング**を知る必要があります。
## スプーフィング
SMNPサービスへのクエリを許可するACLがある場合、UDPパケット内のアドレスをスプーフィングしてトラフィックを嗅視できます。
## SNMP構成ファイルの調査
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味がある場合、そして**解読不能なものをハック**したい場合 - **採用中です!**_流暢なポーランド語の読み書きが必要です_
{% 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
```
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または**HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する
* **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>