.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
161,162,10161,10162/udp - SNMPのペンテスト
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksおよびHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
バグバウンティのヒント: Intigritiにサインアップして、ハッカーによって作成されたプレミアムバグバウンティプラットフォームである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
**オブジェクト識別子(OID)**は重要な役割を果たします。これらのユニークな識別子は、**Management Information Base(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。
1.3.6.1.2.1内のようなよく知られたOIDがあり、これはMIB-2で定義されたSimple Network Management Protocol(SNMP)変数を参照しています。そして、この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では、誤ったコミュニティ文字列を使用するとサーバーが応答しないため、サーバーが応答した場合は有効なコミュニティ文字列が使用されたことになります。
ポート
- SNMPエージェントはUDPポート161でリクエストを受信します。
- マネージャーはポート162で通知(トラップおよび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バージョン、およびプロセス
(パスワードを含む場合があります)....
危険な設定
ネットワーク管理の領域では、特定の構成とパラメータが包括的な監視と制御を確保するために重要です。
アクセス設定
ネットワーク管理において、重要な設定の1つは、完全なOIDツリーへのアクセスを可能にする2つのメイン設定です。
-
**
rwuser noauth
**は、認証を必要とせずにOIDツリーへの完全なアクセスを許可するように設定されています。この設定は直感的で制限なしのアクセスを可能にします。 -
より具体的な制御のために、次のようにアクセスを許可できます:
- IPv4アドレスに対しては**
rwcommunity
**、および - IPv6アドレスに対しては**
rwcommunity6
**。
両方のコマンドはコミュニティ文字列と関連するIPアドレスが必要であり、リクエストの出所に関係なく完全なアクセスを提供します。
Microsoft Windows用のSNMPパラメータ
Windowsシステムのさまざまな側面を監視するために使用される一連のManagement Information Base (MIB)値がSNMPを介して利用されます:
- システムプロセス:
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 {% endcontent-ref %}
SNMPからRCEへ
SNMPサービス内で値を書き込むことを許可する文字列を持っている場合、それを悪用してコマンドを実行することができるかもしれません:
{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}
Massive SNMP
Braa は大規模なSNMPスキャナーです。このようなツールの意図された使用法は、もちろんSNMPクエリを実行することですが、net-snmpのsnmpwalkとは異なり、数十から数百のホストを同時にクエリし、1つのプロセスで行うことができます。そのため、システムリソースをほとんど消費せず、非常に高速にスキャンを実行します。
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 MIBデータ(1.3.6.1.2.1.1.1.0)を抽出してデバイスを特定することから始まります。これはgrepコマンドを使用して行われます:
grep ".1.3.6.1.2.1.1.1.0" *.snmp
プライベートストリングの特定
重要なステップは、特にCisco IOSルーターで組織が使用しているプライベートコミュニティストリングを特定することです。このストリングを使用すると、ルーターからランニング構成を抽出できます。特定は、しばしばgrepコマンドを使用してSNMPトラップデータを解析し、「trap」という単語を検索することに依存しています。
grep -i "trap" *.snmp
ユーザー名/パスワード
MIBテーブルに保存されたログは、失敗したログオン試行を調べるために調べられます。これには、ユーザー名として入力されたパスワードが誤って含まれる可能性があります。fail、failed、または_login_などのキーワードを検索して貴重なデータを見つけます。
grep -i "login\|fail" *.snmp
Eメール
最後に、データからEメールアドレスを抽出するために、正規表現を使用したgrepコマンドが使用され、Eメール形式に一致するパターンに焦点を当てます:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
SNMP値の変更
_NetScanTools_を使用して値を変更できます。これを行うにはプライベートストリングを知る必要があります。
スプーフィング
SMNPサービスへのクエリを許可するACLがある場合、UDPパケット内のこれらのアドレスの1つをスプーフィングしてトラフィックを嗅視できます。
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" %}
**htARTE (HackTricks AWS Red Team Expert)**で、ゼロからヒーローまでAWSハッキングを学びましょう!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのグッズを入手してください
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つけてください
- 💬 Discordグループやtelegramグループに参加したり、Twitter 🐦 @carlospolopmでフォローしてください。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出することで、あなたのハッキングテクニックを共有してください。