Come rendere un sito vulnerabile a SQLi?

5

Recentemente mi sono interessato alle iniezioni SQL - questo (per qualche ragione, correggimi se sbaglio) mi è sembrato un buon punto di partenza (sono praticamente un principiante). Ad ogni modo, voglio creare un sito su cui posso esercitarmi. In altre parole, fondamentalmente forse una pagina di contenuto, una pagina di accesso e un database con dire admin, utenti, pass, così via e così via.

Dovrò imparare SQL, ma mi ci vorrà mezz'ora, ho già sfogliato alcuni siti. Probabilmente avrò bisogno di HTML e di alcuni PHP di base ...?

La mia domanda: mi manca qualcosa? E cosa definisce esattamente il codice SQL vulnerabile? Scusa, sono un po 'generoso qui. Il più vicino che ho trovato è questo: link

Da una nota a margine, SQLi è un buon punto di partenza per le vulnerabilità del web?

Grazie in anticipo!

EDIT: grazie per tutte le meravigliose risposte!

    
posta Jacob Kudria 21.05.2013 - 17:18
fonte

5 risposte

12

Non preoccuparti di scrivere il tuo sito per una pratica del genere. Invece, fai uso delle abbondanti risorse sul web.

Un obiettivo di buona pratica è il progetto dannoso vulnerabile Web ( DVWA ). Il progetto OWASP WebGoat è molto bello.

    
risposta data 21.05.2013 - 17:20
fonte
5

Alcune note

Un attacco di SQL injection è quando qualcosa di inaspettato viene inserito in un database. I tipi di iniezioni dipendono dalle vulnerabilità del sistema.

Iniezione query SQL

Se il database non dispone di autorizzazioni appropriate, il che significa che l'utente Web ha il pieno controllo sul database, quindi possono potenzialmente fare cose come sostituire tutti i record, rilasciare tabelle e aggiungere le proprie tabelle.

Un esempio potrebbe essere un'iniezione su una modifica in cui il sito si aspetta che l'utente modifichi il proprio record, ma invece aggiorna tutto nel server.

\' or where 1=1;

Se hanno accesso in sola lettura al database, potrebbero aumentare i loro privilegi e ottenere più informazioni di quelle che dovrebbero. Questo esempio si troverebbe su un server che restituisce due record, quindi l'utente aggiunge la tabella dell'utente come risultato.

\' UNION ALL SELECT username,password from USERS;

Iniezione PHP

Molte delle funzionalità delle ultime versioni di PHP sono state risolte per risolvere problemi di esecuzione del codice, tuttavia alcuni sviluppatori usano cose come exec() per eseguire azioni sul codice estratto da un database. Alcune versioni precedenti di PHP sono ancora vulnerabili agli attacchi.

Gli sviluppatori sono la prima linea per la difesa quando si tratta di scrivere un sito web. Supponiamo che tu abbia un CMS aziendale e che gli sviluppatori abbiano creato una tabella modificabile dall'utente nel CMS per modificare qualcosa come annunci display.

L'utente malintenzionato potrebbe inserire phpinfo(); e visualizzare tutto il database sul server, o eseguire codici a riga di comando (in base all'accesso dell'account utente del sito Web sul server Web) o aggiungere la propria backdoor al sito ( scrivere o riscrivere i file). Ciò potrebbe consentire all'utente di reindirizzare completamente tutto il traffico fuori dal sito.

Iniezione script

Sebbene il PHP del sito possa essere meno vulnerabile a un attacco, un utente può ancora iniettare cose come iframe contenenti codice dannoso, javascript con codice dannoso o applet JAVA che consentono loro di rubare i cookie degli utenti. Poiché javascript può eseguire AJAX e inviare richieste a un server web diverso senza preavviso, questo probabilmente non verrà visualizzato nell'interfaccia anche se potrebbe accadere.

<script type='text/javascript'> 
  window.location('http://someotherwebsite.com');
</script>

Test

Le implicazioni legali per il test sulla scatola di qualcun altro sono diverse a seconda del paese in cui ti trovi e del paese in cui è ospitato il server. Detto questo, ci sono molte versioni gratuite di sistemi operativi come FreeBSD e vari tipi di Linux (alcuni più sicuri di altri) in cui è possibile installare un sistema operativo, un server Web e un server MySQL su un Virtual Fai la macchina sotto qualcosa di simile a Virtual Box e vai in città senza perdere tempo con la tua macchina di produzione.

Anche alcune delle altre risposte fornite da altri poster sono eccellenti in questo thread.

    
risposta data 21.05.2013 - 21:37
fonte
1

Se ti piace entrare nelle vulnerabilità del web, ti consiglio di imparare alcune nozioni di base su PHP, HMTL, Javascript e SQL.

Se hai fatto questo: Introduzione a OWASP

    
risposta data 21.05.2013 - 17:21
fonte
1

Qualsiasi modulo che prende input e lo utilizza direttamente in una query SQL senza controllo per assicurarsi che l'input sia sicuro sarebbe vulnerabile all'iniezione SQL. Essere vulnerabili all'iniezione SQL è più o meno lo stato standard dell'essere, a meno che non si adottino misure specifiche per proteggerli dal codice.

    
risposta data 21.05.2013 - 17:50
fonte
1

Per aggiungere alle risorse di Terry Chia, c'è un tutorial di SQL injection di PentesterLab che fa praticamente quello che cerchi, chiamato Da SQLi a Shell . L'ho fatto ieri, è molto buono. Offrono anche un paio di passaggi più avanzati.

    
risposta data 21.05.2013 - 20:55
fonte

Leggi altre domande sui tag