◄ BACK TO PROTOCOLS
HTB Academy · Module 112 · Section 12/21
Footprinting UDP 161/162 No Auth v1/v2 Community String
SNMP — SIMPLE NETWORK MANAGEMENT PROTOCOL
NETWORK MONITORING · MIB/OID · COMMUNITY STRINGS · ENUMERATION
Port Requests
UDP 161
Port Traps
UDP 162
Transport
UDP فقط
Default String
"public" ⚠️
v1/v2c Auth
لا يوجد!
Best Version
SNMPv3
نظرة عامة
ما هو SNMP؟

Simple Network Management Protocol — بروتوكول لمراقبة وإدارة أجهزة الشبكة عن بعد. يشمل: routers, switches, servers, IoT devices. يختلف عن SSH في إنه يراقب مئات الأجهزة دفعة وحدة بدون تدخل يدوي.

SNMP vs SSH
SSH: تدخل على جهاز واحد وتشغّل أوامر يدوياً
SNMP: تراقب وتدير مئات الأجهزة من مكان واحد تلقائياً
🔌 Ports
UDP 161 — Requests
أنت تسأل → الجهاز يجاوب (pull)
UDP 162 — Traps
الجهاز يرسل تنبيه تلقائياً (push)
💡 SNMP يستخدم UDP لأنه أسرع وأخف — مراقبة مئات الأجهزة بدون TCP overhead
🔑 Community String — كلمة المرور البسيطة

Community String = باسورد بسيط للوصول للمعلومات. يمشي clear-text على الشبكة!

ro = Read Only
rocommunity public
قراءة المعلومات فقط
rw = Read + Write 💀
rwcommunity public
قراءة + تعديل الإعدادات!
⚠️ "public" هو الـ Community String الافتراضي — كثير admins ما يغيرونه!
MIB & OID
📚 MIB — Management Information Base

قاموس موحد لكل الأجهزة — يضمن إن Cisco, HP, Dell, Linux, Windows كلهم يتكلمون نفس اللغة مع SNMP.

💡 MIB = كتاب الهاتف. OID = رقم الهاتف. تعرف الرقم → توصل للمعلومة على أي جهاز في العالم!
🔢 OID — Object Identifier

عنوان رقمي ثابت وموحد لكل معلومة — شجرة هرمية مثل مسارات الملفات:

# كل المعلومات تحت نفس "المجلد": 1.3.6.1.2.1.1.* ← System Information 1.3.6.1.2.1.1.1.0 = sysDescr ← وصف النظام + OS version 1.3.6.1.2.1.1.3.0 = sysUpTime ← وقت التشغيل 1.3.6.1.2.1.1.4.0 = sysContact ← إيميل المسؤول 🎯 1.3.6.1.2.1.1.5.0 = sysName ← اسم الجهاز 1.3.6.1.2.1.1.6.0 = sysLocation ← الموقع 1.3.6.1.2.1.25.6.* ← Installed Software ← packages مثبتة 🎯 1.3.6.1.2.1.25.4.* ← Running Processes ← processes شغّالة 1.3.6.1.2.1.2.* ← Network Interfaces ← الشبكة
🎯 من OID واحد تعرف: email المسؤول = username + كل software = CVEs محتملة!
📊 مثال من snmpwalk حقيقي
iso.3.6.1.2.1.1.1.0 = STRING: "Linux htb 5.11.0-34-generic x86_64" iso.3.6.1.2.1.1.4.0 = STRING: "mrb3n@inlanefreight.htb" ← username! iso.3.6.1.2.1.1.5.0 = STRING: "htb" iso.3.6.1.2.1.1.6.0 = STRING: "Sitting on the Dock of the Bay" # Software مثبت: iso.3.6.1.2.1.25.6.3.1.2.1235 = STRING: "proftpd-basic_1.3.6c" ← FTP! iso.3.6.1.2.1.25.6.3.1.2.1243 = STRING: "python3_3.8.2" iso.3.6.1.2.1.25.6.3.1.2.1234 = STRING: "procps_2:3.3.16"
🎯 mrb3n@inlanefreight.htb = username للـ brute force على كل الخدمات! proftpd = FTP server مثبت = هدف جديد!
إصدارات SNMP
📋 المقارنة الكاملة
الإصدارAuthenticationتشفيرالخطر
SNMPv1 لا يوجد! لا — clear-text أي شخص يقرأ ويعدل
SNMPv2c Community String فقط لا — clear-text String قابل للـ sniffing
SNMPv3 username + password ✅ نعم — pre-shared key ✅ الأأمن — بس أصعب إعداد
⚠️ كثير شركات لا تزال على v2c لأن التحديث لـ v3 معقد ويحتاج خبرة وتغيير مئات الأجهزة!
⚡ Traps — Port 162
Port 161 — Pull (عادي)
أنت تسأل → الجهاز يجاوب
"إيش CPU usage؟" → "45%"
Port 162 — Push (Traps)
الجهاز يرسل تلقائياً بدون طلب
"تنبيه: CPU وصل 95%!"
"تنبيه: خلل في الشبكة!"
الإعدادات — snmpd.conf
ملف الإعداد الافتراضي
cat /etc/snmp/snmpd.conf | grep -v "#" | sed -r '/^\s*$/d' sysLocation Sitting on the Dock of the Bay sysContact Me <me@example.org> sysServices 72 master agentx agentaddress 127.0.0.1,[::1] view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1 rocommunity public default -V systemonly ← قراءة فقط ✅ rocommunity6 public default -V systemonly ← IPv6 rouser authPrivUser authpriv -V systemonly ← SNMPv3 user
💡 -V systemonly = محدود لمعلومات النظام الأساسية فقط — هاد نسبياً آمن
📋 شرح الإعدادات
الإعدادالوظيفة
sysLocationموقع الجهاز — يظهر في SNMP queries
sysContactإيميل المسؤول — مهم في الـ pentest!
agentaddressعلى أي IP يستمع SNMP
rocommunityقراءة فقط بـ Community String
rwcommunityقراءة + كتابة — خطير!
-V systemonlyتحديد الـ OIDs المتاحة
Dangerous Settings
💀 الإعدادات الخطيرة
الإعدادالخطر
rwuser noauthوصول كامل للـ OID tree بدون authentication!
rwcommunity public 0.0.0.0قراءة + كتابة من أي IP في العالم!
rwcommunity6 public ::نفس الخطر على IPv6
💥 ليش rw خطير جداً؟
rwcommunity public 0.0.0.0 مفعّل
تغيير routing tables على الـ router
تغيير الـ Community String
تعطيل الجهاز بالكامل
تحكم كامل بالشبكة 💥
الأدوات
اختر الأداة:
🚶snmpwalk
🔍onesixtyone
braa
🚶 snmpwalk — الأشمل

يمشي على كل الـ OID tree ويطلع كل المعلومات المتاحة:

snmpwalk -v2c -c public 10.129.14.128 # النتيجة: iso.3.6.1.2.1.1.1.0 = "Linux htb 5.11.0-34-generic x86_64" iso.3.6.1.2.1.1.4.0 = "mrb3n@inlanefreight.htb" ← email المسؤول! iso.3.6.1.2.1.1.5.0 = "htb" iso.3.6.1.2.1.25.6.3.1.2.1235 = "proftpd-basic_1.3.6c" ← FTP installed! iso.3.6.1.2.1.25.6.3.1.2.1243 = "python3_3.8.2"
💡 Flags:
-v2c = إصدار SNMPv2c
-c public = Community String
🔍 onesixtyone — Brute Force Community String

لو ما تعرف الـ Community String — جرب قائمة:

التثبيت:
sudo apt install onesixtyone
الاستخدام:
onesixtyone -c /opt/useful/seclists/Discovery/SNMP/snmp.txt 10.129.14.128 Scanning 1 hosts, 3220 communities 10.129.14.128 [public] Linux htb 5.11.0-37-generic ^^^^^^^^ لاقى Community String = "public"!
✅ لاقيت الـ Community String → هلأ استخدم snmpwalk أو braa
⚡ braa — أسرع من snmpwalk

بعد ما تعرف الـ Community String — يجيب المعلومات بشكل مختصر وأسرع:

التثبيت:
sudo apt install braa
الاستخدام:
# Syntax: braa <community string>@<IP>:.1.3.6.* # مثال: braa public@10.129.14.128:.1.3.6.* 10.129.14.128:20ms:.1.3.6.1.2.1.1.1.0:Linux htb 5.11.0-34-generic x86_64 10.129.14.128:20ms:.1.3.6.1.2.1.1.4.0:mrb3n@inlanefreight.htb 10.129.14.128:20ms:.1.3.6.1.2.1.1.5.0:htb 10.129.14.128:20ms:.1.3.6.1.2.1.1.6.0:US
💡 braa أسرع من snmpwalk — مناسب لو عندك أجهزة كثيرة تفحصها
📊 ترتيب استخدام الأدوات
🔍
onesixtyone
اكتشف Community String
🚶
snmpwalk
كل المعلومات شامل
braa
سريع على أجهزة كثيرة
Methodology
⛓️ خطوات الـ SNMP Footprinting
1
Nmap — اكتشاف SNMP
تحقق إذا SNMP مفتوح
sudo nmap -sU -p161 TARGET
💡 -sU = UDP scan (SNMP يشتغل على UDP)
2
onesixtyone — اكتشاف Community String
جرب "public" أول، لو ما شتغل استخدم wordlist
onesixtyone -c /opt/useful/seclists/Discovery/SNMP/snmp.txt TARGET
3
snmpwalk — جمع كل المعلومات
بعد ما تعرف الـ Community String
snmpwalk -v2c -c public TARGET
🎯 ابحث عن:
• sysContact = email المسؤول = username
• Installed packages = CVEs محتملة
• Running processes = خدمات مثبتة
4
تحقق من rw access
لو rwcommunity مفعّل = تحكم بالجهاز!
snmpwalk -v2c -c private TARGET # جرب "private" كـ rw community string
Explained — Q&A
🌐 الأساسيات
إيش الفرق بين SNMP وSSH؟
SSH = تدخل على جهاز واحد وتشغّل أوامر يدوياً. SNMP = تراقب وتدير مئات الأجهزة من مكان واحد تلقائياً. مسؤول الشبكة بدل ما يدخل SSH على 100 جهاز، يفتح برنامج SNMP واحد يشوف كلهم.
ليش SNMP يستخدم UDP بدل TCP؟
لأنه أسرع وأخف. SNMP يراقب مئات الأجهزة — لو TCP كل جهاز يحتاج handshake = overhead ضخم. كمان لو packet تنبيه ضاعت، ما مهم — الـ packet الجاية راح تقول نفس الشيء أو أسوأ.
🔢 MIB و OID
هل أرقام OID تختلف بين Cisco وLinux؟
لا — الأرقام ثابتة وموحدة على كل الأجهزة! 1.3.6.1.2.1.1.4.0 = sysContact على Cisco وLinux وWindows. هاد هو هدف MIB — معيار عالمي موحد. الاستثناء: 1.3.6.1.4.1.* = أرقام خاصة بكل شركة.
🔑 Community String
ليش "public" خطير كـ Community String؟
لأنه الافتراضي على معظم الأجهزة وكثير admins ما يغيرونه. كمان يمشي clear-text على الشبكة — أي sniffing يكشفه. snmpwalk -v2c -c public TARGET = تقرأ كل معلومات الجهاز بدون أي باسورد حقيقي!
إيش الفرق بين ro وrw؟
ro = read only: تقرأ المعلومات فقط. rw = read write: تقرأ وتعدّل إعدادات الجهاز! لو rwcommunity مفعّل تقدر تغير routing tables، تعطّل الجهاز، تغير الـ community string نفسه = تحكم كامل بالشبكة.