Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ejercicios de web hacking alojados en una máquina virtual. En concreto se intentará completar
el conjunto de ejercicios de Damn Vulnerable Web Apps (DVWA) que podremos encontrar en
http://192.168.1.146/dvwa
Estos ejercicios pretenden ser una guía práctica de posibles vulnerabilidades a encontrar en el
mundo real, la aplicación web tiene un área de configuración en la que podremos establecer el
nivel de seguridad. Para llevar a cabo la mayor parte de estos ejercicios se establecerá el nivel
de seguridad en “medio” o nivel 2 de 3. En aquellos casos en los que el nivel de seguridad se
haya bajado a “Low” se indicará pertinentemente.
SQL Injection
Los ataques de Inyección SQL pretenden explotar fallos en la restricción de las consultas
albergadas en un formulario, de manera que podremos introducir nuestros comandos SQL.
Podremos visualizar y volcar toda la información de la base de datos.
Es una técnica para lanzar comandos SQL y que estos se ejecuten en el servidor.
Inyección básica.
La respuesta devolverá el first_name y el last_name del usuario con ID = $id en la tabla USERS.
Si introducimos un ID que no sea un número o que no se corresponda con ningún usuario,
entonces, tendremos una consulta falsa.
En este punto empezaremos a mostrar datos, para ello estableceremos un escenario siempre
cierto (always true) de manera que mostremos todos los resultados, tanto los falsos como los
ciertos. Introducimos la consulta: sql’ or ‘0’=’0
Así nuestra consulta SQL toma la forma: SELECT user_id=’ sql’ or ‘0’=’0 y obtenemos el listado
de todos los usuarios registrados en la base de datos. Un total de 5 usuarios.
Una vez comprobamos que tenemos un criterio que siempre es cierto, es el momento de
ejecutar comandos en el servidor SQL.
De esta consulta deberemos quedarnos con la última línea, donde aparece nuestra versión de
servidor, un 5.5.41-0Ubuntu0.14.04.1
%' and 1=0 union select null, table_name from information_schema.tables where table_name
like 'user%'#
Así mostramos todos los campos para cada usuario dentro de la tabla USERS
La información que vamos a encontrar son las contraseñas para cada usuario,
En este punto, deberemos acudir a herramientas capaces de codificar en HASH RAW-MD5 para
descubrir la cadena de caracteres que constituye la contraseña para cada usuario. Esta vez
usaremos Hash Suite Free, que aunque nos limita a contraseñas de un máximo de 6 caracteres,
para realizar la prueba con los 5 usuarios encontrados nos valdrá y además, es compatible con
Windows. Existen multitud de herramientas para este propósito y en general, es muy
recomendable el uso de HashCat, pero en esta ocasión quiero probar otras herramientas.
admin
21232f297a57a5a743894a0e4a801fc3
gordonb
e99a18c428cb38d5f260853678922e03
1337
8d3533d75ae2c3966d7e0d4fcc69216b
pablo
0d107d09f5bbe40cade3de5c71e9e9b7
smithy
5f4dcc3b5aa765d61d8327deb882cf99
También existen webs en las que podemos buscar nuestra cadena MD5 y se comprueba frente
a una base de datos masiva en la que hay almacenados multitud de palabras previamente
codificadas.
Admin:admin
Gordonb:abc123
1337:charley
Pablo:letmein
Smithy:password
SQL Injection (Blind)
La principal diferencia en las inyecciones Blind SQL es que ahora la aplicación web no devuelve
resultados en caso de error, esto hace ligeramente más complicado intuir el funcionamiento
de las consultas SQL y por tanto, de la forma en que debemos construir nuestro código para
vulnerar la base de datos.
No obstante, probando las anteriores inyecciones (las utilizadas en el apartado SQL Injection)
vemos que, a mismo nivel de seguridad, misma vulnerabilidad en la base de datos. Así que
repitiendo los comandos anteriores obtendríamos los mismos resultados. Por eso haremos
hincapié en el nivel de seguridad siguiente, Medium.
Pero no devuelve nada. Así que observaremos el código de la web (ya que dvwa nos permite
hacerlo).
Así que vemos que el parámetro $id se pasa recoge mediante GET y se pasa a la función
mysql_real_escape_string() la cual antepone barras invertidas a los siguientes caracteres: \x00,
\n, \r, \, ', " y \x1a.
Probaremos entonces a realizar la misma consulta pero sin el carácter especial comilla-simple ‘
Y nos devuelve todas las filas de la tabla. Del mismo modo, podremos ir ejecutando el ataque
en las mismas fases que en el apartado anterior. En esta ocasión voy a probar un sistema que
hace referencia al nombre de la tabla en hexadecimal expuesto en un trabajo final de master
en la Universidad de Almería (Waysen Restoin, Javier y Pérez Sánchez, Francisco Javier). Según
este trabajo se puede extraer toda la información de la tabla users haciendo referencia a su
nombre en hexadecimal: 0x7573657273.