Shocker
Una herramienta para encontrar y explotar servidores vulnerables a Shellshock
Referencia: https://en.wikipedia.org/wiki/Shellshock_(software_bug)
Publicado como código abierto por NCC Group Plc - https://www.nccgroup.trust/
Desarrollado por:
- Tom Watson, tom [dot] watson [at] nccgroup [dot] trust
https://github.com/nccgroup/shocker
Publicado bajo AGPL, consulte LICENSE para más información
Texto de ayuda
uso:
shocker.py
-h, --help muestra este mensaje de ayuda y sale
--Host HOST, -H HOST Un nombre de host o dirección IP de destino
--file FILE, -f FILE Archivo que contiene una lista de objetivos
--port PORT, -p PORT El número de puerto de destino (por defecto=80)
--command COMMAND Comando a ejecutar (por defecto=/bin/uname -a)
--cgi CGI, -c CGI Único CGI a verificar (ej. /cgi-bin/test.cgi)
--proxy PROXY ACTUALMENTE UN POCO ROTO Proxy a usar en el formato 'ip:port'
--ssl, -s Usar SSL (por defecto=False)
--threads THREADS, -t THREADS Número máximo de hilos (por defecto=10, máx=100)
--verbose, -v Ser verboso en la salida
Ejemplos de uso
./shocker.py -H 127.0.0.1 --command "/bin/cat /etc/passwd" -c /cgi-bin/test.cgi
Escanea http://127.0.0.1/cgi-bin/test.cgi y, si lo encuentra, intenta hacer cat de /etc/passwd
./shocker.py -H www.example.com -p 8001 -s
Escanea www.example.com en el puerto 8001 usando SSL para todos los scripts en cgi_list e intenta el exploit predeterminado para cualquier encontrado
./shocker.py -f ./hostlist
Escanea todos los hosts listados en el archivo ./hostlist con las opciones predeterminadas
Dependencias
Python 2.7+
Registro de cambios
Cambios en la versión 1.1 (Junio 2018)
- Se añadió funcionalidad de depuración adicional y se corrigió el texto de ayuda
Cambios en la versión 1.0 (Marzo 2016)
- Se contribuyeron algunos scripts adicionales y se actualizaron algunos comentarios, URL y detalles de contacto
Cambios en la versión 0.72 (Diciembre 2014)
- Correcciones menores a la lógica y errores tipográficos
Cambios en la versión 0.71 (Diciembre 2014)
- Se añadió tiempo de espera a las solicitudes urllib2.urlopen usando un 'TIMEOUT' global
Cambios en la versión 0.7 (Noviembre 2014)
- Se añadió una 'pseudoconsola' interactiva para una mayor explotación de un servidor vulnerable elegido
- Se intentó limpiar los problemas de buffering de salida envolviendo sys.stdout en una clase que se vacía en cada llamada a write
- Se añadió un indicador de progreso para usar en tareas que consumen mucho tiempo para tranquilizar a los usuarios no verbosos
Cambios en la versión 0.6 (Octubre 2014)
- Se evita que códigos de retorno distintos de 200 se consideren exitosos
- Se añadió la capacidad de especificar múltiples objetivos en un archivo
- Se movió la lista 'cgi_list' de scripts a intentar explotar a un archivo
- Se corrigieron algunos problemas de formato de salida
- Se corrigió la expresión regular de nombre de host/IP válido para permitir nombres de host de una sola palabra
Cambios en la versión 0.5 (Octubre 2014)
- Se añadió la capacidad de especificar un solo script como objetivo en lugar de usar cgi_list
- Se introdujo un tiempo de espera en las operaciones de socket para host_check
- Se añadieron algunos ejemplos de uso en el encabezado del script
- Se añadió un epílogo al texto de ayuda indicando la presencia de ejemplos
Cambios en la versión 0.4 (Octubre 2014)
- Se introdujo un límite de número de hilos con valor predeterminado de 10
- Se eliminó el soporte de color hasta que pueda descubrir cómo hacerlo funcionar igual de bien en Windows y *nix
- Correcciones ortográficas
- Lista cgi_list más completa
- Se eliminó success_flag de la salida
Pre 0.4 (Octubre 2014)
POR HACER
- Identificar y responder correctamente a la respuesta HTTP/200 - falsos positivos - Baja prioridad/dificultad
- Implementar curses para sistemas *nix - ¿Para toda la aplicación o solo terminal psuedo? - Baja prioridad/estética
- Hacer multihilo en la verificación inicial del host ahora que se soportan múltiples objetivos (y podría hacer que esta parte consuma tiempo)
- Cambiar verbose a un valor entero - silencioso, normal, verboso, depuración?
- ¿Añadir opción para omitir las verificaciones iniciales del host por velocidad?
- Añadir un resumen de resultados antes de salir
- ¿Guardar resultados en un archivo? ¿Formato?
- Eventualmente la idea es incluir múltiples vectores posibles pero actualmente solo se verifica uno.
- Añadir soporte de color para Windows y *nix - Baja prioridad/estética
- Añadir un tiempo de espera en modo interactivo para comandos que no retornan, ej. /bin/cat /dev/zero
- Embellecer - Baja prioridad/estética (obviamente)
- ¿Añadir soporte para escanear y explotar SSH y SMTP? https://isc.sans.edu/diary/Shellshock+via+SMTP/18879
- Añadir soporte para proxy SOCKS, potencialmente usando https://github.com/rpicard/socksonsocks/ de Rober Picard
- Otras cosas. Probablemente.
Agradecimientos a...
Anthony Caulfield @ NCC por el tiempo y esfuerzo revisando versiones tempranas
Brendan Coles @ NCC por su apoyo y contribuciones