107 Shares 4750 views

Qual è l'iniezione di SQL?

Il numero di siti e pagine sul web è in costante crescita. Preso per lo sviluppo di tutti coloro che possono. E gli sviluppatori Web alle prime armi spesso utilizzano codice unsafe e vecchi. E si crea un sacco di scappatoie per i criminali e hacker. Di quanto non siano. Uno dei più classici vulnerabilità – SQL-injection.

Un po 'di teoria

Molte persone sanno che la maggior parte dei siti e servizi sulla rete utilizzano l'archiviazione di database SQL. Si tratta di un linguaggio di interrogazione strutturato che permette di controllare e gestire la memorizzazione dei dati. Ci sono molte versioni differenti del database di sistema di gestione di database – Oracle, MySQL, Postgre. A prescindere dal nome e il tipo, usano gli stessi dati della query. E 'qui che si trova il potenziale vulnerabilità. Se lo sviluppatore non è riuscito a gestire correttamente e in modo sicuro richiedere, un utente malintenzionato può sfruttare questa e utilizzare tattiche speciali per ottenere l'accesso al database, e poi – ed a tutta la gestione del sito.

Per evitare tali situazioni, è necessario ottimizzare correttamente il codice e per seguire da vicino in un modo in cui viene elaborato una richiesta.

Verificare la presenza di SQL-injection

Per stabilire la presenza di una vulnerabilità della rete ha un peso di sistemi software automatizzati finiti. Ma è possibile effettuare un controllo semplice manualmente. Per fare questo, andare in uno dei siti di prova e nella barra degli indirizzi per cercare di provocare un errore di database. Ad esempio, uno script sul sito non è in grado di gestire la richiesta e non li trim.

Per esempio, ci nekiy_sayt / index.php? Id = 25

Il modo più semplice – per mettere 25 dopo il preventivo e inviare la richiesta. Se nessun errore si è verificato, sia sul sito e filtrano tutte le richieste vengono gestite in modo corretto, o è disattivato nelle impostazioni di loro produzione. Se una pagina viene ricaricato con i problemi, quindi la vulnerabilità a SQL-iniezione è.

Dopo aver scoperto, si può provare a sbarazzarsi di esso.

Per implementare questa vulnerabilità necessità di conoscere un po 'di query SQL-squadre. Uno di loro – UNION. Esso riunisce diversi risultati delle query in una sola. Così possiamo calcolare il numero di campi nella tabella. ESEMPIO prima interrogazione è:

  • nekiy_sayt / index.php? id = 25 UNION SELECT 1.

Nella maggior parte dei casi, questo record dovrebbe generare un errore. Ciò significa che il numero di campi non è uguale a 1. Pertanto, scegliendo le opzioni di 1 o superiore, è possibile stabilire il numero esatto:

  • nekiy_sayt / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

Cioè, quando apparirà più l'errore, significa che il numero di campi da indovinare.

V'è anche una soluzione alternativa a questo problema. Ad esempio, quando un gran numero di campi – 30, 60 o 100. Questo comando GROUP BY. Esso raggruppa i risultati di una ricerca per qualsiasi motivo, per esempio id:

  • nekiy_sayt / index.php? id = 25 GROUP BY 5.

Se non è stato ricevuto l'errore, quindi i campi di più di 5. Così, sostituendo le opzioni da una gamma piuttosto ampia, è possibile calcolare quanti di loro in realtà.

Questo esempio SQL-injection – per i principianti che vogliono provare se stessi nel testing del suo sito. E 'importante ricordare che per l'accesso non autorizzato a un altro articolo a disposizione del codice penale.

I principali tipi di iniezione

Attuare vulnerabilità SQL-iniezione in diverse forme di realizzazione. Poi ci sono i metodi più diffusi:

  • UNION query SQL iniezione. Un semplice esempio di questo tipo è già stato esaminato sopra. È realizzato a causa di un errore nel controllo dati in entrata, che non vengono filtrati.

  • Errore a base di SQL injection. Come suggerisce il nome, questo tipo utilizza anche un errore, l'invio di espressioni composte sintatticamente corretto. C'è poi l'intercettazione delle intestazioni di risposta, analisi che possono essere effettuate dopo SQL-iniezione.

  • Stacked interroga lo SQL iniezione. Questa vulnerabilità è determinato eseguendo richieste successive. Si caratterizza per l'aggiunta alla fine del segno ";". Questo approccio è spesso implementata per accedere alla realizzazione di leggere e scrivere dati o del sistema operativo funzioni, se i privilegi consentono.

