Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pwneye — Tu compañero para cámaras ONVIF y RTSP: descubre y hackea cámaras de seguridad del mundo real 🎥 | Kitploit
Herramientas/GitHubGitHub/hackerest/pwneye
ReconocimientoSeguridad IoTAtaques de ContraseñasAnálisis de VulnerabilidadesExplotaciónRecopilación de InformaciónSeguridad de RedesPruebas de PenetraciónSeguridad de Hardware e IoTRed Teaming
GitHubhackerest/pwneye

pwneye

157206hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

Tu compañero para cámaras ONVIF y RTSP: descubre y hackea cámaras de seguridad del mundo real 🎥

Ver Repositorio
Compartir

pwneye logo

version 1.3.2 codename panopticon Python 3.10+ macOS y Linux GNU GPL v3.0

pwneye es una herramienta de seguridad ofensiva centrada y portátil para trabajar con cámaras IP que exponen servicios ONVIF y RTSP, con el objetivo de ofrecer a investigadores de seguridad y hackers una forma sencilla de gestionar descubrimiento, pruebas de autenticación, recopilación de metadatos, validación de flujos, grabación y acciones de seguimiento desde un único flujo de trabajo CLI.

Algunas de las capacidades actualmente soportadas incluyen:

  • Descubrimiento ONVIF en red local mediante WS-Discovery
  • Autenticación ONVIF y fuerza bruta multihilo con credenciales únicas o archivos de usuario/contraseña
  • Enumeración ONVIF post-autenticación de información del dispositivo, usuarios configurados, configuración de red, perfiles multimedia y URIs de flujo RTSP
  • Reinicio de cámara, restablecimiento de fábrica y acceso a shell interactivo mediante ONVIF
  • Movimiento PTZ ONVIF tanto desde la CLI como desde el visor dedicado
  • Soporte de deface y restauración de flujo mediante ONVIF
  • Detección de puertos RTSP e identificación de proveedor basada en banners
  • Fuerza bruta RTSP consciente del proveedor con más de 450 perfiles integrados de credenciales/cadenas de conexión de proveedores, además de soporte de proveedor manual y cadena de conexión manual
  • Fuerza bruta RTSP multihilo con salida de progreso en vivo
  • Manejo multicanal RTSP con detección automática, enumeración guiada y selección interactiva de canales
  • Cliente dedicado de vista previa en vivo con zoom y cambio rápido de canal para objetivos tipo DVR/NVR
  • Validación de flujo RTSP, vista previa en vivo mediante ffplay, grabación mediante ffmpeg y captura de instantáneas
  • Caché por objetivo de hallazgos exitosos ONVIF y RTSP en ~/.pwneye

Demo

https://github.com/user-attachments/assets/6913632b-326d-455e-aa0d-be6bf9b3e66c

Tabla de Contenidos

  • Instalación y Actualizaciones
    • pipx
    • Python
    • Dependencias Externas
  • Primeros Pasos
  • ONVIF
    • Lo que ONVIF te Ofrece
    • Enumerando la Red Local
    • Fuerza Bruta de Credenciales
    • Reiniciando una Cámara
    • Restableciendo una Cámara
    • Moviendo la Cámara
    • Deface de un Flujo
    • Deshaciendo el Deface de un Flujo
    • Obteniendo un shell
  • RTSP
    • Lo que RTSP te Ofrece
    • Identificando el Proveedor
    • Fuerza Bruta RTSP
    • Flujos Multicanal
    • Transmisión, Grabación e Instantáneas
  • Consejos y Trucos
  • Agradecimientos
  • Seguridad
  • Licencia

Instalación y Actualizaciones

pipx

Instala pwneye como un comando CLI a nivel de sistema desde GitHub:```bash pipx install git+https://github.com/Hackerest/pwneye.git pwneye --help

root@kitploit:~
Desinstálalo:```bash
pipx uninstall pwneye

Más tarde puedes actualizarlo desde la misma fuente de GitHub:```bash pipx upgrade pwneye

root@kitploit:~
### Python```bash
git clone https://github.com/Hackerest/pwneye
cd pwneye
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 pwneye.py --help

