SIP (Session Initiation Protocol)

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Βασικές Πληροφορίες

Το SIP (Πρωτόκολλο Έναρξης Συνεδρίας) είναι ένα πρωτόκολλο σήμανσης και έλεγχου κλήσεων που χρησιμοποιείται ευρέως για την ίδρυση, τροποποίηση και τερματισμό πολυμεσικών συνεδριών, συμπεριλαμβανομένων φωνής, βίντεο και άμεσων μηνυμάτων, μέσω δικτύων IP. Αναπτύχθηκε από το Internet Engineering Task Force (IETF), το SIP καθορίζεται στο RFC 3261 και έχει γίνει ο προτεινόμενος τρόπος για την VoIP και τις ενοποιημένες επικοινωνίες.

Ορισμένα βασικά χαρακτηριστικά του SIP περιλαμβάνουν:

  1. Πρωτόκολλο βασισμένο σε κείμενο: Το SIP είναι ένα πρωτόκολλο βασισμένο σε κείμενο, που το καθιστά αναγνώσιμο από ανθρώπους και πιο εύκολο στον εντοπισμό σφαλμάτων. Βασίζεται σε ένα μοντέλο αιτήματος-απάντησης, παρόμοιο με το HTTP, και χρησιμοποιεί μεθόδους όπως INVITE, ACK, BYE και CANCEL για τον έλεγχο των συνεδριών κλήσης.

  2. Επεκτασιμότητα και ευελιξία: Το SIP είναι υψηλά επεκτάσιμο και μπορεί να χρησιμοποιηθεί σε μικρές κλίμακες όπως και σε μεγάλες επιχειρηματικές και παροχές φορέων. Μπορεί εύκολα να επεκταθεί με νέα χαρακτηριστικά, καθιστώντας το προσαρμόσιμο σε διάφορες περιπτώσεις χρήσης και απαιτήσεις.

  3. Διαλειτουργικότητα: Η ευρεία υιοθέτηση και η τυποποίηση του SIP εξασφαλίζουν καλύτερη διαλειτουργικότητα μεταξύ διαφορετικών συσκευών, εφαρμογών και παρόχων υπηρεσιών, προωθώντας απρόσκοπτη επικοινωνία σε διάφορες πλατφόρμες.

  4. Σχεδιασμός με ενότητες: Το SIP λειτουργεί με άλλα πρωτόκολλα όπως το RTP (Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου) για τη μετάδοση πολυμέσων και το SDP (Πρωτόκολλο Περιγραφής Συνεδρίας) για τη

Παραδείγματα

Παράδειγμα SIP INVITE