Software per la ricerca di SQL-vulnerabilità

È lì per SQL-injection, il programma di solito hanno due componenti – la scansione di un sito per possibili vulnerabilità e li usa per accedere ai dati. Ci sono alcuni strumenti per quasi tutte le piattaforme conosciute. La loro funzionalità facilita enormemente il controllo sito per rompere il vostro SQL-injection.

Sqlmap

Molto potente scanner che funziona con la maggior parte dei database. Supporta vari metodi di attuazione del SQL-injection. Ha la capacità di riconoscere automaticamente il tipo di password hash fessurazione e dizionario. upload di file presenti e funzionali e il download da un server.

Installazione su Linux viene eseguita utilizzando i comandi:

  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • –wizard ./sqlmap.py.

Per Windows è disponibile come opzione con la linea di comando e l'interfaccia utente grafica.

jSQL iniezione

jSQL iniezione – uno strumento cross-platform per testare l'uso di vulnerabilità SQL. Scritto in Java, in modo che il sistema deve essere installato JRE. In grado di gestire richieste GET, POST, intestazione, biscotto. Ha una comoda interfaccia grafica.

L'installazione di questo pacchetto software è la seguente:

wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] . {1,2} [0-9] {1,2} .jar '| head-n 1`

Lancio è quello di utilizzare il comando java -jar ./jsql-injection-v*.jar

Al fine di avviare il sito di test su SQL-vulnerabilità, è necessario inserire l'indirizzo nel campo superiore. Sono separato per GET e POST. Con un risultato positivo, verrà visualizzato l'elenco delle tabelle disponibili nella finestra di sinistra. È possibile visualizzare loro e imparare alcune informazioni riservate.

scheda «pagina di amministrazione» usato per trovare i pannelli amministrative. Su di essa per mezzo di modelli speciali ricerca automaticamente il sistema registra utenti privilegiati. Da loro si può ottenere solo un hash della password. Ma ha nella casella degli strumenti del programma.

Dopo aver trovato tutte le vulnerabilità e iniezione necessari accertamenti, lo strumento permetterà al server di riempire nel file o, al contrario, scaricare da lì.

SQLI Dumper V.7

Questo programma – facile da usare strumento per trovare e attuare le vulnerabilità SQL. Produce le Nazioni Unite si basa sulla cosiddetta Dorcas. Il loro elenco può essere trovato su Internet. Dorca per SQL-injection – questi sono i modelli speciali della query di ricerca. Con il loro aiuto, si possono trovare sito potenzialmente vulnerabili attraverso qualsiasi motore di ricerca.

Strumenti per la formazione

Itsecgames.com sul sito c'è uno speciale set di strumenti che permette l'esempio mostra come fare l'iniezione SQL e testarlo. Al fine di beneficiare, è necessario scaricare e installare. L'archivio contiene un insieme di file, che è la struttura del sito. Per installarlo avrà bisogno nel sistema esistente di set di server Apache web, MySQL e PHP.

Scompattare l'archivio in una cartella del server web, si deve andare all'indirizzo inserito durante l'installazione di questo software. Una pagina con la registrazione dell'utente. Qui è necessario inserire le informazioni e fare clic su «Crea». Spostare l'utente ad una nuova schermata, il sistema richiede di selezionare uno dei casi di test. Tra loro ci sono entrambi descritti per iniezione, e molti altri elementi di prova.

