mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
264 lines
14 KiB
Markdown
264 lines
14 KiB
Markdown
# 161,162,10161,10162/udp - Pentesting SNMP
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
|
||
## Temel Bilgiler
|
||
|
||
**SNMP - Basit Ağ Yönetim Protokolü**, ağdaki farklı cihazları (yönlendiriciler, anahtarlar, yazıcılar, IoT'ler gibi) izlemek için kullanılan bir protokoldür.
|
||
```
|
||
PORT STATE SERVICE REASON VERSION
|
||
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
|
||
```
|
||
> [!TIP]
|
||
> SNMP ayrıca **traps** için **162/UDP** portunu kullanır. Bunlar, **SNMP sunucusundan istemciye açıkça talep edilmeden gönderilen veri paketleridir**.
|
||
|
||
### MIB
|
||
|
||
SNMP erişiminin üreticiler arasında ve farklı istemci-sunucu kombinasyonlarıyla çalışmasını sağlamak için **Yönetim Bilgi Tabanı (MIB)** oluşturulmuştur. MIB, **cihaz bilgilerini depolamak için bağımsız bir formattır**. Bir MIB, bir cihazın sorgulanabilir **SNMP nesnelerinin** listelendiği **standartlaştırılmış** bir ağaç hiyerarşisinde bulunan bir **metin** dosyasıdır. En az bir `Nesne Tanımlayıcısı` (`OID`) içerir; bu, gerekli **benzersiz adres** ve **isim** ile birlikte, ilgili nesnenin türü, erişim hakları ve açıklaması hakkında bilgi sağlar.\
|
||
MIB dosyaları, `Soyut Söz Dizimi Notasyonu Bir` (`ASN.1`) tabanlı ASCII metin formatında yazılmıştır. **MIB'ler veri içermez**, ancak **hangi bilginin nerede bulunacağını** ve neye benzediğini açıklar; belirli OID için dönen değerleri veya hangi veri türünün kullanıldığını belirtir.
|
||
|
||
### OIDs
|
||
|
||
**Nesne Tanımlayıcıları (OIDs)** kritik bir rol oynar. Bu benzersiz tanımlayıcılar, bir **Yönetim Bilgi Tabanı (MIB)** içindeki nesneleri yönetmek için tasarlanmıştır.
|
||
|
||
MIB nesne kimliklerinin en yüksek seviyeleri, çeşitli standart belirleyici kuruluşlara tahsis edilmiştir. Bu üst seviyelerde, küresel yönetim uygulamaları ve standartları için çerçeve oluşturulmaktadır.
|
||
|
||
Ayrıca, satıcılara özel dallar oluşturma özgürlüğü verilmektedir. Bu dallar içinde, kendi ürün yelpazelerine ilişkin yönetilen nesneleri ekleme **özerkliğine** sahiptirler. Bu sistem, farklı satıcılar ve standartlar arasında geniş bir nesne yelpazesini tanımlama ve yönetme için yapılandırılmış ve organize bir yöntem sağlar.
|
||
|
||
.png>)
|
||
|
||
Bir **OID ağacında** web üzerinden **gezinmek** için buradan ulaşabilirsiniz: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) veya **bir OID'nin ne anlama geldiğini görmek için** (örneğin `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) adresine erişebilirsiniz.\
|
||
[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) içinde tanımlanan MIB-2'ye atıfta bulunan bazı **iyi bilinen OID'ler** vardır. Ve bu OID'lerden **bekleyen OID'ler** ile bazı ilginç ana bilgisayar verileri (sistem verileri, ağ verileri, süreç verileri...) elde edebilirsiniz.
|
||
|
||
### **OID Örneği**
|
||
|
||
[**Buradan örnek**](https://www.netadmintools.com/snmp-mib-and-oids/):
|
||
|
||
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
|
||
|
||
Bu adresin ayrıntılı açıklaması:
|
||
|
||
- 1 – buna ISO denir ve bu bir OID olduğunu belirtir. Bu nedenle tüm OID'ler "1" ile başlar.
|
||
- 3 – buna ORG denir ve cihazı üreten organizasyonu belirtmek için kullanılır.
|
||
- 6 – bu, interneti ilk kuran organizasyon olan Savunma Bakanlığı'dır.
|
||
- 1 – bu, tüm iletişimlerin İnternet üzerinden gerçekleşeceğini belirtmek için internetin değeridir.
|
||
- 4 – bu değer, bu cihazın özel bir organizasyon tarafından yapıldığını ve devlet tarafından yapılmadığını belirler.
|
||
- 1 – bu değer, cihazın bir işletme veya ticari varlık tarafından yapıldığını belirtir.
|
||
|
||
Bu ilk altı değer, tüm cihazlar için genellikle aynıdır ve size temel bilgileri verir. Bu sayı dizisi, cihaz devlet tarafından yapıldığında hariç, tüm OID'ler için aynı olacaktır.
|
||
|
||
Sonraki sayı grubuna geçelim.
|
||
|
||
- 1452 – bu cihazı üreten organizasyonun adını verir.
|
||
- 1 – cihazın türünü açıklar. Bu durumda, bir alarm saatidir.
|
||
- 2 – bu cihazın uzaktan terminal birimi olduğunu belirler.
|
||
|
||
Geri kalan değerler, cihaza özgü bilgileri verir.
|
||
|
||
- 5 – belirli bir alarm noktasını belirtir.
|
||
- 1 – cihazdaki belirli nokta
|
||
- 3 – port
|
||
- 21 – portun adresi
|
||
- 1 – port için gösterim
|
||
- 4 – nokta numarası
|
||
- 7 – noktanın durumu
|
||
|
||
### SNMP Sürümleri
|
||
|
||
SNMP'nin 2 önemli sürümü vardır:
|
||
|
||
- **SNMPv1**: Ana sürüm, hala en yaygın olanıdır, **kimlik doğrulama bir dizeye** (topluluk dizesi) dayanır ve **düz metin** içinde iletilir (tüm bilgiler düz metin olarak iletilir). **Sürüm 2 ve 2c** de **düz metin** içinde trafik gönderir ve **kimlik doğrulama olarak bir topluluk dizesi kullanır**.
|
||
- **SNMPv3**: Daha iyi bir **kimlik doğrulama** biçimi kullanır ve bilgiler **şifreli** olarak iletilir (bir **sözlük saldırısı** gerçekleştirilebilir ancak SNMPv1 ve v2'ye göre doğru kimlik bilgilerini bulmak çok daha zor olacaktır).
|
||
|
||
### Topluluk Düzeyleri
|
||
|
||
Daha önce belirtildiği gibi, **MIB'de saklanan bilgilere erişmek için sürüm 1 ve 2/2c'de topluluk dizesini, sürüm 3'te ise kimlik bilgilerini bilmeniz gerekir.**\
|
||
**2 tür topluluk dizesi** vardır:
|
||
|
||
- **`public`** esasen **sadece okuma** işlevleri
|
||
- **`private`** **Okuma/Yazma** genel olarak
|
||
|
||
**Bir OID'nin yazılabilirliği, kullanılan topluluk dizesine bağlıdır**, bu nedenle **"public"** kullanıldığını bulsanız bile, bazı değerleri **yazma** yeteneğine sahip olabilirsiniz. Ayrıca, her zaman **"Sadece Okuma"** olan nesneler de **mevcut olabilir**.\
|
||
Bir nesneye **yazmaya** çalıştığınızda **`noSuchName` veya `readOnly` hatası** alınır.**
|
||
|
||
Sürümler 1 ve 2/2c'de **kötü** bir topluluk dizesi kullanırsanız, sunucu **yanıt vermez**. Yani, yanıt verirse, **geçerli bir topluluk dizesi kullanılmıştır**.
|
||
|
||
## Portlar
|
||
|
||
[Wikipedia'dan](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol):
|
||
|
||
- SNMP ajanı, UDP portu **161** üzerinde istekleri alır.
|
||
- Yönetici, port **162** üzerinde bildirimleri ( [Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) ve [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) alır.
|
||
- [Taşıma Katmanı Güvenliği](https://en.wikipedia.org/wiki/Transport_Layer_Security) veya [Datagram Taşıma Katmanı Güvenliği](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security) ile kullanıldığında, istekler port **10161** üzerinde alınır ve bildirimler port **10162**'ye gönderilir.
|
||
|
||
## Brute-Force Topluluk Dizesi (v1 ve v2c)
|
||
|
||
**Topluluk dizesini tahmin etmek için** bir sözlük saldırısı gerçekleştirebilirsiniz. SNMP'ye karşı bir brute-force saldırısı gerçekleştirmenin [farklı yollarını buradan kontrol edin](../../generic-hacking/brute-force.md#snmp). Sık kullanılan bir topluluk dizesi `public`'dir.
|
||
|
||
## SNMP'yi Sıralama
|
||
|
||
Cihazdan toplanan **her OID'nin ne anlama geldiğini** görmek için aşağıdakileri yüklemeniz önerilir:
|
||
```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
|
||
```
|
||
Geçerli bir topluluk dizesini biliyorsanız, veriye **SNMPWalk** veya **SNMP-Check** kullanarak erişebilirsiniz:
|
||
```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
|
||
```
|
||
Genişletilmiş sorgular (download-mibs) sayesinde, aşağıdaki komut ile sistem hakkında daha fazla bilgi elde etmek mümkündür:
|
||
```bash
|
||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||
```
|
||
**SNMP**, ana bilgisayar hakkında birçok bilgiye sahiptir ve ilginç bulabileceğiniz şeyler şunlardır: **Ağ arayüzleri** (IPv4 ve **IPv6** adresi), Kullanıcı adları, Uptime, Sunucu/OS versiyonu ve **çalışan** **işlemler** (şifreler içerebilir)....
|
||
|
||
### **Tehlikeli Ayarlar**
|
||
|
||
Ağ yönetimi alanında, belirli yapılandırmalar ve parametreler kapsamlı izleme ve kontrol sağlamak için anahtardır.
|
||
|
||
### Erişim Ayarları
|
||
|
||
**Tam OID ağacına** erişimi sağlayan iki ana ayar vardır; bu, ağ yönetiminde kritik bir bileşendir:
|
||
|
||
1. **`rwuser noauth`**, kimlik doğrulama gerektirmeden OID ağacına tam erişim izni vermek için ayarlanmıştır. Bu ayar basittir ve sınırsız erişim sağlar.
|
||
2. Daha spesifik kontrol için erişim şu şekilde verilebilir:
|
||
- **`rwcommunity`** **IPv4** adresleri için, ve
|
||
- **`rwcommunity6`** **IPv6** adresleri için.
|
||
|
||
Her iki komut da bir **topluluk dizesi** ve ilgili IP adresi gerektirir, talebin kaynağından bağımsız olarak tam erişim sunar.
|
||
|
||
### Microsoft Windows için SNMP Parametreleri
|
||
|
||
SNMP aracılığıyla bir Windows sisteminin çeşitli yönlerini izlemek için bir dizi **Yönetim Bilgi Tabanı (MIB) değeri** kullanılır:
|
||
|
||
- **Sistem İşlemleri**: `1.3.6.1.2.1.25.1.6.0` aracılığıyla erişilen bu parametre, sistemdeki aktif işlemlerin izlenmesini sağlar.
|
||
- **Çalışan Programlar**: `1.3.6.1.2.1.25.4.2.1.2` değeri, şu anda çalışan programların izlenmesi için ayrılmıştır.
|
||
- **İşlem Yolu**: Bir işlemin nereden çalıştığını belirlemek için `1.3.6.1.2.1.25.4.2.1.4` MIB değeri kullanılır.
|
||
- **Depolama Birimleri**: Depolama birimlerinin izlenmesi `1.3.6.1.2.1.25.2.3.1.4` ile sağlanır.
|
||
- **Yazılım Adı**: Bir sistemde yüklü yazılımı tanımlamak için `1.3.6.1.2.1.25.6.3.1.2` kullanılır.
|
||
- **Kullanıcı Hesapları**: `1.3.6.1.4.1.77.1.2.25` değeri, kullanıcı hesaplarının izlenmesini sağlar.
|
||
- **TCP Yerel Portlar**: Son olarak, `1.3.6.1.2.1.6.13.1.3`, aktif ağ bağlantılarına dair içgörü sağlayarak TCP yerel portlarının izlenmesi için ayrılmıştır.
|
||
|
||
### Cisco
|
||
|
||
Cisco ekipmanınız varsa bu sayfaya göz atın:
|
||
|
||
|
||
{{#ref}}
|
||
cisco-snmp.md
|
||
{{#endref}}
|
||
|
||
## SNMP'den RCE'ye
|
||
|
||
Eğer SNMP hizmeti içinde **değerler yazmanıza** izin veren bir **dize** varsa, bunu **komutlar çalıştırmak** için kötüye kullanabilirsiniz:
|
||
|
||
|
||
{{#ref}}
|
||
snmp-rce.md
|
||
{{#endref}}
|
||
|
||
## **Kapsamlı SNMP**
|
||
|
||
[Braa](https://github.com/mteg/braa), kitlesel bir SNMP tarayıcısıdır. Bu tür bir aracın amaçlanan kullanımı, elbette, SNMP sorguları yapmaktır – ancak net-snmp'deki snmpwalk'tan farklı olarak, aynı anda onlarca veya yüzlerce ana bilgisayarı sorgulayabilir ve tek bir işlemde çalışır. Böylece, çok az sistem kaynağı tüketir ve taramayı ÇOK hızlı yapar.
|
||
|
||
Braa, KENDİ snmp yığınına sahiptir, bu nedenle net-snmp gibi herhangi bir SNMP kütüphanesine ihtiyaç duymaz.
|
||
|
||
**Sözdizimi:** braa \[Topluluk-dizesi]@\[SNMP sunucusunun IP'si]:\[iso id]
|
||
```bash
|
||
braa ignite123@192.168.1.125:.1.3.6.*
|
||
```
|
||
Bu, manuel olarak işleyemeyeceğiniz çok fazla MB bilgi çıkarabilir.
|
||
|
||
Şimdi en ilginç bilgileri arayalım (from [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/)):
|
||
|
||
### **Cihazlar**
|
||
|
||
Süreç, cihazları tanımlamak için her dosyadan **sysDesc MIB verisi** (1.3.6.1.2.1.1.1.0) çıkarılmasıyla başlar. Bu, bir **grep komutu** kullanılarak gerçekleştirilir:
|
||
```bash
|
||
grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
||
```
|
||
### **Özel Dizeyi Belirleme**
|
||
|
||
Kritik bir adım, özellikle Cisco IOS yönlendiricilerinde, organizasyonlar tarafından kullanılan **özel topluluk dizesini** belirlemeyi içerir. Bu dize, yönlendiricilerden **çalışan yapılandırmaları** çıkarmayı sağlar. Belirleme genellikle "trap" kelimesini içeren SNMP Trap verilerini analiz etmeye dayanır ve bir **grep komutu** kullanılır:
|
||
```bash
|
||
grep -i "trap" *.snmp
|
||
```
|
||
### **Kullanıcı Adları/Şifreler**
|
||
|
||
MIB tablolarında saklanan günlükler, **başarısız oturum açma girişimleri** için incelenir; bu, kullanıcı adı olarak girilen şifreleri yanlışlıkla içerebilir. Değerli verileri bulmak için _fail_, _failed_ veya _login_ gibi anahtar kelimeler aranır:
|
||
```bash
|
||
grep -i "login\|fail" *.snmp
|
||
```
|
||
### **E-postalar**
|
||
|
||
Son olarak, verilerden **e-posta adreslerini** çıkarmak için, e-posta formatlarıyla eşleşen desenlere odaklanan bir **grep komutu** ve düzenli ifade kullanılır:
|
||
```bash
|
||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||
```
|
||
## SNMP Değerlerini Değiştirme
|
||
|
||
Değerleri değiştirmek için _**NetScanTools**_ kullanabilirsiniz. Bunu yapmak için **özel dizeyi** bilmeniz gerekecek.
|
||
|
||
## Spoofing
|
||
|
||
Eğer yalnızca bazı IP'lerin SNMP hizmetini sorgulamasına izin veren bir ACL varsa, UDP paketinin içine bu adreslerden birini sahteleyebilir ve trafiği dinleyebilirsiniz.
|
||
|
||
## SNMP Konfigürasyon Dosyalarını İnceleme
|
||
|
||
- snmp.conf
|
||
- snmpd.conf
|
||
- snmp-config.xml
|
||
|
||
## HackTricks Otomatik Komutlar
|
||
```
|
||
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.wiki/en/network-services-pentesting/pentesting-smtp/index.html
|
||
|
||
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
|
||
|
||
|
||
```
|
||
{{#include ../../banners/hacktricks-training.md}}
|