hacktricks/network-services-pentesting/pentesting-snmp/README.md
2023-07-07 23:42:27 +00:00

22 KiB
Raw Blame History

161,162,10161,10162/udp - SNMPのペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


バグバウンティのヒント: Intigritiサインアップしてください。これは、ハッカーによって作成されたプレミアムなバグバウンティプラットフォームです!今すぐhttps://go.intigriti.com/hacktricksに参加して、最大**$100,000**のバウンティを獲得しましょう!

{% embed url="https://go.intigriti.com/hacktricks" %}

基本情報

**SNMPSimple 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 BaseMIBが作成されました。MIBは、デバイス情報を格納するための独立した形式です。MIBは、デバイスのすべてのクエリ可能なSNMPオブジェクト標準化されたツリー階層でリストされているテキストファイルです。少なくとも1つのObject IdentifierOIDを含み、必要な一意のアドレス名前に加えて、各オブジェクトのタイプ、アクセス権、および説明に関する情報も提供します。
MIBファイルは、Abstract Syntax Notation OneASN.1ベースのASCIIテキスト形式で書かれています。MIBにはデータは含まれていませんが、どの情報をどこで見つけるか、それがどのように見えるか、特定のOIDに対する返り値や使用されるデータ型などを説明しています。

OID

OIDオブジェクト識別子の略です。OIDはMIB階層内の管理対象オブジェクトを一意に識別します。これはツリーとして表現され、そのレベルは異なる組織によって割り当てられます。トップレベルのMIBオブジェクトIDOIDは、異なる標準組織に属しています。
ベンダーは、自社製品の管理対象オブジェクトを含むプライベートブランチを定義します。

ウェブ上でOIDツリーをナビゲートするには、http://www.oid-info.com/cgi-bin/display?tree=#focusにアクセスするか、http://oid-info.com/get/1.3.6.1.2.1.1にアクセスしてOIDの意味を確認できます(例:1.3.6.1.2.1.1)。
1.3.6.1.2.1内のようなよく知られたOIDもあります。これは、MIB-2で定義されたSimple Network Management ProtocolSNMP変数を参照しています。そして、この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または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では、不正なコミュニティストリングを使用すると、サーバは応答しません。したがって、応答がある場合は、有効なコミュニティストリングが使用されたことになります。

ポート

Brute-Force Community String (v1 and v2c)

コミュニティストリングを推測するために、辞書攻撃を実行することができます。ここでSNMPに対してブルートフォース攻撃を実行するさまざまな方法を確認してください。よく使用されるコミュニティストリングはpublicです。

Enumerating 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> IPv6を使用する点を除いて、rwcommunityと同じアクセスを提供します。

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 %}

Massive 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.*

これは、手動で処理することができないほどの多くの情報を抽出することができます。

では、最も興味深い情報を探してみましょう(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を介してデバイスにログインした際に、パスワードをユーザー名として誤って入力したことがあるか思い出してみてください。私は通常、failfailed、または_login_などのキーワードを検索し、そのデータを調べて価値のある情報がないか確認します。

grep -i "login\|fail" *.snmp

メール

Emails are a common communication method used by individuals and organizations. They are often used for sending and receiving messages, files, and other types of information.

メールは、個人や組織によってよく使われるコミュニケーション手段です。メッセージやファイル、その他の情報を送受信するためによく使用されます。

Emails are typically sent and received through email servers, which are responsible for handling the transmission and delivery of emails.

メールは通常、メールサーバーを介して送受信されます。メールサーバーは、メールの送信と配信を担当します。

When conducting a penetration test, it is important to assess the security of the email infrastructure to identify any vulnerabilities that could be exploited by an attacker.

ペネトレーションテストを実施する際には、攻撃者によって悪用される可能性のある脆弱性を特定するために、メールインフラストラクチャのセキュリティを評価することが重要です。

Some common techniques used to assess the security of emails include:

  • Email Spoofing: This technique involves forging the sender's email address to make it appear as if the email is coming from a different source. It can be used for phishing attacks or to bypass email filters.

  • Email Header Analysis: By analyzing the email headers, it is possible to gather information about the email's origin, route, and other details that can help in identifying any suspicious activity.

  • Email Content Analysis: Analyzing the content of the email can provide insights into the intentions and motives of the sender. It can also help in identifying any malicious attachments or links.

  • Email Server Misconfigurations: Misconfigurations in email servers can lead to security vulnerabilities. By identifying and exploiting these misconfigurations, an attacker can gain unauthorized access to the email system.

  • Email Password Cracking: If an attacker gains access to an email account, they may attempt to crack the password to gain further access or to impersonate the account owner.

These techniques can help in identifying and mitigating potential security risks associated with emails. It is important to regularly assess and update the security measures in place to protect against email-based attacks.

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp

SNMP値の変更

_NetScanTools_を使用して値を変更することができます。そのためには、プライベートストリングを知る必要があります。

スプーフィング

SNMPサービスのクエリを許可するIPアドレスが制限されている場合、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 🎥