Actualízalo más tarde desde la misma fuente de GitHub:```bash cd pwneye git pull source .venv/bin/activate pip install -r requirements.txt

root@kitploit:~
### Dependencias Externas

Se espera que las siguientes herramientas estén en `PATH` dependiendo del modo que uses:
- `ffplay`
- `ffprobe`
- `ffmpeg` para grabación

| Plataforma | Comando de instalación |
| --- | --- |
| macOS (Homebrew) | `brew install ffmpeg` |
| Ubuntu / Debian | `sudo apt update && sudo apt install ffmpeg` |
| Fedora | `sudo dnf install ffmpeg ffmpeg-free` |
| Arch Linux | `sudo pacman -S ffmpeg` |
| openSUSE | `sudo zypper install ffmpeg` |

## Primeros Pasos

Usa estos como los puntos de entrada más rápidos a la herramienta. El objetivo aquí no es documentar cada bandera, sino mostrar las formas más útiles de empezar a trabajar con una cámara según lo que ya sepas.

Comienza desde el flujo completo predeterminado cuando tengas un único objetivo y quieras que `pwneye` haga el trabajo de selección de protocolo por ti:```bash
pwneye -t 192.168.1.135

Empieza con el descubrimiento ONVIF cuando estés en la misma red local y quieras identificar dispositivos, fabricantes y pistas sobre los flujos antes de tocar RTSP:```bash pwneye --discover

root@kitploit:~
Empieza directamente desde RTSP cuando ONVIF es irrelevante, no está disponible o ya sabes qué quieres probar:```bash
pwneye -t 192.168.1.135 --skip-onvif

Empieza con credenciales conocidas o sospechosas cuando quieras reducir el ruido y validar el acceso rápidamente:```bash pwneye -t 192.168.1.135 --username admin --password admin pwneye -t 192.168.1.135 --username admin --password ~/wordlists/passwords.txt pwneye -t 192.168.1.135 --username ~/wordlists/users.txt --password admin123

root@kitploit:~
Comienza desde una ruta conocida o una plantilla de ruta cuando ya tengas una pista del flujo y quieras un control estricto sobre las solicitudes RTSP:```bash
pwneye -t 192.168.1.135 --skip-onvif -cn "/live/ch00_0"
pwneye -t 192.168.1.135 --skip-onvif -cn '/cam/realmonitor?channel={channel}&subtype=0'

Empieza la recopilación de evidencia una vez que se encuentre un flujo de trabajo funcional:```bash pwneye -t 192.168.1.135 --snapshot pwneye -t 192.168.1.135 --record

root@kitploit:~
Flags útiles a tener en cuenta:
- `--vendor VENDOR`: reduce las solicitudes RTSP cuando ya se conoce la familia del dispositivo
- `-cn, --connection-string PATH`: prueba una ruta RTSP conocida o un archivo que contenga rutas candidatas
- `--multi-channel`: prefiere rutas RTSP basadas en canales cuando sospechas que el objetivo es un DVR/NVR
- `--threads N`: controla la concurrencia para el bruteforce de ONVIF y RTSP
- `--skip-onvif` / `--skip-rtsp`: céntrate en un solo protocolo
- `--no-cache`: no lee ni escribe en la caché
- `--fresh`: ignora las lecturas de caché pero sigue escribiendo nuevos hallazgos

## ONVIF

ONVIF es el lado de gestión y control del mundo de las cámaras. En la práctica, es útil para el descubrimiento, la autenticación, la extracción de metadatos, la enumeración de perfiles de medios, la obtención de URI de flujos y acciones del dispositivo como el reinicio.

En `pwneye`, ONVIF suele ser el protocolo que proporciona el contexto post-autenticación más rico, el camino más claro para entender qué expone una cámara y, cuando la cuenta autenticada tiene suficientes privilegios, acceso a acciones administrativas reales en el dispositivo.

### Qué te ofrece ONVIF

Cuando una cámara expone ONVIF, `pwneye` puede usarlo para:

- descubrir cámaras en la red local mediante WS-Discovery
- probar la autenticación ONVIF usando credenciales fijas o archivos
- extraer metadatos del fabricante y del dispositivo
- recuperar las URI de flujos RTSP expuestas por el dispositivo
- enumerar contexto útil post-autenticación antes de tocar RTSP de forma más agresiva
- solicitar un reinicio autenticado con `--reboot`
- solicitar un restablecimiento de fábrica autenticado con `--reset`
- mover una cámara con capacidad PTZ desde la CLI o desde el visor dedicado
- abrir un shell interactivo autenticado con `--shell`
- alterar el flujo mediante ONVIF con `--deface`
- restaurar el último perfil de alteración guardado con `--undeface`

### Enumerando la red local

Usa WS-Discovery para identificar dispositivos compatibles con ONVIF en la red local:```
pwneye --discover

