En una reciente auditoría me encontré con una web en una intranet mala, mala, mala. De esas que no me dejaba ponerla ninguna injección. Ni por arriba, ni por abajo, ni por LDAP, ni por SQL, ni por XPath, ni la del tetanos.
Sin embargo, el sistema de login tenía un formulario muy gracioso. Cuanod observas el código HTML te daba la longitud de la contraseña máxima de la cuenta.
Contraseña máxima de 10
Lógicamente eso fue al informe como una debilidad del sistema de autentificación porque limitar a 10 es limitar bastante las contraseñas en caso de que alguien accediese a la base de datos y pudiera lanzar un ataque de crackeo [siempre pensando que estén cifradas en la base de datos].
Después, probando un usuario de esos que se escriben golpeando el teclado el mensaje que me dio la aplicación fue de:
Usuario Incorrecto
Así que me dio por probar lo siguiente que probaría cualquiera. Es decir, con un usuario que se sepa que existe, como por ejemplo: Administrador, root, admin, administrator, etc... El mensaje de respuesta fue, con uno de ellos:
Contraseña Inválida
Pues... nada, si tenemos un usuario válido y sabemos que la contraseña es de máximo 10 digitos y no se come ninguna inyección...es una buena idea darle caña con un programa de fuerza bruta. Así que, tirando del baúl de los recuerdos y para no tener que hacer un script con el curl o programárte tú algo, tiré del viejo Brutus32 AET.
Brutus32 AET
Este programita está pensado para hacer fuerza bruta a aplicaciones web protegidas por autenticación básica, por formularios HTML, servidores FTP, POP3, Telnet, SMB e incluso el Netbus. Es del año 2000, pero tiene una utilidad muy chula para configurar los ataques a formularios HTML, ya que se lee el form, carga los campos, los macheas a usuario y password y le das cera.
Cargando campos del formulario
Bruteforcear sistemas de login suele ser lento, pero ante tantas facilidades a veces es recomendable. En este ejemplo en concreto se podían probar 3 contraseñas por segundo desde Internet y 8 (más o menos) por segundo desde la Intranet, es decir, desde la red interna.
Al final, en un día dio con la dichosa password... que era de 6 letritas. No está mal, si la longitud era entre 0 y 10, eligió una de más del 50 %.......
Saludos Malignos!
Sin embargo, el sistema de login tenía un formulario muy gracioso. Cuanod observas el código HTML te daba la longitud de la contraseña máxima de la cuenta.
Contraseña máxima de 10
Lógicamente eso fue al informe como una debilidad del sistema de autentificación porque limitar a 10 es limitar bastante las contraseñas en caso de que alguien accediese a la base de datos y pudiera lanzar un ataque de crackeo [siempre pensando que estén cifradas en la base de datos].
Después, probando un usuario de esos que se escriben golpeando el teclado el mensaje que me dio la aplicación fue de:
Usuario Incorrecto
Así que me dio por probar lo siguiente que probaría cualquiera. Es decir, con un usuario que se sepa que existe, como por ejemplo: Administrador, root, admin, administrator, etc... El mensaje de respuesta fue, con uno de ellos:
Contraseña Inválida
Pues... nada, si tenemos un usuario válido y sabemos que la contraseña es de máximo 10 digitos y no se come ninguna inyección...es una buena idea darle caña con un programa de fuerza bruta. Así que, tirando del baúl de los recuerdos y para no tener que hacer un script con el curl o programárte tú algo, tiré del viejo Brutus32 AET.
Brutus32 AET
Este programita está pensado para hacer fuerza bruta a aplicaciones web protegidas por autenticación básica, por formularios HTML, servidores FTP, POP3, Telnet, SMB e incluso el Netbus. Es del año 2000, pero tiene una utilidad muy chula para configurar los ataques a formularios HTML, ya que se lee el form, carga los campos, los macheas a usuario y password y le das cera.
Cargando campos del formulario
Bruteforcear sistemas de login suele ser lento, pero ante tantas facilidades a veces es recomendable. En este ejemplo en concreto se podían probar 3 contraseñas por segundo desde Internet y 8 (más o menos) por segundo desde la Intranet, es decir, desde la red interna.
Al final, en un día dio con la dichosa password... que era de 6 letritas. No está mal, si la longitud era entre 0 y 10, eligió una de más del 50 %.......
Saludos Malignos!
Si yo de vez en cuando lo he usado. Un clásico.
ResponderEliminarAh, se me olvidaba.
ResponderEliminarHa salido la nueva versión de nuestra vieja amiga Nmap, la 4.75, cuya mayor novedad es poder mostrar la topología de la red gráficamente.
Aunque sé que a muchos os gusta más los entornos meramente alfanúmericos. ;-)
El otro dia le mostre a mi pseudo-jefe (el que me cae bien) como mi ex- jefe (el que me cae mal) le había hecho una página vulnerable en la que cualquiera con 2 neuronas podía entrar.
ResponderEliminarDe hecho, pasaban dos cosas:
1) Mostraba el error en pantalla (y eso que esta hecha en .NET, con lo fácil que es no mostrar un error en .NET...)
2) El campo contraseña era de infinita longitud
Entonces utilicé el raiserror del sql, mandandole un parametro definido anteriormente que tomaba el nombre de usuario. En 5 minutos había entrado a la página como administrador
Jaja, todo gracias a leer tu blog! Estoy pensando que en una de esas en un futuro muy muy lejano voy a poder pasar un nivel de algun retohacking
Un Saludo (no dos)
Nota: El atributo size de un input indica el tamaño VISIBLE del campo. No el tamaño máximo de carácteres que admite (maxlength)
ResponderEliminarhttp://www.w3schools.com/TAGS/tag_input.asp
Pero vamos poca gente suele tener claves choriceras de más de 6-8 carácteres.
Dicha app tiene dos fallos:
- El mensaje de error de login no debe decir si es fallo de usuario o de clave.
- Le falta algún tipo de control de número de claves incorrectas para bloquear temporalmente la cuenta evitando un brute force.
Estaria bien que uno de estos dias nos hablaras de oscommerce, son miles los negocios que hay basados en esa plataforma y me da a mi que debe de ser vulnerable.
ResponderEliminarOlé, muy instructivo. Esta genial, pero me gustaría saber si existe alguno del estilo que no procese solo un formulario (si no que interprete el html de una web y lea una parte especifica) algunos ya deduciréis porque XD
ResponderEliminarPor otro lado como bien comenta net el atributo size es distinto del maxlenght pero muchos programadores suelen confundirlos y poner uno por el otro, asi que es bastante indicativo o útil como primera pista.
Por cierto, no puedo acceder a la configuración de mi router vía http porque he olvidado la contraseña que le puse.
ResponderEliminarNada más que entro en ella sale un recuadro pidiéndome la contraseña, no hay usuario o sea que mas fácil.
¿Podría usar el Brutus en este escenario, verdad?
@Dr. Falken (el malo o el falso)
ResponderEliminarEn tiempo te saldrá más rentable resetear el router de fábrica por hardware.
Un saludo.
Pero es que tengo un mogollón de reglas establecidas que no salve en su momento y muchas de ellas no me acuerdo bien de ellas.
ResponderEliminarPor eso lo del reset hardware de momento lo descarto.
Si bien net tiene razon en que son dos campos distintos, el hecho de que el máximo permitido en el campo del formulario sean 10 caracteres nos indica que ningun usuario va a poder acceder vía este formulario si tiene un password más largo, por lo que se deduce que probando con longitudes de 0 a 10 daremos con el acceso...
ResponderEliminarSaludos
jp, el size indica el ancho visible, puedes escribir todo lo que quieras :X
ResponderEliminarEsta es la cosa de un menos mal, que si no, ¿pa qué íbamos a estar nosotros?
ResponderEliminar@net: que se pueda bloquear la cuenta de otro usuario por hacer varios intentos de adivinar la password, consiguiendo por tanto una denegación de servicio, también es un error de diseño ;)
ResponderEliminarLa verdad es que es lamentable (o afortunado, según se mire xD) la cantidad de empresas que ponen passwords triviales a sus logins, usuario SA de las bases de datos, ...
ResponderEliminarSi la empresa se llama xxxx, nunca está de más mirar si han puesto passwords como xxxx01 y otros similares. Y también viene bien añadir a nuestras wordlist los nombres de pila de los administradores, por si acaso.
A veces, bastantes veces, funciona.
Saludos,