L'sql injection e' una vulnerabilita' che sta nelle istruzzioni,
prendiamo che tu strutturi una richiesta al database,
per esempio per confrontare la password prossimamente con quella inserita da te, come tentativo di accesso.
In questo momento la query fa richiesta di ritornare la password come risultato se quell'email esiste, la ritorna come variabile e ti permette di fare il check con quella inserita da te.
Ora, siccome dev'essere dinamica la cosa e il developer non conosce la tua email per scriverla direttamente nel codice te la deve chiedere in un'input
il codice che processa l'input e' il seguente rispetto a quello sopra:
Codice:
<?php
$email= $_POST['email'];
$pass = $_POST['password'];
$ar = mysql_query("select password from Utenti where email='$email'"";
if $pass == $ar->fetch_assoc(){
dologin();
}else{
echo "password errata";
}
?>
come vedi prende l'email come variabile che gli dai tu e non fa nessuna sanitizzazione,
se io scrivessi un'email tipo: gianlucavacc'
[email protected] praticamente romperei la query quindi mi ritornerebbe un'errore, la query che si va ad eseguire corrisponderebbe a questa:
select password from Utenti where email='gianlucavacc'
[email protected]'
ma leggerebbe in questo modo:
select password from Utenti where email='gianlucavacc'
e poi si romperebbe perche' "
[email protected]" non e' un'istruzione continuativa, mentre se scrivi
gianlucavacc' or '
[email protected]
apparirebbe:
select password from Utenti where email=gianlucavacc' or '
[email protected]
che sarebbe un'istruzione valida,
quindi cosa deduciamo? che possiamo 'injectare' ovvero scrivere quello che puo' scrivere il developer ovvero avere accesso al database scrivendo il comando che vogliamo.
ovviamente da come e' scritta la query bisogna adattare il codice alle situazioni, ti consiglio di studiarti le istruzioni e di studiarti come funziona sqlmap e TUTTE le sue funzioni in modo che capisci bene, e' praticamente un libro che puoi usare subito e testare senza problemi con un comando, good luck