[info] Starting continuous ONVIF discovery on the target network
[warning] No network interface was specified. Using en0 (subnet 192.168.1.0/24) for discovery
[success] Discovered 1 new ONVIF device(s) on the target network
[info] Saved ONVIF discovery data to cache for 192.168.1.135 (Tenda)

   Host: 192.168.1.135
   Port: 80
   Protocol: http
   Types: Device
   XAddrs: http://192.168.1.135:80/onvif/device_service
   Manufacturer: Tenda
   Name: CP3Pro
   Hardware: CP3Pro
   MAC: XX:XX:XX:XX:XX:XX
   Country: China
   Profiles: Streaming
   Capabilities: NetworkVideoTransmitter, ptz, video_encoder, audio_encoder

[success] ONVIF discovery stopped by user after identifying 1 device(s)

El bucle de descubrimiento sigue sondeando cada pocos segundos, imprime solo los dispositivos recién descubiertos y se puede detener con CTRL-C.

También puedes forzar el descubrimiento a través de una interfaz de red específica:```bash pwneye --discover en0 pwneye --discover eth0

root@kitploit:~
Cuando no se especifica una interfaz, `pwneye` elige automáticamente la interfaz de salida predeterminada y te indica qué subred de destino está utilizando para WS-Discovery.

### Fuerza bruta de credenciales

Ejecuta fuerza bruta solo ONVIF con un nombre de usuario fijo y un archivo de contraseñas:```
pwneye -t 192.168.1.135 -ou admin -op ~/wordlists/rockyou-short.txt --skip-rtsp --threads 5

[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying ONVIF authentication using user-provided credentials...
[success] 192.168.1.135 supports ONVIF on port 80
[warning] Unable to authenticate via ONVIF using provided credentials
[>] Do you want to extend the test to common ONVIF credentials? [(y)es/(n)o] (default: y): 
[info] No explicit ONVIF credentials specified, trying common ONVIF credentials...
[info] Trying ONVIF authentication using common username(s) and password(s)...
[success] 192.168.1.135 supports ONVIF on port 80
⠼ Trying ONVIF on 192.168.1.135:80 with camera:12345

Opciones útiles:

  • --skip-onvif: omitir la detección y enumeración de ONVIF
  • -oP, --onvif-port PORT: probar un puerto ONVIF específico
  • -ou, --onvif-username USER: nombre de usuario ONVIF o archivo con un nombre de usuario por línea
  • -op, --onvif-password PASS: contraseña ONVIF o archivo con una contraseña por línea

Si no se especifican -ou y -op, pwneye recurre automáticamente a sus nombres de usuario y contraseñas ONVIF comunes integrados.

pwneye almacena en caché las credenciales ONVIF exitosas por objetivo en ~/.pwneye/cache y las reutiliza en ejecuciones futuras a menos que uses --fresh o --no-cache.

Reiniciar una cámara

Si la autenticación ONVIF tiene éxito, puedes solicitar un reinicio directamente:``` pwneye -t 192.168.1.135 --reboot

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135 [info] Checking if the target (192.168.1.135) is reachable... [info] The target seems to be reachable [info] Trying cached ONVIF credentials for the target... [success] 192.168.1.135 supports ONVIF on port 80 [success] ONVIF connection established using the following configuration:

Port: 80 ONVIF Username: admin ONVIF Password: Hackerest1

[warning] Requesting ONVIF system reboot... [info] ONVIF reboot request sent [info] Checking if the camera is still reachable... [success] The device has been rebooted!

root@kitploit:~
Cuando se usa `--reboot`, se omite el sondeo RTSP.

### Restablecimiento de una cámara

Si la autenticación ONVIF se realiza correctamente, también puedes solicitar un restablecimiento de fábrica directamente:```text
pwneye -t 192.168.1.135 --reset

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[>] Do you really want to factory-reset the camera via ONVIF? [(y)es/(n)o] (default: n):
[warning] Requesting ONVIF factory reset...
[info] ONVIF factory reset request sent
[info] Checking if the camera is still reachable...
[warning] The ONVIF factory reset request was sent, but the target still appears to be reachable. Please verify manually that the reset was completed.

Advertencia: esta operación puede ser irreversible y puede borrar la configuración actual del dispositivo, las credenciales y los ajustes de red. Utilice --reset solo cuando comprenda completamente el impacto y esté explícitamente autorizado para realizarla.

Al igual que con --reboot, cuando se utiliza --reset, se omite el sondeo RTSP.

Mover la cámara

Si el objetivo expone controles PTZ a través de ONVIF, pwneye puede mover la cámara tanto desde la terminal como desde el visor en vivo dedicado.

Desde la CLI, utilice --move con direction,duration. La bandera se puede repetir, y los movimientos solicitados se ejecutan en secuencia mientras se omite el sondeo RTSP:```bash pwneye -t 192.168.1.135 --move right,2 pwneye -t 192.168.1.135 --move right,2 --move up,1 --move down,3 pwneye -t 192.168.1.135 --move r,2 --move u,1 --move d,3

root@kitploit:~
Las direcciones aceptadas son:

- `left` o `l`
- `right` o `r`
- `up` o `u`
- `down` o `d`

Ejemplo:```text
pwneye -t 192.168.1.135 --move r,2 --move u,1

...
[info] Trying cached ONVIF credentials for the target...
...
[success] ONVIF connection established using the following configuration:
...

[info] Requesting ONVIF PTZ move to right for 2.00 second(s)...
[info] The ONVIF move command was accepted
[info] Requesting ONVIF PTZ move to up for 1.00 second(s)...
[info] The ONVIF move command was accepted
[success] The camera has been moved!

Dentro del visor dedicado, si se admite PTZ, la vista enfocada también te permite mover la cámara de forma interactiva con W, A, S y D. Esto resulta útil cuando ya tienes un flujo funcional y deseas una retroalimentación visual directa mientras ajustas el dispositivo.

Alterando un flujo

Si la autenticación ONVIF se realiza correctamente, pwneye también puede intentar alterar el flujo directamente:```bash pwneye -t 192.168.1.135 --deface "THIS CAMERA IS EXPOSED"

root@kitploit:~
Qué hace `--deface`, en resumen:

- primero comprueba si el objetivo admite el oscurecimiento de la transmisión mediante ONVIF Imaging
- también comprueba si el objetivo expone capas de texto ONVIF reutilizables
- si ambas están disponibles, `pwneye` realiza un deface completo
- si solo una está disponible, `pwneye` advierte al usuario y ofrece un deface parcial en su lugar
- antes de cambiar nada, `pwneye` guarda un perfil de restauración para el objetivo en `~/.pwneye/cache`

La implementación es intencionalmente conservadora y compatible con los fabricantes:

- para el paso de oscurecimiento, `pwneye` reduce los controles de imagen compatibles, como brillo, contraste y saturación, en lugar de depender de trucos específicos del fabricante
- para el paso de texto, `pwneye` reutiliza las capas de texto ONVIF existentes y escribibles en lugar de crear o eliminar nuevas entradas OSD
- esto hace que la función sea más compatible entre diferentes familias de cámaras, incluso si el resultado visual final aún depende del firmware

Ejemplo:```text
pwneye -t 192.168.1.135 --deface "THIS CAMERA IS EXPOSED"

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[info] Inspecting ONVIF deface capabilities...
[info] The target supports ONVIF deface
[>] Do you want to proceed with the deface attempt? [(y)es/(n)o] (default: n): y
[warning] Trying to deface the target stream with THIS CAMERA IS EXPOSED
[info] A backup profile is being created for future restorations...
[success] Backup profile saved successfully to /Users/user/.pwneye/cache/192.168.1.135.yaml
[info] Trying to darken the stream...
[success] The stream was darkened successfully
[info] Trying to replace the current on-stream text with THIS CAMERA IS EXPOSED
[info] Verifying the text update...
[success] The target stream has been defaced!
[info] To restore the previous configuration, run the tool again with --undeface

Marcador de posición de deface

Deshacer el deface de un stream

Si una ejecución anterior de --deface guardó un perfil de restauración para el objetivo, pwneye puede usarlo para restaurar el estado ONVIF original:```bash pwneye -t 192.168.1.135 --undeface

root@kitploit:~
Qué hace `--undeface`, en resumen:

- busca un perfil de restauración de deface guardado previamente en la entrada de caché del objetivo
- si no existe ningún perfil, se detiene inmediatamente con un error
- si existe un perfil, intenta restaurar la configuración de Imaging original y las capas de texto editables originales
- al igual que con `--deface`, el resultado final puede ser completo o parcial dependiendo de lo que el objetivo permita a través de ONVIF

El perfil de restauración no se elimina después de un `--undeface` exitoso. Permanece en la caché hasta que un futuro `--deface` lo sobrescriba con un perfil más reciente.

Ejemplo:```text
pwneye -t 192.168.1.135 --undeface

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[info] Looking for a saved deface profile for this target...
[info] A saved deface profile was found at /Users/user/.pwneye/cache/192.168.1.135.yaml
[>] Do you want to proceed with the undeface attempt? [(y)es/(n)o] (default: n): y
[warning] Trying to restore the target stream...
[info] Trying to restore the original stream brightness profile...
[success] The original stream brightness profile was restored successfully
[info] Trying to restore the original on-stream text...
[success] The original on-stream text was restored successfully
[success] The target stream has been restored!

Obteniendo un shell

Si la autenticación ONVIF tiene éxito, pwneye también puede llevarte directamente a un shell interactivo de ONVIF. Esto es útil cuando quieres inspeccionar servicios, llamar métodos manualmente, explorar capacidades o probar operaciones específicas del objetivo sin salir del flujo de trabajo actual.

Ejemplo:```text pwneye -t 192.168.1.135 --shell

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135 [info] Checking if the target (192.168.1.135) is reachable... [info] The target seems to be reachable [info] Trying cached ONVIF credentials for the target... [success] 192.168.1.135 supports ONVIF on port 80 [success] ONVIF connection established using the following configuration:

Port: 80 ONVIF Username: admin ONVIF Password: Hackerest1

[info] Opening the interactive ONVIF shell...

This feature is powered by https://github.com/nirsimetri/onvif-python (leave it a ⭐!) Use TAB for completion and help for commands.

[email protected]:80 > ls analytics events media2 pullpoint ruleengine capabilities help store cls debug pwd type deviceio imaging notification recording search caps exit rm clear ls shortcuts devicemgmt media ptz replay subscription services quit show info cd desc

root@kitploit:~
## RTSP

RTSP es el lado de streaming del mundo de las cámaras. Es el protocolo que normalmente te da la ruta de vídeo en vivo, pero también es el más fragmentado: los fabricantes usan rutas diferentes, convenciones de canales, peculiaridades de autenticación y formatos de banner distintos.

En `pwneye`, el manejo de RTSP se construye en torno al descubrimiento de puertos, la captura de banners, la selección de rutas según el fabricante, la orquestación de fuerza bruta, la validación de streams, la vista previa y la grabación.

### Qué te ofrece RTSP

RTSP es la parte del flujo de trabajo que confirma si realmente puedes acceder a un stream. En `pwneye`, eso significa:

- detectar RTSP en puertos comunes o especificados por el usuario
- capturar banners e intentar identificar el fabricante automáticamente
- realizar fuerza bruta de credenciales contra rutas según el fabricante o proporcionadas por el usuario
- validar streams funcionales antes de abrirlos
- grabar streams o capturar instantáneas como evidencia
- enumerar múltiples canales cuando el objetivo se comporta como un DVR o NVR

### Identificar el fabricante

`pwneye` intentará identificar el fabricante de RTSP automáticamente mediante la captura de banners de RTSP antes de recurrir a una enumeración de rutas más amplia.

Si la identificación automática basada en banners falla y ya conoces el fabricante por un análisis previo, puedes pasarlo directamente para reducir significativamente el número de solicitudes:```bash
pwneye -t 192.168.1.135 --vendor tenda

También puedes obtener solo el banner RTSP y salir:``` pwneye -t 192.168.1.135 --skip-onvif --banner

... [info] RTSP service detected on port(s): 554 [success] RTSP banner on port 554: Hipcam RealServer/V1.0

root@kitploit:~
Opciones útiles:
- `--skip-rtsp`: omitir la detección y fuerza bruta de RTSP
- `-P, --rtsp-port PORT`: probar un puerto RTSP específico
- `--vendor VENDOR`: forzar un fabricante de la base de datos RTSP
- `--list-vendors`: mostrar los fabricantes compatibles con la base de conocimiento RTSP y salir
- `--protocol tcp|udp`: elegir el transporte RTSP, el valor predeterminado es `tcp`
- `--timeout SECONDS`: tiempo de espera de RTSP, el valor predeterminado es `10`

### Fuerza bruta RTSP

Fuerza bruta RTSP con credenciales fijas:```bash
pwneye -t 192.168.1.135 --username admin --password admin

Rota solo los nombres de usuario con una contraseña fija:```bash pwneye -t 192.168.1.135 --password 'SuperSecretPass' --vendor hikvision --threads 10

root@kitploit:~
Pruebe una cadena de conexión RTSP proporcionada por un único usuario:```bash
pwneye -t 192.168.1.135 --skip-onvif -cn "/11"
pwneye -t 192.168.1.135 --skip-onvif -cn "/cam/realmonitor?channel=1&subtype=0"

Cargar cadenas de conexión candidatas desde el archivo:```bash pwneye -t 192.168.1.135 --skip-onvif -cn paths.txt

root@kitploit:~
Combina una ruta manual con credenciales fijas:```bash
pwneye -t 192.168.1.135 --skip-onvif -u admin -p admin -cn "/live/ch00_0"

Prefiera rutas multicanal cuando el objetivo probablemente sea un DVR/NVR:```bash pwneye -t 192.168.1.135 --skip-onvif --multi-channel

root@kitploit:~
Opciones útiles:
- `-u, --username USER`: nombre de usuario RTSP o archivo con un nombre de usuario por línea
- `-p, --password PASS`: contraseña RTSP o archivo con una contraseña por línea
- `-cn, --connection-string PATH`: cadena de conexión RTSP o archivo con una cadena de conexión por línea
- `--multi-channel`: preferir cadenas de conexión RTSP multicanal cuando estén disponibles
- `--threads N`: número de hilos concurrentes utilizados por el motor de fuerza bruta

Si no se especifican `-u` y `-p`, `pwneye` recurre automáticamente a sus nombres de usuario y contraseñas RTSP comunes integrados.

`pwneye` almacena en caché las credenciales RTSP exitosas y los metadatos de flujo validados por objetivo en `~/.pwneye/cache`.

Comportamiento de la caché:
- predeterminado: reutilizar hallazgos válidos en caché antes de ejecutar una fuerza bruta nueva
- `--fresh`: ignorar resultados en caché pero seguir actualizando la caché con nuevos hallazgos
- `--no-cache`: deshabilitar tanto lecturas como escrituras de caché

### Flujos Multicanal

Algunas cámaras, DVR y NVR exponen múltiples canales RTSP lógicos en lugar de una única ruta estática. Los ejemplos típicos incluyen plantillas como:```text
rtsp://IP:554/?chID=1&streamType=main&linkType=tcp
rtsp://IP:554/cam/realmonitor?channel=1&subtype=0

pwneye puede detectar esto automáticamente mientras sondea RTSP, incluso mediante el conocimiento de RTSP basado en el fabricante, pero también puedes dirigir el proceso explícitamente:

  • --multi-channel le indica a pwneye que prefiera rutas RTSP basadas en canales desde la base de conocimiento
  • --connection-string te permite proporcionar tu propia plantilla de canal, incluidos marcadores de posición como {channel}
  • la misma lógica de plantilla también funciona cuando las cadenas de conexión provienen de un archivo
  • una vez que se encuentran múltiples canales, pwneye puede abrir una sola transmisión o un visor dedicado de múltiples canales en una ventana

Ejemplos:```bash pwneye -t 192.168.1.135 --skip-onvif --multi-channel pwneye -t 192.168.1.135 --skip-onvif -cn '/cam/realmonitor?channel={channel}&subtype=0' pwneye -t 192.168.1.135 --skip-onvif -cn channel_paths.txt

root@kitploit:~
Muestra de salida:```text
[info] Enumerating RTSP channels using the validated connection template...
[info] Press CTRL-C to stop channel enumeration and choose from the channels found
[success] RTSP channel 2 is valid
[success] RTSP channel 3 is valid
[warning] RTSP channel enumeration interrupted by user. Using the channels discovered so far

   [0] Open all discovered channels in a dedicated client
   [1] Channel 1: rtsp://192.168.1.135:554/cam/realmonitor?channel=1&subtype=0
   [2] Channel 2: rtsp://192.168.1.135:554/cam/realmonitor?channel=2&subtype=0
   [3] Channel 3: rtsp://192.168.1.135:554/cam/realmonitor?channel=3&subtype=0

[>] Select channel (CTRL-C to exit):

Si eliges Open all discovered channels, pwneye lanza un cliente multicanal dedicado que mantiene todos los streams descubiertos dentro de una sola ventana. Cada feed se muestra en el mosaico como una vista previa en vivo, y al hacer clic en un mosaico se promueve ese canal a una vista enfocada más grande con una acción simple de Back para volver a la cuadrícula.

demo del cliente multicanal dedicado de pwneye

Por defecto, la vista previa RTSP en vivo utiliza el cliente dedicado de pwneye. Si prefieres el flujo de trabajo clásico con reproductor del sistema, puedes añadir --legacy para abrir el stream validado con ffplay.

Cuando el cliente dedicado está abierto, también puedes activar Snapshot y Record directamente desde la vista enfocada sin salir de la GUI. Esto es útil cuando quieres inspeccionar un feed primero y solo entonces decidir guardar una imagen fija o comenzar a grabar evidencia.

Streaming, grabación y capturas

Abrir un stream validado con vista previa en vivo:```bash pwneye -t 192.168.1.135 --vendor tenda

root@kitploit:~
Recorda un flujo RTSP validado con vista previa:```bash
pwneye -t 192.168.1.135 --record
pwneye -t 192.168.1.135 --record living-room.mp4

Captura una instantánea en lugar de una grabación completa:```bash pwneye -t 192.168.1.135 --snapshot pwneye -t 192.168.1.135 --snapshot living-room.jpg

root@kitploit:~
Registrar sin abrir la ventana de vista previa:```
pwneye -t 192.168.1.135 --record living-room.mp4 --no-video

...
[info] Recording RTSP stream to /Users/user/.pwneye/recordings/192.168.1.135/2026-04-14_20-25-03.mp4
[info] Press CTRL-C to stop the recording
[warning] Retrying MP4 finalization in compatibility mode (transcoding)...
[success] Recording saved to /Users/user/.pwneye/recordings/192.168.1.135/2026-04-14_20-25-03.mp4 (5.75 MB)

Comportamiento de grabación:

  • --record [OUTPUT.mp4]: graba el flujo RTSP validado; si se omite, se crea un archivo con marca de tiempo en ~/.pwneye/recordings
  • --snapshot [OUTPUT.jpg]: guarda un fotograma fijo del flujo RTSP validado; si se omite, se crea un archivo con marca de tiempo en ~/.pwneye/snapshots
  • --no-video: omite la vista previa en vivo y la decodificación
  • el visor dedicado también expone las acciones Snapshot y Record directamente en la vista enfocada
  • las grabaciones predeterminadas se almacenan en ~/.pwneye/recordings/<target>/
  • las instantáneas predeterminadas se almacenan en ~/.pwneye/snapshots/<target>/

Consejos y trucos

Si pwneye fuera un videojuego, estos son probablemente los consejos que verías en la pantalla de carga:

  • Una interfaz web sólida no significa una cámara segura: Una cámara con una interfaz web bien protegida no está necesariamente bien protegida en general. Es común encontrar un bloqueo web sólido mientras RTSP permanece sin autenticación o acepta intentos prácticamente ilimitados.
  • Usa la detección cuando puedas: Si --discover funciona en la red local, úsalo primero. La información del proveedor, los metadatos del dispositivo y los hallazgos en caché pueden hacer que el trabajo RTSP posterior sea mucho más silencioso y fiable.
  • ONVIF primero puede ser la jugada más inteligente: ONVIF y RTSP a menudo comparten las mismas credenciales. Si ONVIF está expuesto, normalmente es más inteligente probar por fuerza bruta ese lado primero con --skip-rtsp en lugar de golpear RTSP directamente y hacer que el flujo sea inestable. Cuando pwneye encuentra credenciales ONVIF válidas, intentará reutilizarlas automáticamente en RTSP.
  • Los proveedores conocidos reducen el ruido: Si ya conoces el proveedor, pasa --vendor explícitamente. Reduce las solicitudes y puede ayudar a mantener estables los objetivos frágiles.
  • Las rutas conocidas superan a la adivinación a ciegas: Si ya conoces o sospechas la ruta, usa --connection-string en lugar de una enumeración RTSP amplia. Te da un control más estricto sobre el conjunto de solicitudes y hace que los fallos sean más fáciles de interpretar.
  • Una grabadora puede exponer más de un flujo: Si un objetivo parece un DVR/NVR, prueba --multi-channel o una plantilla de canal manual antes de asumir que solo expone un único flujo.
  • El reinicio puede ser un paso de recuperación: Si tienes credenciales RTSP válidas pero aún no puedes abrir el video, el flujo puede simplemente ser inestable después de sondeos repetidos. Si también tienes acceso ONVIF, un paso de recuperación contundente pero a menudo efectivo es .

Agradecimientos

Un agradecimiento especial a @kaburagisec por onvif-python, la biblioteca ONVIF utilizada por pwneye. Hizo que el lado ONVIF de este proyecto fuera mucho más fácil y fiable.

Gracias a Darix Deros por ayudar durante las pruebas y por compartir varias sugerencias útiles que mejoraron partes de la herramienta, incluido el flujo de trabajo de detección ONVIF.

Seguridad

Usa pwneye solo contra activos que te pertenecen o para los que tienes autorización explícita de evaluación.

Esta herramienta puede enumerar servicios, probar autenticación, abrir flujos, grabar video, interactuar con funciones administrativas de ONVIF y, con privilegios suficientes, reiniciar, restablecer, alterar o modificar de otro modo el comportamiento de un dispositivo objetivo.

Incluso cuando tu objetivo es solo la recopilación de evidencia, el sondeo RTSP repetido puede hacer que las cámaras frágiles sean inestables, y las acciones ONVIF pueden tener un impacto operativo inmediato.

Licencia

Este proyecto se distribuye bajo la Licencia GNU GPL3. Consulta LICENSE.md.

Descargar herramienta
--reboot
  • Un flujo válido no siempre es uno significativo: Algunos dispositivos devolverán felizmente un flujo incluso para rutas incorrectas e ID de canal incorrectos. Trata el éxito amplio de canales como una pista hasta que confirmes que el flujo resultante es realmente diferente.