H1RD SECURITY

Ataque XSS en los formularios de solo validación cliente

La validación cliente en las paginas webs, es totalmente recomendable tanto para el servidor como para el usuario pero el problema llega cuando solo se valida al cliente y no se valida en el servidor, y con fiddler se puede pasar esa validación facilmente pudiendo dejar codigo xss persistido en la base de datos de la pagina web.

Según la Open Web Application Security Project (Owasp), es desde ya casi diez años, la vulnerabilidad numero tres, de su top diez.

Para practicar

Te recomiendo que uses esta pagina web: hackyourselffirst.troyhunt.com. Es una pagina vulnerable hecho a posta para poder probar todas las vulnerabilidades web de Owasp, esta creada por el hacker etico Troy Hunt. Tiene varios cursos de hacking en Pluralsight te recomiendo que te subscribas a Pluralsight y los hagas.

Validaciones en cliente

Las validaciones de formularios en cliente mediante javascript es algo muy bueno, para empezar el codigo se valida en el browser del usuario si hay algun dato que falte o incorrecto, le sale una advertencia y le obliga a rectificar, con esto se consiguen menos llamadas al servidor y que la aplicación vaya más fluida.

Ejemplos de validaciones cliente en formularios:

1
2
3
4
5
   <div class="control-group">
      <label class="control-label" for="LastName">Last name</label>
      <div class="controls">
        <input data-val="true" data-val-length="The field Last name must be a string with a maximum length of 100." data-val-length-max="100" data-val-regex="Invalid Last name" data-val-regex-pattern="^([a-zA-Z]+)$" data-val-required="The Last name field is required." id="LastName" name="LastName" type="text" value="" />
      </div>

En el codigo html anterior, de una pagina hecha en ASP.NET, tenemos tres validaciones:

  • el apellido tiene que ser menor de 100 caracteres
  • el apellido no puede estar vacio
  • el apellido solo puede estar compuesto de letras mayusculas o minusculas.

Empezando la demostración

Para esta demostración necesitamos usar Fiddler nos ayudara en la creación de los mensajes al servidor. La idea del ataque es probar si un formulario de registro de usuarios tiene es vulnerable a xss. Asi que encendemos Fiddler y empezamos a crear un usuario normal, en el apellido intentamos añadir nuestro payload pero al tener la validacion en cliente que solo permite letras, no nos deja, asi que acabamos de registrar un usuario normal y sin problemas.

El formulario basico donde nos saltaremos las validaciones en cliente
El formulario basico donde nos saltaremos las validaciones en cliente

Con Fiddler hemos capturado la peticion que hicimos al servidor al crear el usuario, asi que con el composer de Fiddler la editaremos y cambiaremos nuestro apellido por esto:

1
%3Cscript%3Ealert(%22hello%22)%3C%2Fscript%3E

que es simplemente un alert basico de javascript que dice hello, pero codificado para que las Urls lo acepten. Una recomendacion, acuerdate de cambiar tanto el nombre del usuario como el password para que al registrar un nuevo usuario no te de problemas.

1
<script>alert("hello")</script>
Montando el ataque en XSS con ayuda de Fiddler
Montando el ataque en XSS con ayuda de Fiddler

Ya con el nuevo usuario, seria tan facil como logarnos como el, e ir a la pagina de votos de coche, y votar por un coche, cada vez que un usuario entre le saltara un popup.

Ataque XSS ejecutado y funcionando
Ataque XSS ejecutado y funcionando

Puede que un pop-up con hello, sea poco peligroso, pero se puede añadir codigo javascript que robe las sessiones de los usuarios, puedes añadir redirecciones que vayan a paginas maliciosas, o incluso, en un listado de paises añadir, un pais que no esta, esto podria hacer que la aplicación se rompiera ya que nunca encontrarian ese pais en el listado…