lunes, septiembre 15, 2008

A lo Brutus

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!

14 comentarios:

Anónimo dijo...

Si yo de vez en cuando lo he usado. Un clásico.

Anónimo dijo...

Ah, se me olvidaba.

Ha 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. ;-)

Juan dijo...

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.

De 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)

NetVicious dijo...

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)

http://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.

Anónimo dijo...

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.

Unknown dijo...

Olé, 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

Por 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.

Anónimo dijo...

Por cierto, no puedo acceder a la configuración de mi router vía http porque he olvidado la contraseña que le puse.

Nada 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?

Anónimo dijo...

@Dr. Falken (el malo o el falso)

En tiempo te saldrá más rentable resetear el router de fábrica por hardware.
Un saludo.

Anónimo dijo...

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.

Por eso lo del reset hardware de momento lo descarto.

Anónimo dijo...

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...

Saludos

Demiurgo dijo...

jp, el size indica el ancho visible, puedes escribir todo lo que quieras :X

Anónimo dijo...

Esta es la cosa de un menos mal, que si no, ¿pa qué íbamos a estar nosotros?

des dijo...

@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 ;)

eduardo dijo...

La 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, ...

Si 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,

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares