SQL Injection – Bypass Authentication

Una vulnerabilidad SQL Injection en un sitio web es una de las vulnerabilidades mas peligrosas que hoy en día existen, esta permite a un atacante ejecutar comandos a una base de datos a través de un servidor web.

La causa de esta vulnerabilidad se origina en una pobre programación en la que el desarrollador de un sitio web olvido agregar validación en el lado del servidor para proteger contra ataques SQLi (SQL Injection).

Las vulnerabilidades SQLi permiten a un usuario malicioso realizar lo siguiente en un servidor web.

  • Hacer consultas SQL a través de una sentencia select (con la cual por ejemplo pueden hacer un select de la tabla de usuarios y obtener todas las credenciales de ese sitio web).
  • Saltarse la autenticación o Bypass Authentication (lo vamos a ver mas abajo).
  • Ejecutar comandos de sistema en la base de datos para comprometer el Servidor Web.
  • Ejecutar comandos Insert/Delete para manipular los registros de la base de datos.

Authentication Bypass

Cuando un usuario se autentica en un sitio web generalmente se le solicita un usuario y una clave, cuando este la ingresa y presiona el botón «Sign in» o «Ingresar» lo que sucede en el servidor es que se ejecuta una sentencia select a la base de datos parecida a la siguiente.

select * from users where username = 'usuario' and password = 'clave'

Si el registro existe en la base de datos esta devuelve un valor booleano True y entonces el usuario es autenticado.

Lo que hace un atacante es aprovecharse de este proceso pasar a la base de datos una sentencia select que siempre devuelve un valor True como la siguiente.

select * from users where username = 'usuario' or 1=1 -- and password = ''

Aquí or 1=1 siempre devolverá un valor True y el símbolo le dice a la base de datos que ignore lo que sigue a continuación que en este caso es la clave de acceso.

Para ilustrar este proceso podemos usar un sitio vulnerable como Mutillidae y colocar la sentencia ‘ or 1=1 — en el campo del usuario y nada o cualquier cosa en el campo de la clave, tomar en cuenta que después de el simbolo — va un espacio como se muestra en la siguiente imagen.

Al presionar el botón LogIn veremos que autentica con el usuario admin sin ingresar ninguna clave.

En este caso se autentico con el usuario admin porque la sentencia ‘ or 1=1 — no especifica ningun usuario y lo que hace es tomar el primer usuario de la tabla de usuarios que en este caso es admin.

Si quieres usar un usuario en especifico la sentencia es usuario’ or 1=1 — como se muestra en la imagen siguiente sin olvidar agregar el espacio al final del símbolo —

Oscar Meza

Share
Published by
Oscar Meza

Recent Posts

Cambiar la hora en RedHat 7

Para cambiar la hora en RedHat 7 usamos los siguientes comandos en una pantalla de…

56 años ago

Errores comunes al elegir Hosting (y cómo evitarlos)

Elegir un hosting parece sencillo… hasta que el sitio es lento, se cae o no…

56 años ago

Hosting Barato vs Hosting Premium: ¿cuál conviene realmente?

Elegir un hosting no es solo cuestión de precio. Muchos proyectos empiezan con un Hosting…

56 años ago

Como convertir videos mkv a mp4 en GNU Linux

Para convertir videos de mkv a mp4 en GNU Linux es súper fácil, puedes utilizar…

56 años ago

Permitir conexiones a ssh de ciertas IPs con iptables

Esta es una forma para permitir las conexiones a nuestro servidor ssh solo cuando vienen…

56 años ago

Como salvar las reglas creadas en IPTables en Ubuntu

La forma mas sencilla de salvar todas las reglas que has configurado en IPTables fue…

56 años ago