Vale la pena considerare un esempio di tipo SQL-injection GET / Ricerca. Qui è necessario selezionarlo e cliccare «Hack». Prima apparirà l'utente, e l'imitazione stringa di ricerca di un luogo di film. Per ordinare i filmati possono essere lunghi. Ma ci sono solo 10. Per esempio, si può provare a entrare nella Iron Man. Esso indicherà il film, poi il sito funziona, e le tabelle in esso contenuti. Ora dobbiamo controllare se i filtri caratteri speciali di script, in particolare preventivo. A tale scopo, aggiungere 'nella barra degli indirizzi. " Inoltre, questo deve essere fatto dopo il titolo del film. Il sito darà un errore Errore: Hai un errore nella sintassi SQL; controllare il manuale che corrisponde alla versione del server MySQL per la sintassi diritto di utilizzare in prossimità di '%' 'at line 1, in cui si afferma che i personaggi ancora non sono gestiti correttamente. Così si può provare a sostituire la vostra richiesta. Ma dobbiamo prima calcolare il numero di campi. E 'utilizzato per questo ordine da, che viene introdotto dopo le virgolette: http://testsites.com/sqli_1.php?title=Iron+Man 'ordine del 2 – & action = ricerca.

Questo comando visualizza soltanto informazioni sul film, che è, il numero dei campi è superiore a 2. Il doppio trattino indica al server che le altre richieste devono essere scartati. Ora dobbiamo risolvere, mettendo sempre più importanza fino a quando l'errore non viene stampato. Alla fine, si scopre che i campi saranno 7.

Ora è il momento di ottenere qualcosa di utile fuori dalla base. Sarà modificare leggermente la richiesta nella barra degli indirizzi, portandola a una forma: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, database (), l'utente (), 4, la password, 6, 7 da parte degli utenti – & action = ricerca. Come risultato della sua attuazione potrebbe visualizzare la stringa con gli hash delle password, che può essere facilmente convertito in simboli comprensibili utilizzando uno dei servizi online. Un evocato un po 'e raccolse un nome di campo con un login, è possibile accedere alla voce di qualcun altro, come ad esempio amministratore del sito.

Il prodotto ha una specie peso tipi di iniezione, in cui praticare. Va ricordato che l'applicazione di queste abilità nella rete su siti reale può essere un reato penale.

Iniezione e PHP

Come regola generale, il codice PHP ed è responsabile per le richieste di elaborazione necessarie provenienti da parte dell'utente. Pertanto, a questo livello è necessario costruire una difesa contro SQL-injection in PHP.

In primo luogo, diamo alcune semplici linee guida, sulla base del quale è necessario farlo.

  • I dati devono essere sempre trattati prima di essere immessi nel database. Questo può essere fatto sia usando espressioni esistenti, oppure attraverso l'organizzazione di query manualmente. Anche qui, dovrebbe tener conto del fatto che i valori numerici sono convertiti al tipo che è necessario;
  • Evitato spinto diverse strutture di controllo.

Ora un po 'le regole di compilazione di query in MySQL per la protezione contro SQL-injection.

Nella redazione eventuali espressioni di interrogare è importante separare i dati dalle parole chiave SQL.

  • SELECT * FROM tabella WHERE name = Zerg.

In questa configurazione, il sistema può pensare che Zerg – il nome di qualsiasi campo, quindi è necessario racchiuderlo tra virgolette.

  • SELECT * FROM tabella WHERE name = 'Zerg'.

Tuttavia, ci sono momenti in cui il valore in sé contiene citazioni.

  • SELECT * FROM tabella WHERE name = 'la Costa d'Avorio'.

Qui gestire solo una parte della Costa d, e il resto può essere percepito come una squadra, che, naturalmente, no. Pertanto, si verifica un errore. Allora avete bisogno di questo tipo di dati di screening. Per fare questo, utilizzare una barra inversa – .

  • SELECT * FROM tabella WHERE name = 'cat-d ' Avorio'.

Tutto quanto sopra si riferisce alle righe. Se l'azione si svolge con un numero, allora non ha bisogno di alcun virgolette o barre. Tuttavia, essi dovrebbero essere tenuti a portare forzatamente al tipo di dati desiderato.

Ci sono raccomandazioni che il nome del campo deve essere racchiuso tra apici. Questo simbolo si trova sul lato sinistro della tastiera, insieme a una tilde "~". Questo per garantire che MySQL potrebbe accuratamente distinguere il nome del campo da parola chiave.

lavoro dinamico con dati

Molto spesso, per ottenere i dati dal database utilizzando query, generato dinamicamente. Ad esempio:

  • SELECT * FROM tabella WHERE numero = '$ il numero'.

