SIPp generadora de tráfico y pruebas de rendimiento para el protocolo SIP

 

https://www.onlinetis.com

SIPp generadora de tráfico y pruebas de rendimiento para el protocolo SIP

SIPp es una herramienta de código abierto generadora de tráfico y pruebas de rendimiento para el protocolo SIP (Session Initiation Protocol), muy utilizada en auditorías de seguridad sobre telefonía VoIP. En Kali Linux permite simular clientes y servidores SIP (UAC y UAS), inyectar llamadas, realizar pruebas de carga y evaluar la resistencia de centrales IP-PBX (como Asterisk o FreePBX) ante inundaciones de tráfico o peticiones maliciosas.

Instalación en Kali Linux

Aunque en algunas versiones viene disponible en los repositorios, puedes instalarlo ejecutando:

Bash
sudo apt update && sudo apt install sipp -y
Usos principales en VoIP Pentesting

  • Simulación de Clientes/Servidores (UAC/UAS): Emula teléfonos o centrales para enviar y recibir llamadas de prueba.

  • Pruebas de Carga y Rendimiento (Stress Testing): Evalúa cuántas llamadas simultáneas o peticiones por segundo (CPS) puede procesar un servidor SIP antes de colapsar.

  • Fuzzing y Validación de Escenarios: Ejecuta flujos XML personalizados para probar vulnerabilidades en la pila SIP del objetivo.

Modos de uso y comandos básicos

  1. Modo Servidor (UAS - User Agent Server):
    Espera llamadas entrantes para responder de forma automática según el flujo por defecto.

    Bash
    sipp -sn uas
    
  2. Modo Cliente (UAC - User Agent Client):
    Genera tráfico hacia una IP o PBX objetivo enviando peticiones INVITE.

    Bash
    sipp <IP_OBJETIVO> -sn uac -r 10 -rp 1000 -m 100
    
    • -sn uac: Utiliza el escenario integrado por defecto para cliente.

    • -r 10 -rp 1000: Envía 10 llamadas cada 1000 ms (1 segundo).

    • -m 100: Detiene la prueba tras procesar 100 llamadas en total.

  3. Inyección de Audio (RTP Echo / Media):
    Envía un archivo pcap codificado para simular tráfico de voz real durante la llamada:

    Bash
    sipp <IP_OBJETIVO> -sn uac_pcap -s <EXTENSION>
    
Flujos personalizados mediante XML

SIPp permite volcar sus escenarios por defecto a un archivo editable para crear escenarios complejos de auditoría:
Bash
# Volcar el escenario estándar UAC a un archivo XML
sipp -sd uac > escenario_custom.xml

# Ejecutar SIPp cargando el escenario modificado
sipp <IP_OBJETIVO> -sf escenario_custom.xml

 

Un escenario en SIPp se define mediante un archivo XML estructurado en secuencia. Cada mensaje enviado (<send>) y recibido (<recv>) modela el flujo exacto de la señalización SIP.

Ejemplo de Escenario XML (Cliente UAC)

El siguiente archivo define una llamada simple (INVITE $\rightarrow$ 100 Trying / 180 Ringing / 200 OK $\rightarrow$ ACK $\rightarrow$ pausa de conversación $\rightarrow$ BYE $\rightarrow$ 200 OK):

XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<scenario name="Llamada Basica UAC">

  <!-- 1. Enviar petición INVITE -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: "Tester" <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 1 INVITE
      Contact: sip:sipp@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Auditoria de Carga
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=user1 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

  <!-- 2. Esperar respuestas provisionales (Opcional/Ignorable) -->
  <recv response="100" optional="true">
  </recv>

  <recv response="180" optional="true">
  </recv>

  <!-- 3. Esperar 200 OK final del servidor -->
  <recv response="200" rtd="true">
  </recv>

  <!-- 4. Enviar confirmación ACK -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: "Tester" <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 1 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- 5. Pausa para simular la duración de la llamada (5 segundos) -->
  <pause milliseconds="5000"/>

  <!-- 6. Enviar petición BYE para colgar -->
  <send retrans="500">
    <![CDATA[
      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: "Tester" <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 2 BYE
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- 7. Esperar 200 OK del BYE -->
  <recv response="200">
  </recv>

  <!-- Definición del tiempo de respuesta (Response Time Duration) -->
  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 200, 500, 1000"/>
  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

</scenario>

Explicación de los Campos y Variables Principales

1. Etiquetas de Control XML

  • <send> / <recv>: Delimitan el envío de peticiones/respuestas o la recepción esperada.

  • retrans="500": Define el intervalo de retransmisión en milisegundos si no se recibe respuesta en transporte UDP.

  • optional="true": Permite que el escenario continúe si el mensaje especificado no llega (por ejemplo, si el servidor no envía un 180 Ringing).

  • <pause milliseconds="X"/>: Introduce un retardo entre pasos, útil para simular la duración del flujo RTP o retardo entre transacciones.

2. Variables dinámicas reservadas de SIPp

VariableDescripción
[remote_ip] / [remote_port]IP y puerto del objetivo pasados por línea de comandos.
[local_ip] / [local_port]IP y puerto local desde donde SIPp genera el tráfico.
[service]Extensión o usuario destino especificado con el parámetro -s al ejecutar SIPp.
[call_id]Identificador único autogenerado para cada llamada.
[call_number]Número secuencial interno de la llamada actual.
[branch]Cadena única generada para la transacción en el encabezado Via.
[len]Calcula y reemplaza automáticamente la longitud exacta del cuerpo de la petición (por ejemplo, el bloque SDP).
[peer_tag_param]Extrae automáticamente la etiqueta tag devuelta por el servidor en la respuesta 200 OK para incluirla en el ACK y BYE.

Cómo Modificar el XML para Diferentes Pruebas de Seguridad

  1. Ataques de Fuzzing o Inyección de Encabezados:
    Puedes añadir encabezados maliciosos o extremadamente largos dentro del bloque <![CDATA[ ... ]]> para evaluar cómo reacciona el parser SIP de la PBX:

    HTTP
    Custom-Header: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    
  2. Inyección de Archivos CSV (Inyección de Usuarios/Credenciales):
    SIPp permite cargar archivos CSV de datos dinámicos usando la opción -inf datos.csv. Dentro del XML puedes referenciar columnas con [field0], [field1], etc., permitiendo probar autenticación o fuerza bruta sobre múltiples usuarios:

    XML
    From: <sip:[field0]@[local_ip]:[local_port]>
    
  3. Ejecución del Escenario:
    Una vez editado y guardado como mi_escenario.xml, se ejecuta indicando la extensión a probar (-s) y el archivo (-sf):
    Bash
    sipp 192.168.1.100 -sf mi_escenario.xml -s 101 -m 1
    

 

Para autenticar llamadas en SIPp mediante SIP Digest (Challenge-Response 401/407) y reutilizar múltiples usuarios/contraseñas, se combina un archivo de datos CSV (-inf) con un escenario XML que capture la cabecera WWW-Authenticate o Proxy-Authenticate e inyecte la respuesta usando la palabra clave [authentication].

1. Creación del Archivo CSV (usuarios.csv)

El archivo CSV define los datos dinámicos. La primera línea le indica a SIPp el orden de asignación de las columnas (SEQUENTIAL o RANDOM).

Crea un archivo llamado usuarios.csv:

Fragmento de código
SEQUENTIAL
101;password123;domain.com
102;password456;domain.com
103;password789;domain.com
  • [field0]: Nombre de usuario / Extensión (101)

  • [field1]: Contraseña en texto plano (password123)

  • [field2]: Dominio o Realm SIP (domain.com)

2. Escenario XML con Autenticación (uac_auth.xml)

El flujo autenticado requiere dos intentos:

  1. Enviar el primer INVITE sin credenciales.

  2. Recibir una respuesta 401 Unauthorized o 407 Proxy Authentication Required.

  3. Enviar un ACK para cerrar esa transacción fallida.

  4. Enviar un segundo INVITE que incluya la cabecera Authorization: calculada con [authentication].

XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<scenario name="UAC con Autenticacion SIP Digest">

  <!-- 1. Primer INVITE sin credenciales -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 1 INVITE
      Contact: sip:[field0]@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Prueba Autenticada
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=[field0] 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

  <recv response="100" optional="true">
  </recv>

  <!-- 2. Recibir 401/407 y guardar el challenge del servidor -->
  <recv response="401" auth="true">
  </recv>

  <!-- 3. Responder con ACK obligatorio al 401 -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 1 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- 4. Segundo INVITE incluyendo el calculo del Digest -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 2 INVITE
      Contact: sip:[field0]@[local_ip]:[local_port]
      [authentication username=[field0] password=[field1]]
      Max-Forwards: 70
      Subject: Prueba Autenticada
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=[field0] 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

  <recv response="100" optional="true">
  </recv>

  <recv response="180" optional="true">
  </recv>

  <!-- 5. Recibir 200 OK del segundo INVITE -->
  <recv response="200" rtd="true">
  </recv>

  <!-- 6. Confirmar con ACK final -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 2 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <pause milliseconds="3000"/>

  <!-- 7. Colgar la llamada con BYE -->
  <send retrans="500">
    <![CDATA[
      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 3 BYE
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <recv response="200">
  </recv>

</scenario>

3. Puntos clave de la autenticación

  • auth="true": Colocado en el <recv response="401"> o response="407". Obliga a SIPp a guardar los parámetros del desafío HTTP Digest (como el nonce, realm, y qop).

  • [authentication username=[field0] password=[field1]]: Genera automáticamente la cabecera Authorization: Digest ... utilizando el MD5/SHA256 correspondiente según lo especificado en el challenge recibido y los campos del CSV.

4. Comando de ejecución en Kali Linux

Para ejecutar la prueba asociando el archivo XML y el CSV:

Bash
sipp 192.168.1.100:5060 \
  -sf uac_auth.xml \
  -inf usuarios.csv \
  -s 200 \
  -m 3 \
  -l 1 \
  -r 1
Parámetros utilizados:

  • -sf uac_auth.xml: Especifica el archivo de escenario XML.

  • -inf usuarios.csv: Carga el archivo CSV con las credenciales.

  • -s 200: Define la extensión de destino (Service / Called party).

  • -m 3: Realiza 3 llamadas en total (una por cada línea del CSV si está en modo SEQUENTIAL).

  • -l 1: Limita a 1 llamada simultánea.

  • -r 1: Tasa de 1 llamada por segundo.

Cuando una entidad intermedia (como un Proxy SIP, SBC o balanceador de carga) intercepta la llamada y requiere autenticación, responde con un código 407 Proxy Authentication Required en lugar del 401 Unauthorized que envía directamente el endpoint de destino (UAS / Registrar).

Para adaptar SIPp a este escenario solo se deben realizar dos cambios específicos en el XML:

1. Modificaciones requeridas en el archivo XML

  1. Capturar la respuesta 407: Cambia la respuesta esperada en el nodo <recv> y mantén el atributo auth="true" para que SIPp almacene el nonce y el realm del proxy.

  2. Especificar el tipo de autenticación: En la etiqueta [authentication], agrega el atributo type="proxy". De lo contrario, SIPp generará por defecto una cabecera Authorization: en lugar de Proxy-Authorization:.

Fragmento del código ajustado:

XML
  <!-- 1. Primer INVITE sin credenciales (Igual que antes) -->

  <!-- 2. Recibir 407 en lugar de 401 y guardar el challenge del Proxy -->
  <recv response="407" auth="true">
  </recv>

  <!-- 3. Responder con ACK obligatorio al 407 -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 1 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- 4. Segundo INVITE especificando type="proxy" -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 2 INVITE
      Contact: sip:[field0]@[local_ip]:[local_port]
      [authentication type="proxy" username=[field0] password=[field1]]
      Max-Forwards: 70
      Subject: Prueba Autenticada con Proxy
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=[field0] 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

Comparativa de encabezados generados

EscenarioCódigo devueltoAtributo en XMLCabecera inyectada en el segundo INVITE
End-to-End401 Unauthorized[authentication username=... password=...]Authorization: Digest username="..." ...
Proxy / SBC407 Proxy Authentication Required[authentication type="proxy" username=... password=...]Proxy-Authorization: Digest username="..." ...
Nota para escenarios complejos (Doble Autenticación): Si la infraestructura requiere autenticarse tanto ante un Proxy (407) como ante el servidor final (401), deberás concatenar dos flujos <recv> / <send> consecutivos en el archivo XML, usando type="proxy" para la primera respuesta y el valor por defecto para la segunda.

 

En entornos empresariales donde las llamadas atraviesan un Session Border Controller (SBC) o Proxy SIP antes de alcanzar la centralita IP (UAS/Registrar), es habitual que el cliente deba autenticarse dos veces consecutivas: primero ante el Proxy (407) y después ante el servidor final (401).

El flujo completo consta de 3 intentos de INVITE dentro del mismo escenario XML:

  1. INVITE 1 (sin credenciales) $\rightarrow$ Servidor devuelve 407 Proxy Authentication Required.

  2. INVITE 2 (con Proxy-Authorization) $\rightarrow$ Servidor devuelve 401 Unauthorized.

  3. INVITE 3 (con Proxy-Authorization + Authorization) $\rightarrow$ Servidor devuelve 200 OK.

Escenario XML Completo (uac_double_auth.xml)

XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<scenario name="UAC con Doble Autenticacion (407 Proxy + 401 UAS)">

  <!-- ============================================================= -->
  <!-- PASO 1: Primer INVITE sin ninguna credencial                  -->
  <!-- ============================================================= -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 1 INVITE
      Contact: sip:[field0]@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Prueba Doble Autenticacion
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=[field0] 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

  <recv response="100" optional="true">
  </recv>

  <!-- Capturar el desafio 407 del Proxy SIP -->
  <recv response="407" auth="true">
  </recv>

  <!-- ACK obligatorio al 407 -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 1 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- ============================================================= -->
  <!-- PASO 2: Segundo INVITE con credenciales del Proxy (407)       -->
  <!-- ============================================================= -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 2 INVITE
      Contact: sip:[field0]@[local_ip]:[local_port]
      [authentication type="proxy" username=[field0] password=[field1]]
      Max-Forwards: 70
      Subject: Prueba Doble Autenticacion
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=[field0] 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

  <recv response="100" optional="true">
  </recv>

  <!-- Capturar el desafio 401 del UAS / PBX final -->
  <recv response="401" auth="true">
  </recv>

  <!-- ACK obligatorio al 401 -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 2 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- ============================================================= -->
  <!-- PASO 3: Tercer INVITE con ambas credenciales (Proxy + UAS)    -->
  <!-- ============================================================= -->
  <send retrans="500">
    <![CDATA[
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 3 INVITE
      Contact: sip:[field0]@[local_ip]:[local_port]
      [authentication type="proxy" username=[field0] password=[field1]]
      [authentication username=[field0] password=[field1]]
      Max-Forwards: 70
      Subject: Prueba Doble Autenticacion
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=[field0] 53655765 235368797 IN IP[media_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [local_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0 8 101
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
    ]]>
  </send>

  <recv response="100" optional="true">
  </recv>

  <recv response="180" optional="true">
  </recv>

  <!-- Recibir 200 OK final tras superar ambas autenticaciones -->
  <recv response="200" rtd="true">
  </recv>

  <!-- Confirmacion ACK de la llamada establecida -->
  <send>
    <![CDATA[
      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 3 ACK
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <!-- Duracion de la llamada (3 segundos) -->
  <pause milliseconds="3000"/>

  <!-- Finalizacion de la llamada -->
  <send retrans="500">
    <![CDATA[
      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: <sip:[field0]@[remote_ip]>;tag=[pid]SIPpTag00[call_number]
      To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 4 BYE
      Max-Forwards: 70
      Content-Length: 0
    ]]>
  </send>

  <recv response="200">
  </recv>

</scenario>

Detalles técnicos clave

  1. Inyección en el Paso 3:
    En el tercer INVITE se incluyen dos líneas de autenticación seguidas:

    • [authentication type="proxy" username=[field0] password=[field1]] $\rightarrow$ Genera la cabecera Proxy-Authorization:.

    • [authentication username=[field0] password=[field1]] $\rightarrow$ Genera la cabecera Authorization:.

  2. Diferentes usuarios/claves por capa:
    Si las credenciales del Proxy y de la PBX difieren, se pueden asignar columnas independientes en el CSV (ej. [field1] para la clave del proxy y [field2] para la clave del UAS).

  3. Incremento del CSeq:
    Cada nuevo INVITE incrementa la secuencia del comando (CSeq: 1 INVITE, CSeq: 2 INVITE, CSeq: 3 INVITE), garantizando que la pila SIP de los dispositivos procese correctamente la retransmisión con credenciales.

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Como utilizar Fierce en kali linux

Hacking y ciberseguridad en kali linux con atk6-thcping6