XSS tramite REQUEST_URI

2

C'è qualche situazione in cui un attacco XSS può essere eseguito tramite la variabile $_SERVER['REQUEST_URI'] di PHP? Per chi non lo conosce: contiene l'URL completo utilizzato per accedere a quel sito Web, senza il nome di dominio e con alcuni caratteri speciali codificati .

Ad esempio, prendi questo pezzo di codice. Abbiamo già < e non stiamo nemmeno utilizzando " :

echo '<form action=' . $_SERVER['REQUEST_URI'] . ' method="post"></form>';

Se visito localhost/myscript.php?foo onhover=alert(1) il risultato è:

<form action=/myscript.php?foo%20onhover=alert(1) method="post">
  • C'è un modo per iniettare uno spazio? Ho provato + e caratteri simili, ma non ha funzionato.
  • Se c'è un modo, sarebbe anche possibile se le virgolette fossero usate attorno all'azione?
  • Se non è possibile, puoi pensare a uno scenario in cui $_SERVER['REQUEST_URI'] potrebbe essere utilizzato per eseguire un attacco XSS? O qualsiasi altro attacco per questo?

// edit: per riassumere le risposte (nel caso qualcuno non legga tutti i commenti): con i browser correnti, non sembra che sia possibile un attacco tramite REQUEST_URI . Ma non bisogna fare affidamento sul browser per disinfettare l'input dell'utente, quindi REQUEST_URI dovrebbe essere ancora disinfettato dal lato server.

    
posta tim 21.03.2015 - 12:26
fonte

2 risposte

3

PHP non codifica i caratteri quando si imposta $_SERVER['REQUEST_URI'] . Qualsiasi codifica URL che puoi vedere viene eseguita lato client (ad esempio nel tuo browser).

Quindi tutto ciò che devi fare è usare un client HTTP diverso che invia l'URL raw senza codifica precedente. Ad esempio, cURL farà questo. Sebbene gli spazi letterali non siano consentiti all'interno di un URL, è perfettamente possibile iniettare parentesi angolari, terminare il tag <form> corrente e creare un nuovo elemento script .

    
risposta data 21.03.2015 - 17:54
fonte
0

Potresti usare un po 'di PHP per reinserire lo spazio dal codificatore URL. Qualche cosa come ...

$action = implode(' ', explode('%20', $_SERVER['REQUEST_URI'])); echo '<form action=' . $action . ' method="post"></form>';

    
risposta data 22.03.2015 - 01:52
fonte

Leggi altre domande sui tag