Hai bisogno di una spiegazione sull'inclusione dei file locali?

1

Pochi giorni fa un amico ha corretto un lfi sul suo sito, e mi ha mandato l'url usato, era l'url di base 64 codificato ma non usuale ../../../etc/passwd,

È: Li4vLi4vZXRjL3Bhc3N3ZAAucG5n

Ora decodificato su base64decode.org ottengo questo:

../../etc/passwd�.png

Che cos'è quel punto interrogativo, pensavo fosse null byte, ma sembra essere una cosa unicode. Non riesco a capirlo. Qualcuno mi può spiegare che cosa significa, non riesco a ottenere la stessa stringa base64 quando la codifico nuovamente. Grazie

    
posta Daniel Max 09.08.2014 - 01:10
fonte

2 risposte

2

È un carattere null . Ho usato questo decoder per salvarlo in un file binario che ho poi aperto con Notepad++ per verificare. Qualunque cosa stia facendo lì, ecco che your è come il tuo browser (come dici nel commento che stai usando Firefox) ha deciso di rappresentarlo in output.

Non è dannoso in quanto non fa nulla, tranne che impedisce ad alcuni decoder Base64 di seguire correttamente un link fornito (potrebbe essere un semplice trucco di confusione per confondere i crawler / spider automatizzati e allo stesso modo, mentre tu come un umano non dovresti avere problemi nella rimozione di caratteri in eccesso, se appaiono - cioè Chrome e IE non lo visualizzano, e Opera lo visualizza come □). Come probabilmente avrai notato, aggiunge anche un altro byte alla stringa da codificare, quindi la rappresentazione codificata Base64 non viene fornita con il solito = padding di 4 byte tipico per le stringhe con codifica Base64 ( ../../../etc/passwd.png verrebbe codificato in Li4vLi4vLi4vZXRjL3Bhc3N3ZC5wbmc= ) che aiuterebbe inoltre a identificare lo schema di codifica utilizzato.

A mio avviso, ti è stato assegnato un URL codificato per impedire che il malware possa decodificarlo (come una forma piuttosto semplice di un test di Turing ), o il tuo amico ha semplicemente usato uno strumento di codifica Base64 fornito con questa capacità e abilitato senza particolari intenzioni (o forse l'output sembra migliore in questo modo, senza il padding a 4 byte). In entrambi i casi, dovrai chiedere al tuo amico, se vuoi arrivare a fondo. Esistono potenziali usi per tale offuscamento, ma non posso garantire che il tuo amico abbia avuto esattamente questo in mente quando lo usa.

    
risposta data 09.08.2014 - 02:05
fonte
3

È un carattere null byte .

Viene utilizzato se il codice aggiunge sempre un'estensione al file incluso. Ad esempio, se il codice è

<?php
include($_GET['lang'].".php");
?>

Tuttavia, l'utente malintenzionato desidera leggere ../../etc/passwd utilizzando l'LFI. Se si utilizza il carattere null byte, è possibile aggiungerlo all'URL della richiesta come %00 :

www.example.com/index.php?lang=../../etc/passwd%00

Questo farà arrestare il processore PHP al byte null e includere il file ../../etc/passwd piuttosto che il percorso ../../etc/passwd.php che non funzionerà a causa dell'estensione. Quindi, in sintesi, dà all'attaccante un modo per troncare il percorso in un dato punto e rimuovere qualsiasi estensione indesiderata.

Riguardo la codifica base64 - questo potrebbe essere quello di impedire che il byte null venga "perso" durante il transito. Se si utilizza un meccanismo per trasferire l'URL altrove, il software utilizzato potrebbe terminare la stringa al byte null e questo verrebbe rimosso dall'URL. Un esempio è se si incolla un URL in Firefox, spesso la stringa viene terminata sul byte null e la richiesta di pagina quando eseguita non include il carattere null byte.

    
risposta data 09.08.2014 - 15:26
fonte

Leggi altre domande sui tag