¡Esta es una revisión vieja del documento!
¿Qué es una inyección SQL?
La inyección SQL (también conocida como SQL fishing) es una técnica que se usa a menudo para atacar aplicaciones impulsadas por datos.
Esto se hace incluyendo porciones de declaraciones SQL en un campo de entrada en un intento de hacer que el sitio web pase un nuevo comando SQL falso a la base de datos (por ejemplo, volcar los contenidos de la base de datos al atacante). La inyección SQL es una técnica de inyección de código que explota una vulnerabilidad de seguridad en el software de una aplicación.
La vulnerabilidad ocurre cuando la entrada del usuario se filtra incorrectamente para los caracteres de escape literales de cadena incrustados en las declaraciones SQL o la entrada del usuario no se escribe con fuerza y se ejecuta inesperadamente. La inyección SQL se conoce principalmente como un vector de ataque para sitios web, pero se puede usar para atacar cualquier tipo de base de datos SQL.
Requisitos para hacer la práctica Tener instalado Fedora 14 Tener instaldo BackTrack R1: Lección 1: Instalación de BackTrack 5 R1 Tener instalado Firebug
En esta práctica haremos lo siguiente:
Hacemos un ifconfig de las dos máquinas para saber la ip, luego en el Backtrack instalamos Firebug por si no está instaldo
Abrimos el navegador y vamos a http://getfirebug.com/releases/firebug/1.7/firebug-1.7.3.xpi e instalamos
clic en restar now
Desde el Bt vamos a http://ip-fedora/mutillidae y pulsamos la opcion de login/register
Test de la comilla simple (')
En el campo de texto “name” escribimos (') y pulsamos login
Analizamos que ha pasado
Una comilla simple (') es un carácter SQL reservado que rompe la consulta siguiente colocándola en el cuadro de texto Nombre. El mero hecho de que la consulta produzca un error significa que existe una gran posibilidad de que sea susceptible a una Inyección de SQL.
Que sentencia ha entendido el ordenador?
SELECT * FROM accounts WHERE username = ''' AND password =' '
A continuación se muestra un ejemplo de una consulta normal
SELECT * FROM accounts WHERE username = 'admin' AND password = 'adminpass'
Ahora reemplazamos ' or 1=1– (hay que poner espacio detrás de los los –)
¿Qué hemos hecho?
Buscamos un nombre de usuario que sea igual a nada O donde 1 sea igual a 1. Entonces, creamos una condición que siempre es verdadera (O 1 = 1). La cadena “-” es un comentario en SQL.
Usamos este truco para comentar el resto de la consulta SQL (AND password = ), que elimina esa autenticación de contraseña.
<code sql>
SELECT * FROM accounts WHERE username =
o 1 = 1– 'AND password =' '
</code>
Verificando resultados
Ha iniciado sesión como administrador. Debido al diseño del código de Mutillidae, iniciamos sesión como administrador porque admin es el primer usuario en la tabla de cuentas.
En DVWA, como una cadena similar (% 'o' 0 '=' 0 '-) muestra toda la lista aplicaciones que puede realizar el usuario
Click en logout
Ahora toca el campo password, hacemos la prueba de la comilla simple en el campo Password pulsamos en Login/register, ponemos Name: samurai y pen password pulsamos botón derecho e inspeccionar elemento
Analizamos los resultados de la comilla simple (')
Una comilla simple (') es un carácter SQL reservado que rompe la consulta siguiente al colocarla en el cuadro de texto Contraseña. El mero hecho de que la consulta produzca un error significa que existe una gran posibilidad de que podamos realizar una Inyección de SQL.
SELECT * FROM accounts WHERE username='samurai' AND password='''
a continuación muestro un ejemplo normal
SELECT * FROM accounts WHERE username='samurai' AND password='samurai'
obteniendo el acceso poniendo comilla simple en el campo contraseña
Inspeccionamos el campo de texto contraseña
Hacemos Click en Login/Register Ponemos en el campo Name: samurai En Password:pulsamos boton derecho del raton y pulsamos en “Inspect Element”
y reemplazamos la palabra password por la palabra text
Aplicamos el test que siempre es verdad (' or 1=1 – )
En name escribimos samurai en password escribimos ' or 1=1– (recuerda que tenemos que poner un espacio en blanco despues de los guiones) y pulsamos Login
Bueno, lo que veo son buenas noticias. Por un lado, estoy contento de haber iniciado sesión, pero debo iniciar sesión como samurai en lugar de administrador.
Hemos iniciado sesión como administrador, porque admin es el primer usuario en la tabla accounts