Come bypassare la posizione di risposta per ottenere contenuti XSS?

1

In alcuni passaggi di base:

  1. Richiesta POST contenente una foto con multipart / form-data.
  2. HTTP / 1.1 302 Trovati rispondono con il reindirizzamento al formulare
  3. 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?

    
posta Lucian Nitescu 08.05.2018 - 15:28
fonte

1 risposta

1

Se l'XSS si verifica solo se il client invia il payload, questo non è realmente fattibile a meno che tu non possa indurlo a farlo.

La RFC dice che i client possono reindirizzare automaticamente dopo aver ricevuto un HTTP 302 con l'intestazione Location . Mentre è richiesto un corpo, può essere effettivamente ignorato dal cliente in base alle specifiche.

Pertanto, non penso che tu possa "bypassare l'intestazione Location", almeno quando il browser segue immediatamente l'intestazione Location e non esegue il rendering della pagina, il che sembra essere il comportamento prevalente.

Potrebbe essere possibile, se il client ha qualche influenza sulle intestazioni restituite dal server, eseguire una divisione della risposta HTTP attacco , in cui l'intestazione della posizione potrebbe essere modificata o esclusa completamente. Di nuovo, questo probabilmente richiederebbe alla vittima di presentare la richiesta predisposta, rendendo questa una strada improbabile.

    
risposta data 08.05.2018 - 17:02
fonte

Leggi altre domande sui tag