tags: Encoding_SQL_Query sql_injection SQL_Cifrati


Tipi di Encoding Comuni:

  • URL Encoding:

    • I caratteri speciali vengono sostituiti con la loro rappresentazione in formato percentuale (% seguito da due cifre esadecimali).

    • Esempi:

      • ' diventa %27

      • " diventa %22

      • # diventa %23

      • -- diventa %2D%2D

    • Esempio di payload:

      %27 OR 1=1 —

  • Unicode Encoding:

    • I caratteri vengono rappresentati in formato Unicode (ad esempio, ' può essere rappresentato come \u0027).

    • Esempio di payload:

      \u0027 OR 1=1 —

  • Base64 Encoding:

    • L’intera query SQL può essere codificata in Base64 e poi decodificata lato server.

    • Esempio:

      • La stringa ' OR 1=1 -- codificata in Base64 diventa JyBPUiAxPTEgLS0=.

      • Se il server decodifica l’input, potrebbe eseguire la query.

  • Hex Encoding:

    • I caratteri vengono rappresentati in formato esadecimale.

    • Esempio:

      • ' OR 1=1 -- in esadecimale diventa 0x27204f5220313d31202d2d20.

Come Funziona:

  • L’attaccante inserisce il payload codificato nel campo di input.

  • Se il server non sanitizza correttamente l’input codificato, il database potrebbe interpretare il payload come una query SQL valida.

Esempi Pratici di Bypass con Encoding e Commenti

Ecco alcuni esempi di come queste tecniche possono essere combinate per bypassare i filtri di sanitizzazione:

Esempio 1: Bypass con URL Encoding e Commenti

  • Supponiamo che il server blocchi gli apici singoli (') e i commenti (--).

  • L’attaccante può usare URL Encoding per rappresentare questi caratteri:

    %27 OR 1=1 %2D%2D

    Questo payload equivale a:

    ’ OR 1=1 —

Esempio 2: Bypass con Unicode Encoding e Commenti

  • Se il server blocca i caratteri speciali, l’attaccante può usare Unicode Encoding:

    \u0027 OR 1=1 \u002D\u002D

    Questo payload equivale a:

    ’ OR 1=1 —

Esempio 3: Bypass con Commenti e Funzioni SQL

  • Se il server blocca gli spazi, l’attaccante può usare commenti per separare le parole:

    ‘//OR//1=1/**/—

    Questo payload equivale a:

    ’ OR 1=1 —