# SIP (Sessie Inisiasie Protokol)
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)! Ander maniere om HackTricks te ondersteun: * As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com) * Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family) * **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
## Basiese Inligting SIP (Sessie Inisiasie Protokol) is 'n **seintegnologie- en oproepbeheerprotokol** wat wyd gebruik word vir die vestiging, wysiging en beëindiging van multimedia-sessies, insluitend spraak, video en onmiddellike boodskappe, oor IP-netwerke. Ontwikkel deur die **Internet Engineering Task Force (IETF)**, word SIP gedefinieer in **RFC 3261** en het die de facto standaard geword vir VoIP en verenigde kommunikasie. Sommige belangrike kenmerke van SIP sluit in: 1. **Tekstgebaseerde Protokol**: SIP is 'n tekstgebaseerde protokol, wat dit mensleesbaar maak en makliker maak om foute op te spoor. Dit is gebaseer op 'n versoek-antwoordmodel, soortgelyk aan HTTP, en gebruik metodes soos INVITE, ACK, BYE en CANCEL om oproepsessies te beheer. 2. **Skalering en Veelsydigheid**: SIP is hoogs skaalbaar en kan gebruik word in klein- en grootmaat-ondernemings- en vervoerdersomgewings. Dit kan maklik uitgebrei word met nuwe funksies, wat dit aanpasbaar maak vir verskillende gevalle en vereistes. 3. **Interoperabiliteit**: SIP se wye aanvaarding en standaardisering verseker beter interoperabiliteit tussen verskillende toestelle, toepassings en diensverskaffers, wat naadlose kommunikasie oor verskillende platforms bevorder. 4. **Modulêre Ontwerp**: SIP werk saam met ander protokolle soos **RTP (Real-time Transport Protocol)** vir media-oordrag en **SDP (Session Description Protocol)** vir die beskrywing van multimedia-sessies. Hierdie modulêre ontwerp maak groter veelsydigheid en verenigbaarheid met verskillende mediatipes en kodeks moontlik. 5. **Proxy- en Omskakelbedieners**: SIP kan gebruik maak van proxy- en omskakelbedieners om oproeprouting te fasiliteer en gevorderde funksies soos oproepstuur, oproepoordrag en voicemail-dienste te bied. 6. **Teenwoordigheid en Onmiddellike Boodskappe**: SIP is nie beperk tot spraak- en video-kommunikasie nie. Dit ondersteun ook teenwoordigheid en onmiddellike boodskappe, wat 'n wye reeks verenigde kommunikasie-toepassings moontlik maak. Ten spyte van sy vele voordele kan SIP moeilik wees om te konfigureer en bestuur, veral wanneer dit kom by NAT-deurslag en vuurmuurprobleme. Tog maak sy veelsydigheid, skalering en uitgebreide ondersteuning in die bedryf dit 'n gewilde keuse vir VoIP- en multimedia-kommunikasie. ### SIP Metodes Die kern-SIP-metodes wat gedefinieer is in **RFC 3261** sluit in: 1. **INVITE**: Gebruik om 'n nuwe sessie (oproep) te **inisieer** of 'n bestaande een te wysig. Die INVITE-metode dra die sessiebeskrywing (gewoonlik met behulp van SDP) om die ontvanger in te lig oor die besonderhede van die voorgestelde sessie, soos mediatipes, kodeks en vervoerprotokolle. 2. **ACK**: Gestuur om die ontvangs van 'n finale antwoord op 'n INVITE-versoek te **bevestig**. Die ACK-metode verseker die betroubaarheid van INVITE-transaksies deur end-to-end-erkennings te voorsien. 3. **BYE**: Gebruik om 'n gevestigde sessie (oproep) te **beëindig**. Die BYE-metode word deur een van die partye in die sessie gestuur om aan te dui dat hulle die kommunikasie wil beëindig. 4. **CANCEL**: Gestuur om 'n hangende INVITE-versoek te **kanselleer** voordat die sessie gevestig is. Die CANCEL-metode stel die sender in staat om 'n INVITE-transaksie af te breek as hulle van gedagte verander of as daar geen antwoord van die ontvanger is nie. 5. **OPTIONS**: Gebruik om die vermoëns van 'n SIP-bediener of gebruikersagent te **ondersoek**. Die OPTIONS-metode kan gestuur word om inligting oor ondersteunde metodes, mediatipes of ander uitbreidings te versoek sonder om werklik 'n sessie te vestig. 6. **REGISTER**: Gebruik deur 'n gebruikersagent om sy huidige ligging by 'n SIP-registreerderbediener te **registreer**. Die REGISTER-metode help om 'n opgedateerde koppeling tussen 'n gebruiker se SIP-URI en hul huidige IP-adres te handhaaf, wat oproeprouting en aflewering moontlik maak. {% hint style="warning" %} Let daarop dat dit **nie nodig is om die REGISTER** vir enige iets te gebruik om iemand te bel nie.\ Dit is egter moontlik dat die oproeper in orde om 'n **INVITE** uit te voer, eers moet **geïdentifiseer** word, anders sal hy 'n **`401 Unauthorized`**-antwoord ontvang. {% endhint %} Naas hierdie kernmetodes is daar **verskeie SIP-uitbreidingsmetodes** wat in ander RFC's gedefinieer is, soos: 1. **SUBSCRIBE**: Gedefinieer in RFC 6665, word die SUBSCRIBE-metode gebruik om **kennisgewings te versoek** oor die toestand van 'n spesifieke hulpbron, soos 'n gebruiker se teenwoordigheid of oproepstatus. 2. **NOTIFY**: Ook gedefinieer in RFC 6665, word die NOTIFY-metode deur 'n bediener gestuur om 'n geabonneerde gebruikersagent in te lig oor veranderinge in die toestand van 'n gemonitorde hulpbron. 3. **REFER**: Gedefinieer in RFC 3515, word die REFER-metode gebruik om te **versoek dat die ontvanger 'n oorplasing uitvoer of na 'n derde party verwys**. Dit word tipies gebruik vir oproepoordrag-scenarios. 4. **MESSAGE**: Gedefinieer in RFC ## Voorbeelde ### SIP INVITE Voorbeeld ``` INVITE sip:jdoe@example.com SIP/2.0 Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds Max-Forwards: 70 To: John Doe From: Jane Smith ;tag=1928301774 Call-ID: a84b4c76e66710 CSeq: 314159 INVITE Contact: User-Agent: ExampleSIPClient/1.0 Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO Content-Type: application/sdp Content-Length: 142 v=0 o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com s=- c=IN IP4 pc33.example.com t=0 0 m=audio 49170 RTP/AVP 0 a=rtpmap:0 PCMU/8000te ```
Elke Parameter Verduidelik 1. **Request-Line**: `INVITE sip:jdoe@example.com SIP/2.0` - Hierdie lyn dui die metode (INVITE), die versoek URI (sip:[jdoe@example.com](mailto:jdoe@example.com)), en die SIP-weergawe (SIP/2.0) aan. 2. **Via**: `Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds` - Die Via-kop spesifiseer die vervoerprotokol (UDP) en die klient se adres (pc33.example.com). Die "branch" parameter word gebruik vir lusopsporing en transaksie-passing. 3. **Max-Forwards**: `Max-Forwards: 70` - Hierdie kopvel beperk die aantal kere wat die versoek deur proksi's gestuur kan word om oneindige lusse te voorkom. 4. **To**: `To: John Doe ` - Die To-kop spesifiseer die ontvanger van die oproep, insluitend hul vertoonnaam (John Doe) en SIP URI (sip:[jdoe@example.com](mailto:jdoe@example.com)). 5. **From**: `From: Jane Smith ;tag=1928301774` - Die From-kop spesifiseer die afsender van die oproep, insluitend hul vertoonnaam (Jane Smith) en SIP URI (sip:[jsmith@example.org](mailto:jsmith@example.org)). Die "tag" parameter word gebruik om die afsender se rol in die dialoog uniek te identifiseer. 6. **Call-ID**: `Call-ID: a84b4c76e66710` - Die Call-ID-kop identifiseer uniek 'n oproepsessie tussen twee gebruikersagtente. 7. **CSeq**: `CSeq: 314159 INVITE` - Die CSeq-kop bevat 'n volgnummer en die metode wat in die versoek gebruik word. Dit word gebruik om reaksies aan versoek te koppel en uit-volgorde boodskappe op te spoor. 8. **Contact**: `Contact: ` - Die Contact-kop bied 'n direkte roete na die afsender, wat gebruik kan word vir volgende versoek en reaksies. 9. **User-Agent**: `User-Agent: ExampleSIPClient/1.0` - Die User-Agent-kop verskaf inligting oor die sagteware of hardeware van die afsender, insluitend die naam en weergawe. 10. **Allow**: `Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO` - Die Allow-kop lys die SIP-metodes wat deur die afsender ondersteun word. Dit help die ontvanger om te verstaan watter metodes tydens die kommunikasie gebruik kan word. 11. **Content-Type**: `Content-Type: application/sdp` - Die Content-Type-kop spesifiseer die media-tipe van die boodskaplêer, in hierdie geval SDP (Session Description Protocol). 12. **Content-Length**: `Content-Length: 142` - Die Content-Length-kop dui die grootte van die boodskaplêer in bytes aan. 13. **Boodskaplêer**: Die boodskaplêer bevat die SDP-sessiebeskrywing, wat inligting bevat oor die media-tipes, kodeks, en vervoerprotokolle vir die voorgestelde sessie. * `v=0` - Protokolweergawe (0 vir SDP) * `o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com` - Oorsprong en sessie-identifiseerder * `s=-` - Sessienaam (een enkele koppelteken dui aan dat daar geen sessienaam is nie) * `c=IN IP4 pc33.example.com` - Verbindingsinligting (netwerk tipe, adres tipe, en adres) * `t=0 0` - Tydsinligting (begin- en eindtye, 0 0 beteken dat die sessie nie begrens is nie) * `m=audio 49170 RTP/AVP 0` - Media-beskrywing (media tipe, poortnommer, vervoerprotokol, en formaatlys). In hierdie geval spesifiseer dit 'n klankstroom wat gebruik maak van RTP/AVP (Real-time Transport Protocol / Audio Video Profile) en formaat 0 (PCMU/8000). * `a=rtpmap:0 PCMU/8000` - Eienskap wat die formaat (0) aan die kodek (PCMU) en sy klokspoed (8000 Hz) koppel.
### SIP REGISTER Voorbeeld Die REGISTER-metode word in die Session Initiation Protocol (SIP) gebruik om 'n gebruikersagtent (UA), soos 'n VoIP-foon of 'n sagtfoon, in staat te stel om **sy ligging by 'n SIP-registrasiebediener te registreer**. Hierdie proses laat die bediener weet **waarheen inkomende SIP-versoeke vir die geregistreerde gebruiker gestuur moet word**. Die registrasiebediener is gewoonlik deel van 'n SIP-proksibediener of 'n toegewyde registrasiebediener. Hier is 'n gedetailleerde voorbeeld van die SIP-boodskappe wat betrokke is by 'n REGISTER-verifikasieproses: 1. Aanvanklike **REGISTER** versoek van UA na die registrasiebediener: ```yaml REGISTER sip:example.com SIP/2.0 Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds Max-Forwards: 70 From: Alice ;tag=565656 To: Alice Call-ID: 1234567890@192.168.1.100 CSeq: 1 REGISTER Contact: ;expires=3600 Expires: 3600 Content-Length: 0 ``` Hierdie aanvanklike REGISTER-boodskap word deur die UA (Alice) na die registrasiebediener gestuur. Dit sluit belangrike inligting in soos die gewenste registrasie-tydsduur (Expires), die gebruiker se SIP URI (sip:[alice@example.com](mailto:alice@example.com)), en die gebruiker se kontakadres (sip:alice@192.168.1.100:5060). 2. **401 Onbevoegd** antwoord van die registrasiebediener: ```css cssCopy codeSIP/2.0 401 Unauthorized Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds From: Alice ;tag=565656 To: Alice ;tag=7878744 Call-ID: 1234567890@192.168.1.100 CSeq: 1 REGISTER WWW-Authenticate: Digest realm="example.com", nonce="abcdefghijk", algorithm=MD5, qop="auth" Content-Length: 0 ``` Die registrasiebediener reageer met 'n "401 Onbevoegde" boodskap, wat 'n "WWW-Authenticate" kop bevat. Hierdie kop bevat inligting wat vereis word vir die UA om homself te verifieer, soos die **verifikasiegebied, nonce, en algoritme**. 3. REGISTREER versoek **met verifikasielegitimasie**: ```vbnet REGISTER sip:example.com SIP/2.0 Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds Max-Forwards: 70 From: Alice ;tag=565656 To: Alice Call-ID: 1234567890@192.168.1.100 CSeq: 2 REGISTER Contact: ;expires=3600 Expires: 3600 Authorization: Digest username="alice", realm="example.com", nonce="abcdefghijk", uri="sip:example.com", response="65a8e2285879283831b664bd8b7f14d4", algorithm=MD5, cnonce="lmnopqrst", qop=auth, nc=00000001 Content-Length: 0 ``` Die UA stuur 'n ander REGISTER versoek, hierdie keer met die **"Authorization" kop met die nodige geloofsbriewe, soos die gebruikersnaam, realm, nonce, en 'n responswaarde** wat bereken word met behulp van die verskafte inligting en die gebruiker se wagwoord. So word die **Authorizarion respons** bereken: ```python import hashlib def calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop): # 1. Calculate HA1 (concatenation of username, realm, and password) ha1_input = f"{username}:{realm}:{password}" ha1 = hashlib.md5(ha1_input.encode()).hexdigest() # 2. Calculate HA2 (concatenation of method and uri) ha2_input = f"{method}:{uri}" ha2 = hashlib.md5(ha2_input.encode()).hexdigest() # 3. Calculate the final response value (concatenation of h1, stuff and h2) response_input = f"{ha1}:{nonce}:{nc}:{cnonce}:{qop}:{ha2}" response = hashlib.md5(response_input.encode()).hexdigest() return response # Example usage username = "alice" password = "mysecretpassword" realm = "example.com" method = "REGISTER" uri = "sip:example.com" nonce = "abcdefghijk" nc = "00000001" cnonce = "lmnopqrst" qop = "auth" response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop) print(f"MD5 response value: {response}") ``` 4. **Suksesvolle registrasie** respons van die registrasiebediener: ```yaml SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds From: Alice ;tag=565656 To: Alice ;tag=7878744 Call-ID: 1234567890@192.168.1.100 CSeq: 2 REGISTER Contact: ;expires=3600 Expires: 3600 Content-Length: 0 ``` Nadat die registrasieserver die voorsiene geloofsbriewe geverifieer het, **stuur dit 'n "200 OK" antwoord om aan te dui dat die registrasie suksesvol was**. Die antwoord bevat die geregistreerde kontakinligting en die vervaltyd vir die registrasie. Op hierdie punt is die gebruikersagent (Alice) suksesvol geregistreer by die SIP-registrasieserver, en inkomende SIP-versoeke vir Alice kan na die toepaslike kontakadres gerouteer word. ### Oproepvoorbeeld
{% hint style="info" %} Dit word nie genoem nie, maar Gebruiker B moet 'n **REGISTER-boodskap na Proxy 2 gestuur het** voordat hy oproepe kan ontvang. {% endhint %}
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)! Ander maniere om HackTricks te ondersteun: * As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com) * Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family) * **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslagplekke.