domingo, 3 de mayo de 2020

Vulnerar Login SQLi sql injection Bypass - Laboratorio

Login Bypass Con SQLi - Laboratorio

Login bypass - sql injection
Login bypass - sql injection

Payloads:

  • ' OR 1=1--
  • 'OR '' = '
  • 'OR 1=1--
  • ' or "
  • -- or # 
  • ' OR '1
  • ' OR 1 -- -
  • " OR "" = "
  • " OR 1 = 1 -- -
  • ' OR '' = '
  • '=0--+
  •  OR 1=1
  • 'or'1'='1  ->> usado es este laboratorio

Objetivo del laboratorio

Cuando los sistemas de validación son creados sin tener en cuenta buenas prácticas de desarrollo nos podemos encontrar con escenarios en los cuales la inyección sql puede facilitar a los ciberdelincuentes el acceso a los sistemas mediante diferentes payloads los cuales al ser ingresados en los campos de usuario o contraseña permiten el acceso parcial o total al dashboard de administracion. Mediante este laboratorio se pretende desplegar un entorno de pruebas en el cual se puedan ejecutar los payloads previamente listados para observar el alcance que está vulnerabilidad puede tener en nuestros sistemas.

Lo primero que debemos hacer es crear una base de datos de prueba la cual tenga una tabla llamada users que contendrá los campos que se muestran en la siguiente imagen:

sql injection payload bypass login
Estructura de la tabla Users

todos los archivos tanto de la base de datos como el index.php y el index.html estarán al final de este post para su descarga.

En la tabla users ingresaremos un usuario en mi caso ingrese el siguiente:

sql injection payload bypass login
Usuario almacenado en la base de datos

lo último que debemos hacer es crear el archivo index.php el cual recibirá los parámetros por método get de usuario y contraseña y se encargará de buscar en la base de datos las credenciales ingresadas en el login.html para validar si existe o si los datos ingresados son erróneos.

codigo php vulnerable a sql injection - login bypass
Php vulnerable a sqli - login bypass
nos enfocaremos en este archivo php ya que este es el que consulta en la base de datos y el que contendrá la vulnerabilidad de sql injection. 

Si observamos la linea 17 la cual contiene la consulta a la base de datos:

 "SELECT * FROM users WHERE nickname = '$nickname_sent' and password = '$password_send';

nos podemos dar cuenta que no se ha hecho ningún tipo de validación por parte del desarrollador para evitar una inyección en los parámetros de nicknamae y password, de este modo si un atacante enviara como parametro 'or'1'='1  la consulta sql quedaría de este modo:

 "SELECT * FROM users WHERE nickname = ''or'1'='1' and password = ''or'1'='1';

Como podemos observar el payload  'or'1'='1   insertado como parámetro genera una inyección que sobreescribe la consulta sql y altera su normal funcionamiento, en este laboratorio daría como resultado el inicio de sesión con los datos del primer usuario almacenado en la tabla users pero a partir de este fallo se podría listar toda la información de la base de datos tests o las bases de datos almacenadas en el servidor.

Descargar Los archivos:

5 comentarios: