Come codificare le lettere in multipart / form-data per includere caratteri CR / LF?

0

Parte della richiesta HTTP che deve essere inviata al server con Content-Type: multipart/form-data; assomiglia a:

------WebKitFormBoundaryQ7KGYev31biaJTW8
Content-Disposition: form-data; name="subject"

attacker_controlled

Quindi questo valore è incluso nell'intestazione di risposta a un'altra richiesta:

Content-Disposition:attachment; filename="attacker_controlled.html"

Vorrei fare l'iniezione dell'intestazione HTTP qui. Come codificare i caratteri CR / LF in mulupart/formdata in modo che appaiano come CR / LF sul lato server? Come fare qui l'iniezione dell'header HTTP se non è possibile?

Modifica: ho provato a modificare questa richiesta per @ consiglio di AndrewSmith ma non ha funzionato :

------WebKitFormBoundaryQ7KGYev31biaJTW8
Content-Disposition: form-data; name="subject"
Content-Transfer-Encoding: base64

YXR0YWNrZXJfY29udHJvbGxlZA==

Nell'HT risultante al posto di attacker_controlled c'è YXR0YWNrZXJfY29udHJvbGxlZA== (cioè il server web non riconosce la codifica del trasferimento del contenuto)

Quindi c'è modo di codificare i caratteri CR / LF?

    
posta Andrei Botalov 09.07.2012 - 19:42
fonte

2 risposte

3

In che modo le newline sono un problema quando è definito un limite? La cosa con questo tipo di pacchetto HTTP è che è binario sicuro, il che significa che l'intero intervallo ASCII 0..255 può essere usato senza problemi; inclusi newline e ritorni a capo. Finché non viene rilevato il limite specificato, il server o il browser vedranno semplicemente i caratteri come parte dei dati e non come separatori.

Solo se un utente malintenzionato può controllare il nome nell'intestazione content-disposition, è necessario rimuovere i newline lì. O se riesce a indovinare il confine da utilizzare, dovresti assicurarti che il limite sia dinamico o semplicemente spogliato.

    
risposta data 15.07.2012 - 19:56
fonte
-1

È una codifica a 7 bit, credo: link

Per favore correggimi se sbaglio.

Può anche essere supportato da qualsiasi server: 8 bit, ecc., basta inserire un'intestazione e vedere da sé come funziona, e vedere anche Content-Transfer-Encoding che si specifica.

    
risposta data 09.07.2012 - 20:19
fonte

Leggi altre domande sui tag