INVITE sip:jdoe@example.com SIP/2.0
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: John Doe <sip:jdoe@example.com>
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
Contact: <sip:jsmith@pc33.example.com>
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
Εξήγηση κάθε παραμέτρου
  1. Request-Line: INVITE sip:jdoe@example.com SIP/2.0 - Αυτή η γραμμή υποδεικνύει τη μέθοδο (INVITE), το URI αιτήματος (sip:jdoe@example.com) και την έκδοση SIP (SIP/2.0).

  2. Via: Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds - Ο κεφαλίδα Via καθορίζει το πρωτόκολλο μεταφοράς (UDP) και τη διεύθυνση του πελάτη (pc33.example.com). Η παράμετρος "branch" χρησιμοποιείται για ανίχνευση βρόχων και αντιστοίχιση συναλλαγών.

  3. Max-Forwards: Max-Forwards: 70 - Αυτός ο κεφαλίδας πεδίου περιορίζει τον αριθμό φορές που το αίτημα μπορεί να προωθηθεί από διαμεσολαβητές για να αποφευχθούν άπειροι βρόχοι.

  4. To: To: John Doe <sip:jdoe@example.com> - Ο κεφαλίδας To καθορίζει τον παραλήπτη της κλήσης, συμπεριλαμβανομένου του ονόματος εμφάνισης του (John Doe) και του SIP URI (sip:jdoe@example.com).

  5. From: From: Jane Smith <sip:jsmith@example.org>;tag=1928301774 - Ο κεφαλίδας From καθορίζει τον αποστολέα της κλήσης, συμπεριλαμβανομένου του ονόματος εμφάνισης του (Jane Smith) και του SIP URI (sip:jsmith@example.org). Η παράμετρος "tag" χρησιμοποιείται για τη μοναδική αναγνώριση του ρόλου του αποστολέα στο διάλογο.

  6. Call-ID: Call-ID: a84b4c76e66710 - Ο κεφαλίδας Call-ID αναγνωρίζει μοναδικά μια συνεδρία κλήσης μεταξύ δύο πρακτόρων χρηστών.

  7. CSeq: CSeq: 314159 INVITE - Ο κεφαλίδας CSeq περιέχει έναν αριθμό ακολουθίας και τη μέθοδο που χρησιμοποιείται στο αίτημα. Χρησιμοποιείται για την αντιστοίχιση των απαντήσεων στα αιτήματα και την ανίχνευση μηνυμάτων εκτός σειράς.

  8. Contact: Contact: <sip:jsmith@pc33.example.com> - Ο κεφαλίδας Contact παρέχει μια άμεση διαδρομή προς τον αποστολέα, η οποία μπορεί να χρησιμοποιηθεί για μετέπειτα αιτήματα και απαντήσεις.

  9. User-Agent: User-Agent: ExampleSIPClient/1.0 - Ο κεφαλίδας User-Agent παρέχει πληροφορίες σχετικά με το λογισμικό ή το υλικό του αποστολέα, συμπεριλαμβανομένου του ονόματος και της έκδοσής του.

  10. Allow: Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO - Ο κεφαλίδας Allow καταλογίζει τις μεθόδους SIP που υποστηρίζονται από τον αποστολέα. Αυτό βοηθά τον παραλήπτη να κατανοήσει ποιες μεθόδοι μπορούν να χρησιμοποιηθούν κατά την επικοινωνία.

  11. Content-Type: Content-Type: application/sdp - Ο κεφαλίδας Content-Type καθορίζει τον τύπο πολυμέσων του σώματος του μηνύματος, σε αυτήν την περίπτωση το SDP (Session Description Protocol).

  12. Content-Length: Content-Length: 142 - Ο κεφαλίδας Content-Length υποδεικνύει το μέγεθος του σώματος του μηνύματος σε bytes.

  13. Message Body: Το σώμα του μηνύματος περιέχει την περιγραφή της συνεδρίας SDP, η οποία περιλαμβάνει πληροφορίες σχετικά με τους τύπους πολυμέσων, τους κωδικοποιητές και τα πρωτόκολλα μεταφοράς για την προτεινόμενη συνεδρία.

  • v=0 - Έκδοση πρωτοκόλλου (0 για SDP)

  • o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com - Αρχικός και αναγνωριστικός συνεδρίας

  • s=- - Όνομα συνεδρίας (ένα μόνο παύλα υποδεικνύει ότι δεν υπάρχει όνομα συνεδρίας)

  • c=IN IP4 pc33.example.com - Πληροφορίες σύνδεσης (τύπος δικτύου, τύπος διεύθυνσης και διεύθυνση)

  • t=0 0 - Πληροφορίες χρονισμού (χρόνοι έναρξης και λήξης, το 0 0 σημαίνει ότι η συνεδρία δεν είναι περιορισμένη)

  • m=audio 49170 RTP/AVP 0 - Περιγραφή πολυμέσων (τύπος πολυμέσων, αριθμός θύρας, πρωτόκολλο μεταφοράς και λίστα μορφών). Σε αυτήν την περίπτωση, καθορίζει ένα ροή ήχου χρησιμοποιώντας RTP/AVP (Real-time Transport Protocol / Audio Video Profile) και μορφή 0 (PCMU/8000).

  • a=rtpmap:0 PCMU/8000 - Χαρτογράφηση γνωρισμάτων της μορφής (0) στον κωδικοποιητή (PCMU) και το ρυθμό ρολογιού του (8000 Hz).

Παράδειγμα Εγγραφής SIP

Η μέθοδος REGISTER χρησιμοποιείται στο πρωτόκολλο έναρξης συνεδρίας (SIP) για να επιτρέψει σε έναν πράκτορα χρήστη (UA), όπως ένα τηλέφωνο VoIP ή ένα softphone, να καταχωρίσει την τοποθεσία του σε έναν εξυπηρετητή καταχώρησης SIP. Αυτή η διαδικασία επιτρέπει στον εξυπηρετητή να γνωρίζει πού να δρομολογήσει τα εισερχόμενα αιτήματα SIP που προορίζονται για τον καταχωρημένο χρήστη. Ο εξυπηρετητής

REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0

Αυτό το αρχικό μήνυμα REGISTER αποστέλλεται από το UA (Alice) στον διακομιστή εγγραφής. Περιλαμβάνει σημαντικές πληροφορίες, όπως η επιθυμητή διάρκεια εγγραφής (Expires), ο SIP URI του χρήστη (sip:alice@example.com) και η διεύθυνση επικοινωνίας του χρήστη (sip:alice@192.168.1.100:5060).

  1. Απόκριση 401 Unauthorized από τον διακομιστή εγγραφής:

cssCopy codeSIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;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

Ο διακομιστής καταχωρητής απαντά με ένα μήνυμα "401 Unauthorized", το οποίο περιλαμβάνει έναν κεφαλίδα "WWW-Authenticate". Αυτός ο κεφαλίδας περιέχει πληροφορίες που απαιτούνται για την πιστοποίηση του UA, όπως το πεδίο πιστοποίησης, nonce και αλγόριθμος.

  1. Αίτηση REGISTER με διαπιστευτήρια πιστοποίησης:

REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;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

Ο UA στέλνει ένα ακόμα αίτημα REGISTER, αυτή τη φορά περιλαμβάνοντας τον "Authorization" κεφαλίδα με τα απαραίτητα διαπιστευτήρια, όπως το όνομα χρήστη, το realm, το nonce και μια τιμή απόκρισης που υπολογίζεται χρησιμοποιώντας τις παρεχόμενες πληροφορίες και τον κωδικό πρόσβασης του χρήστη.

Έτσι υπολογίζεται η απόκριση της Εξουσιοδότησης:

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}")
  1. Επιτυχής απόκριση εγγραφής από τον διακομιστή καταχώρησης:

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0

Αφού ο διακομιστής καταχωρητής επαληθεύσει τα παρεχόμενα διαπιστευτήρια, στέλνει μια απάντηση "200 OK" για να υποδείξει ότι η εγγραφή ήταν επιτυχής. Η απάντηση περιλαμβάνει τις καταχωρημένες πληροφορίες επικοινωνίας και τον χρόνο λήξης της εγγραφής. Σε αυτό το σημείο, ο πράκτορας χρήστη (Alice) είναι επιτυχώς καταχωρημένος με τον διακομιστή καταχωρητή SIP και εισερχόμενα αιτήματα SIP για την Alice μπορούν να δρομολογηθούν στην κατάλληλη διεύθυνση επικοινωνίας.

Παράδειγμα κλήσης

Δεν αναφέρεται, αλλά ο χρήστης B πρέπει να έχει στείλει ένα μήνυμα REGISTER στον Proxy 2 πριν μπορέσει να λάβει κλήσεις.

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

  • Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!

  • Ανακαλύψτε The PEASS Family, τη συλλογή μας από αποκλειστικά NFTs

  • Συμμετάσχετε 💬 στην ομάδα Discord](https://discord.gg/hRep4RUj7f) ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.

  • Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.

Last updated