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

301 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 - Pentesting SNMP
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、ハッキング不可能なものをハッキングしたい方 - **私たちは採用しています!** (_流暢なポーランド語の読み書きが必要です_)。
{% embed url="https://www.stmcyber.com/careers" %}
## 基本情報
**SNMP - シンプルネットワーク管理プロトコル**は、ネットワーク内のさまざまなデバイスルーター、スイッチ、プリンター、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ファイルは、`抽象構文表記法1ASN.1`に基づくASCIIテキストフォーマットで記述されています。**MIBはデータを含まない**が、**どこにどの情報があるか**、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。
### OIDs
**オブジェクト識別子OIDs**は重要な役割を果たします。これらの一意の識別子は、**管理情報ベースMIB**内のオブジェクトを管理するために設計されています。
MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな標準設定機関に割り当てられています。これらの上位レベル内で、グローバルな管理慣行と標準の枠組みが確立されます。
さらに、ベンダーはプライベートブランチを設立する自由が与えられています。これらのブランチ内では、**自社の製品ラインに関連する管理オブジェクトを含める自主性**があります。このシステムは、異なるベンダーや標準間でのさまざまなオブジェクトを識別し管理するための構造化された方法を確保します。
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
ここから**OIDツリーをナビゲート**できます: [http://www.oid-info.com/cgi-bin/display?tree=#focus](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](http://oid-info.com/get/1.3.6.1.2.1.1).\
**よく知られたOID**には、MIB-2で定義されたシンプルネットワーク管理プロトコルSNMP変数を参照する[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)内のものがあります。また、この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または国防総省で、最初にインターネットを確立した組織です。
* 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では、**悪い**コミュニティ文字列を使用すると、サーバーは**応答しません**。したがって、応答がある場合は、**有効なコミュニティ文字列が使用された**ことになります。
## ポート
[ウィキペディアから](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))を受信します。
* [トランスポート層セキュリティ](https://en.wikipedia.org/wiki/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
```
extended queries (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. より具体的な制御のために、次のようにアクセスを付与できます:
* **`rwcommunity`** は**IPv4**アドレス用、そして
* **`rwcommunity6`** は**IPv6**アドレス用です。
両方のコマンドは**コミュニティ文字列**と関連するIPアドレスを必要とし、リクエストの起源に関係なく完全なアクセスを提供します。
### Microsoft WindowsのSNMPパラメータ
一連の**管理情報ベースMIB値**が、SNMPを通じてWindowsシステムのさまざまな側面を監視するために利用されます
* **システムプロセス**: `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 %}
## **大規模SNMP**
[Braa](https://github.com/mteg/braa)は、大規模SNMPスキャナーです。このようなツールの意図された使用法はもちろん、SNMPクエリを行うことですが、net-snmpのsnmpwalkとは異なり、数十または数百のホストに同時に、そして単一のプロセスでクエリを行うことができます。したがって、非常に少ないシステムリソースを消費し、スキャンを非常に速く行います。
Braaは独自のSNMPスタックを実装しているため、net-snmpのようなSNMPライブラリは必要ありません。
**構文:** braa \[コミュニティ文字列\]@\[\[SNMPサーバーのIP\]:\[iso id\]
```bash
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 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コマンド**を使用して「trap」という単語を含むSNMPトラップデータを分析することに依存することが多いです。
```bash
grep -i "trap" *.snmp
```
### **ユーザー名/パスワード**
MIBテーブルに保存されたログは、**ログオン試行の失敗**を調べるために検査され、これにはユーザー名として入力されたパスワードが偶然含まれることがあります。_fail_、_failed_、または _login_ などのキーワードが、貴重なデータを見つけるために検索されます:
```bash
grep -i "login\|fail" *.snmp
```
### **Emails**
最後に、データから**メールアドレス**を抽出するために、**grepコマンド**を使用し、メール形式に一致するパターンに焦点を当てた正規表現を使用します:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## SNMP値の変更
_**NetScanTools**_ を使用して **値を変更** できます。そのためには **プライベート文字列** を知っている必要があります。
## スプーフィング
ACLが特定のIPのみがSNMPサービスをクエリできるように制限している場合、UDPパケット内でこれらのアドレスの1つをスプーフィングし、トラフィックをスニッフィングできます。
## SNMP設定ファイルの確認
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (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
```
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}