Muy buenas Underc0ders,

Hoy vengo a hablaros de algo que he visto varias veces y me gustaría compilarlo todo y dejarlo aquí ya que pienso que podría serle útil a alguien. Se trata de lo que yo he llamado DoU (Denial of Users), o en Castellano, Denegación de Usuario, refiriéndome de esta forma al bloqueo de un usuario ya sea o bien de forma temporal o bien de forma permanente, y aunque es algo de lo que ya se ha hablado nunca he visto un buen tutorial sobre el tema, además incluiré algo que yo no había visto por la red.

ARMANDO LABORATORIO

Lo primero que vamos a hacer es armar nuestro laboratorio, aquí seré breve, básicamente lo que tenemos que hacer es montar un servidor web con php y una base de datos, también pueden usar algún tipo de hosting free que lo dan ya todo montado.

 

Crearemos una tabla en nuestra base de datos, que mantendrá la siguiente estructura.

 

Para ello podemos usar el siguiente Statment.

 

Código: MySQL

 

También por aquí encontraran todo el código que usado para hacer las POCs (Ya se que el código es muy mal, pero lo hice rápido para hacer las pruebas)

https://drive.google.com/file/d/1FDWR-lrSoAvuy7oLJBrFLnzxgjTFs0Y3/view?usp=sharing

 

Una vez subamos todo el código debemos modificar el config.php con nuestros datos y ya podremos acceder a “url.es/pruebas.php”

 

Para hacer las pruebas pueden hacerlo en el laboratorio que preparé mientras esté online.

http://testparauc.atwebpages.com/pruebas.php

 

DoU POR FUERZA BRUTA A USUARIO

 

El primer caso que nos encontramos es una medida de evasión en la que las páginas webs bloquean a un usuario tras un numero de intento de sesión fallidos. Esto se hace para evitar ataques de fuerza bruta.

Para volver a poder tener acceso a la cuenta normalmente hay que realizar algún tipo de proceso vía email, o bien esperar una cantidad de tiempo, por lo que en este caso se trataría de un bloqueo temporal, a pesar de esto, puede ser dañino si se hace en ciertos momentos clave.

Para realizar la PoC vamos a registrar a un usuario, en mi caso test01, con credenciales test01.

Lo siguiente que haremos será loguearnos con el usuario test01 y unos credenciales incorrectos, capturando la petición con BurpSuite y enviándola al intruder.

(Para los que no hayan usado BurpSuite aconsejo mirar los tutoriales de Snifer)

Una vez capturada la petición lo configuraremos para que vaya probando contraseñas diferentes, como si un ataque de fuerza bruta se tratase, en mi caso lo he hecho a través de una lista numérica.

 

 

Una vez configurado lanzaremos el ataque, como se puede observar la lista es de mil números, para asegurarme que hace el número de intentos necesarios para que bloquee al usuario.

 

Una vez hecho esto podemos comprobar que al intentar acceder con el usuario y contraseña correctos nos devolverá una alerta diciendo que el usuario ha sido bloqueado.

 

DoU POR FUERZA BRUTA A IP

Este segundo caso funciona igual, la única diferencia es que en lugar de bloquear al usuario, bloquea la IP, por lo que si repetimos el proceso anterior nosotros seremos bloqueados, pero el usuario legítimo podrá seguir accediendo. Este tipo de bloqueo suele ser temporal.

Ahora crearemos de la misma forma un usuario que será test02 y accederemos a la segunda sección de bloqueo de usuarios por IP.

En este caso lo que haremos será en un servidor propio, crear una página que al entrar envíe muchas peticiones al login desde el cliente del navegador, de tal forma que al entrar el usuario legítimo en nuestra página maliciosa quedaría bloqueado.

Igual que en la ocasión anterior vamos a interceptar la petición para observar como es.

 

Una vez interceptada la petición tenemos la información suficiente para preparar nuestro código, quedando de la siguiente forma.

Código: HTML5

 

Una vez subido nuestro código se lo enviaremos a la víctima, donde el verá lo siguiente.

 

Después de ver esto si intenta entrar en la página la aplicación detectará que ha hecho demasiados intentos y habrá bloqueado su IP.

DoU POR NOMBRE DE USUARIO

El siguiente caso es algo que descubrí en una auditoria, donde al  crear un usuario con el mismo nombre que otro ya existente el primero queda bloqueado y no se puede acceder. Esto es así por 3 motivos.

  • Los valores no están identificados como únicos en la base de datos, por lo que en una columna puede haber dos filas con un mismo valor de una columna.
  • Al registrar un usuario o modificarlo la aplicación no comprueba si ese nombre usuario o email ha sido creado anteriormene
  • En la consulta en lugar de hacer SELECT * FROM usuarios y después seleccionar la parte que nos interesa, se hace SELECT password FROM usuarios, de tal forma que si hay varios usuarios iguales no devuelve un solo String, y al hacer la comparación dará siempre falsa

 

Para comprobar esto vamos a crear un usuario con usuario: test03 y contraseña: test03 y después accederemos normalmente para comprobar que funciona.

Una vez hecho esto volveremos a crear un usuario con usuario: test03 y contraseña: bloqueo, una vez hecho esto intentaremos acceder y veremos que no somos capaces de hacerlo con ninguna de las dos combinaciones.

 

 

Hasta aquí lo que venía a contarles y espero que les sea útil en algún momento.

También me pueden seguir en Twitter si les hace ilusión: @RoloMijan

Saludos.

Posts Relacionados

Comments

comments

Deja una respuesta

Tu email no será publicado. Los campos requeridos estan marcados con *
Puedes usar tags HTML y los atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">