Qui, il numero $ variabile viene passata come determinare il valore del campo. Che cosa accadrà se si arriva 'Costa d'Avorio'? Errore.

Per evitare questo problema, naturalmente, è possibile includere le impostazioni "magic quotes". Ma ora i dati saranno proiettati, se necessario, e non necessario. Inoltre, se il codice è scritto a mano, si può spendere un po 'più di tempo per creare resistenti alla fessurazione del sistema stesso.

Per l'aggiunta di una barra indipendenti possono utilizzare mysql_real_escape_string.

$ Number = mysql_real_escape_string ($ numero);

$ Anno = mysql_real_escape_string ($ l'anno);

$ Query = "INSERT INTO table (numero, anno, classe) VALUES ( '$ numero', '$ l'anno', 11)".

Anche se il codice e un aumento di volume, ma potenzialmente avrebbe funzionato molto più sicuro.

segnaposto

I segnaposto – una sorta di marcatori per il quale il sistema riconosce che questo è il posto è necessario sostituire una funzione speciale. Ad esempio:

$ Sate = $ mysqli-> prepare ( "SELEZIONE District Numero WHERE Nome =?");

$ Sate-> bind_param ( "s", $ numero);

$ Sate-> execute ();

Questa sezione di codice prende un modello di richiesta di formazione e poi lega il numero variabile, e lo esegue. Questo approccio consente di dividere l'elaborazione delle query e la sua attuazione. Quindi, può essere salvato l'uso di codici maligni sono SQL-.

A quali attacchi

Sistema di protezione – un fattore molto importante, che non può essere trascurato. Naturalmente, un sito semplice biglietto da visita sarà più facile da ripristinare. E se si tratta di un grande portale, il servizio, forum? Quali sono le conseguenze se non si pensa di sicurezza?

In primo luogo, un hacker può rompere l'integrità sia la base e rimuoverlo completamente. E se l'amministratore del sito o hoster non fa una copia di backup, si avrà tempi duri. Soprattutto, un intruso, di cracking un singolo sito, può andare all'altro registrati nello stesso server.

La prossima è il furto di dati personali degli utenti. Come usare – tutto è limitata solo dalla fantasia di un hacker. Ma in ogni caso, le conseguenze non saranno molto piacevole. Soprattutto se conteneva informazioni finanziarie.

Inoltre, l'attaccante può fondersi database di te stesso e poi estorcere denaro per il suo ritorno.

gli utenti di disinformazione per conto dell'amministratore del sito, la persona non vengono, possono essere anche conseguenze negative come possibili fatti di frode.

conclusione

Tutte le informazioni in questo articolo vengono fornite solo a scopo informativo. Usalo solo bisogno di testare i propri progetti quando rileva le vulnerabilità e affrontarle.

Per uno studio più approfondito di tecniche di come condurre SQL-injection, è necessario iniziare con le capacità di ricerca reali e le caratteristiche del linguaggio SQL. Come query compilati, parole chiave, tipi di dati, e l'uso di tutto questo.

Inoltre, non può fare a meno di capire il funzionamento delle funzioni PHP e gli elementi HTML. L'uso primario punti più vulnerabili per iniezione – una linea di indirizzo, e vari campo di ricerca. Imparare funzioni PHP, il metodo di attuazione e caratteristiche sarà capire come evitare gli errori.

La presenza di molti strumenti software già pronti consentire un'analisi approfondita sul sito noto vulnerabilità. Uno dei prodotti più popolari – kali linux. Questa immagine di un sistema operativo basato su Linux, che contiene un gran numero di strumenti e programmi in grado di eseguire un'analisi completa di forza del sito.

Cosa è necessario sapere come incidere il sito? E 'molto semplice – è necessario essere consapevoli dei potenziali vulnerabilità del vostro progetto o un sito web. Soprattutto se si tratta di un negozio online con pagamento online, dove i dati degli utenti il pagamento può essere compromessa da un utente malintenzionato.

Per lo studio professionale del personale addetto alla sicurezza informazioni esistenti saranno in grado di controllare il sito per una serie di criteri e di profondità. Partendo da un semplice HTML-iniezioni e di ingegneria sociale e phishing.