
Exploit personalizado escrito para enumerar nombres de usuario según CVE-2016-6210
Exploit personalizado (python 2.7) escrito para enumerar nombres de usuario según CVE-2016-6210 (OpenSSH 7.2-p2 y anteriores)
solo debe usarse en sistemas autorizados
Escribí este programa como una herramienta para explotar CVE-2016-6210, que es una vulnerabilidad en OpenSSH (antes de la versión 7.3) revelada por Eddie Harari
Según entiendo, el problema es que la forma en que OpenSSH funcionaba en estas versiones significa que cuando se proporciona una contraseña grande (en este caso 25kb), los tiempos de procesamiento del hash hacen que podamos determinar si un nombre de usuario existe o no, ya que el tiempo es mayor para usuarios válidos.
Este programa ayuda a explotar esta vulnerabilidad permitiendo al usuario enviar una serie de nombres de usuario (desde una lista de palabras) y calcular cuánto tiempo tomó procesarlos. El usuario puede configurar una alerta para un tiempo que le convenga, y se mostrarán el tiempo y el nombre de usuario si el tiempo de procesamiento supera ese valor.
El usuario también puede agregar una IP o correo electrónico para probar tanto el elemento de la lista con y sin el añadido de correo al final. Por defecto, (si no se proporciona un apéndice) el programa probará cada palabra de la lista en las formas word, y word@IP. Si se proporciona un apéndice, hará lo mismo, pero reemplazando word@IP con word@appendage.
La cantidad de veces que se envía cada palabra y se mide el tiempo de respuesta se puede personalizar, y el programa generará automáticamente un tiempo de procesamiento promedio que luego se utilizará en lugar de los tiempos individuales, por motivos de fiabilidad.
También se puede proporcionar un retardo, evitando que el programa envíe demasiadas solicitudes demasiado rápido.
En cuanto al código de solicitud ssh, el crédito es para Eddie Harari por la mayor parte del código en cveCode.py: se utiliza una versión modificada del código de Harari para enviar y calcular los tiempos. Su aviso y código de muestra se pueden encontrar aquí
Nota: Mi código solo ha sido probado como caja negra en OpenSSH-7.2p2 (el cliente es kali linux) y necesita más pruebas. Los resultados y parámetros son controlados e interpretados por el usuario
python exploit_6210.py IP_ADDRESS [-h] [-a ALERT] [-w WORDLIST] [-e EMAIL] [-av ITERATE_AMOUNT] [-d DELAY]
Donde:
IP_ADDRESS es el host contra el que estás probando el programa
-a ALERT (opcional, valor predeterminado 0.1) es la cantidad de tiempo (en segundos) para la cual te gustaría que se genere una alerta si el tiempo de procesamiento es mayor
-w WORDLIST (opcional, valor predeterminado usernamelist) es la ruta del archivo para la lista de nombres de usuario que te gustaría probar contra el host
-e EMAIL (opcional) es el apéndice de IP o correo electrónico (que debería verse como: @IP_ADDRESS o @email.com) que te gustaría probar al final de cada elemento de la lista de palabras (nota: se probarán tanto el elemento como el elemento + correo)
-av ITERATE_AMOUNT (opcional, valor predeterminado 1) es la cantidad de veces que se consulta al servidor ssh por cada nombre de usuario dado, lo que permite utilizar promedios más fiables para los tiempos (cuanto mayor sea el número, más tiempo tomará, por MUCHO)
-d DELAY (opcional, valor predeterminado 0.5) es el retardo aproximado (en segundos) entre cada solicitud (cuanto mayor sea el número, más tiempo tomará, por MUCHO)