Sto lavorando su un sito che è stato violato tramite SQL Injection (a prima vista solo le voci di database sono corrotte con lo scripting cross-site) la potenziale vulnerabilità che ho trovato dopo aver visto il codice è che c'è un sacco di chiamate mysql_query i cui ingressi non sono affatto sfuggiti.SQL Injection tramite mysql_query
Il buon vecchio:
$query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; /*HACK HERE*/
mysql_query($query, $connection);
Tuttavia non riesco a trovare come si possa fare qualcosa di fresco da che la vulnerabilità di iniezione (da freddo intendo qualcosa di simile a un inserimento o un aggiornamento). Ho provato a creare una dichiarazione come questa:
SELECT * FROM mytable where name LIKE '%' AND WHERE id IN (INSERT INTO secondtable (id,description) VALUES (15, 'Fifteenth description');--%'
Nessun successo. Immagino che l'INSERT non abbia nulla da fare qui.
In questo momento sto sfuggendo a tutti gli input dell'utente nel codice, ma non ho capito come gli hacker hanno penetrato questo sito, quindi non sono sicuro al 100% che la mia correzione faccia il lavoro. Qualche suggerimento geniale?
Grazie
Immagino che questo sito non sia il posto giusto per chiedere come farlo :) – Mike
Assicurarsi che il 'nome' quando concatenato con le stringhe di base formi sql valido. – EBarr
Un utente malintenzionato potrebbe facilmente 'UNIRE' /' UNIONE' un'altra tabella e ottenere le credenziali di accesso dell'amministratore. Quindi, con privilegi elevati poteva fare più cose cattive, ad es. caricare una shell PHP per eseguire comandi arbitrari sul server – knittl