L'attraversamento della directory funziona solo con il carattere "% 00" con codifica URL alla fine

3

Ho trovato un sito, usando acunetix, con una forma POST che è possibile vedere file di testo, fondamentalmente è una vulnerabilità di attraversamento di directory, ma la cosa curiosa è che funziona solo quando aggiungo un "% 00" nel fine della stringa di query, qualcosa del genere:

name=../../../../../../../../windows/PFRO.log%00

Che cos'è? E perché succede e funziona solo in questo modo?

    
posta NBA YoungCode 10.05.2017 - 03:21
fonte

1 risposta

4

%00 è la versione con codifica URL di un carattere null byte. In alcune applicazioni è possibile iniettare un byte null per terminare prematuramente una stringa. Un utente malintenzionato può trarne vantaggio per tagliare la fine di una stringa che non è possibile controllare.

Ecco lo pseudocodice per come può apparire il codice interessato:

print(readfile("./" + $name + ".txt"))

In questo esempio, qualsiasi valore fornito dall'utente per $name verrebbe automaticamente aggiunto con un'estensione .txt , impedendoti di scegliere nomi di file arbitrari. Per poter continuare a fornire il tuo percorso, puoi utilizzare il 0x00 byte per terminare la stringa immediatamente dopo il payload.

Quindi, questi percorsi sarebbero trattati allo stesso modo dal sistema interessato:

./../../../../../../../../windows/PFRO.log
./../../../../../../../../windows/PFRO.log%00.txt

I difetti di iniezione di byte nulli sono comuni perché molti linguaggi di livello superiore sono basati su C, dove viene utilizzato un byte null per indicare la fine di una stringa. Ad esempio, ecco un esempio di uno script PHP vulnerabile, preso dai documenti PHP :

<?php
$file = $_GET['file']; // "../../etc/passwd
print(readfile("./" + $name + ".txt"))
" if (file_exists('/home/wwwrun/'.$file.'.php')) { // file_exists will return true as the file /home/wwwrun/../../etc/passwd exists include '/home/wwwrun/'.$file.'.php'; // the file /etc/passwd will be included } ?>

Vedi anche: Embedding Null Code su OWASP.

    
risposta data 10.05.2017 - 03:28
fonte

Leggi altre domande sui tag