Come forgiare l'intestazione del referer nel metodo GET attivato su HTML

4

Sto osservando le vulnerabilità CSRF di DVWA. Eseguo il livello medio che utilizza questo pezzo di codice per convalidare se l'intestazione referer è uguale al nome del server:

if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] ) ) .

In tal caso, la mia query verrà accettata e attivata in un database che modifica le informazioni di accesso. Lo faccio attraverso una pagina web malevola.

Finora sono stato in grado di vedere quale nome del referer è su un'intestazione di risposta dal server. Dalla mia comprensione, quella funzione php sta chiedendo il seguente:

Il valore di $ _SERVER ['SERVER_NAME'] è presente in $ _SERVER ['HTTP_REFERER']?

Quindi, il mio primo pensiero fu, cercando di manipolare la stringa dell'URL della richiesta e incorporare l'intestazione del referer su di essa. (nessun risultato) Suppongo che la istruzione if stia cercando un modello. Il fatto è che non so come passare e quietamente onestamente non capisco se la mia richiesta GET è presente in $_SERVER[ 'SERVER_NAME' ] o in $_SERVER[ 'HTTP_REFERER' ] . Dalle mie indagini ritengo che l'intestazione del referer non possa essere modificata in un semplice tag html img. Quindi la mia ultima domanda sarebbe: Sono in grado di forgiare la stringa del tag img (richiesta HTTP GET) in modo che l'istruzione valga per vero? In caso contrario, come posso farlo in uno scenario in cui una vittima utilizza sempre inconsapevolmente questa pagina Web dannosa?

    
posta fish202 04.11.2017 - 18:40
fonte

1 risposta

4

È davvero semplice!

Suggerimento:

The check verifies if the requesting URL contains the string localhost, but not if it starts with it. So how do you get the string localhost in the referrer (at any place)?

Soluzione:

You need to send the request from a page that contains the target hostname in its URL.

So if your DVWA instance is hosted on localhost, you need to embed that string in the URL. Just send the CSRF request from http://evilhost/?localhost. This will produce a referrer header like this:

Referer: http://evilhost/?localhost

That's enough to pass the check.

    
risposta data 04.11.2017 - 23:19
fonte

Leggi altre domande sui tag