Iniezione SQL

Iniezione SQL

Una virgoletta in un campo di ricerca riscrive la query.

Cos’è Iniezione SQL?

Una stringa fornita dall'utente viene concatenata in una query e tale stringa può modificare ciò che la query richiede. Ogni richiesta qui viene eseguita su un vero database incorporato, quindi nulla è falso. Spezzerai un modulo di ricerca dell'account con una virgoletta singola, restituirai l'intera tabella dei membri con ' OR '1'='1 , quindi utilizzerai UNION SELECT e information_schema per estrarre da esso le email dell'amministratore e gli hash delle password. La correzione associa il valore come parametro in modo che la grammatica SQL non analizzi mai l'input come codice. Non la sanificazione, non una blocklist del firewall.

Cosa imparerai in Iniezione SQL

Iniezione SQL — Fasi della formazione

  1. Trova il modulo di destinazione

    Bob ha nel mirino Vantyr , un servizio di abbonamento con una pagina pubblica di ricerca dell'account . Nessun accesso, solo un campo e-mail che restituisce il piano di un membro. È qui che iniziano gli attacchi web: una forma ordinaria che comunica silenziosamente con un database.

  2. Invia una ricerca normale

    Per prima cosa, guarda come si comporta normalmente il modulo. Inserisci l'e-mail di un membro reale e invia. Il pannello Network del browser si apre e registra la richiesta, esattamente ciò che uno sviluppatore vede in DevTools.

  3. Ispeziona la richiesta

    C'è la richiesta. L'e-mail digitata viene inviata al server nella richiesta payload e la risposta restituisce l'unico membro corrispondente. Niente di sbagliato ancora. Ecco come dovrebbe funzionare la funzionalità.

  4. Leggi il codice del gestore

    Ora la parte interessante: il codice del server che gestisce questa richiesta. Costruisce la query SQL incollando la tua email direttamente nella stringa di query . Quella sola affermazione è l’intero problema.

  5. Individua la linea vulnerabile

    Quell'unica affermazione è l'intera vulnerabilità: il tuo input è incollato nella stringa SQL e il commento mostra l'esatta query inviata al database, ricostruita in tempo reale da qualunque cosa tu digiti.

  6. Interrompilo con una citazione

    Il campo contiene ancora morgan.lee@example.com dalla tua prima ricerca. Il tuo input arriva all'interno di una stringa tra virgolette, quindi cosa succede quando invii una citazione? Aggiungi una virgoletta singola alla fine e invia, quindi osserva il commento della query eseguita nel codice ricostruito durante la digitazione: la tua citazione inserisce all'interno della stringa e la interrompe. Non stai più inviando dati. Stai modificando la query.

  7. Leggere l'errore del database

    Il server ha restituito un 500 con un errore reale del database. Quella virgoletta aggiuntiva terminava anticipatamente la stringa e lasciava la query in formato non corretto. Il database ha provato a eseguirlo e si è bloccato. Un errore come questo è il via libera di un utente malintenzionato: l'input raggiunge il motore SQL.

  8. Bypassare il filtro

    Ora fai in modo che la query faccia qualcosa di utile per te. Chiudi tu stesso la stringa, aggiungi una condizione che sia sempre vera e il filtro WHERE interrompe il filtraggio. Il classico: ' OR '1'='1 .

  9. Guarda il dump completo

    Il filtro è sparito. Invece di un membro, la risposta è la tabella dei membri interi : ogni email e piano di Vantyr. Hai chiesto un account e il database li ha consegnati tutti.

  10. Verifica della conoscenza

    Hai appena visto un payload restituire l'intera tabella. Blocca il perché.

Copertura dei framework di sicurezza

OWASP Top 10

  • A05:2025 Injection
  • A03:2021 Injection

CWE

  • CWE-89 Improper Neutralization of Special Elements used in an SQL Command

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security