SQL injections & co

Ciao Gianni, ho una curiosità da soddisfare.

Ho scansionato il mio sito con Web Vulnerability e ho scoperto la possibilità di una SQL injection in uno script di ricerca MySQL. Il problema è relativo perchè l'accesso a questo file avviene tramite una select box in un form che usa un metodo POST e non tramite l'immissione diretta di dati (textbox).

Il problema che mi pongo è questo:è possibile che un "maleintenzionato" acceda a questo file (che risiede sul mio sito) attraverso un suo file che utilizza un metodo post modificando opportunamente la variabile che passa in modo da accedere ad altri dati sul DB?

Grazie  :bye:

inviato 11 anni fa
Nico Colonna
X 0 X

Ciao fred,

sono un po' perplesso sul fatto che un programma possa verificare se uno script è esposto alla SQL injection. Dipende molto dallo script, non dal form. Dovresti verificare in che modo la query che mandi a MySQL possa essere manipolata ad arte da un dato inviato via POST.

Nel caso in cui ci sia relamente questa possibilità un utente può creare un POST ad arte, indipendentemente dal form che hai costruito.

Comunque conviene ragionare su casi concreti. Se ti va posta la query che costruisci con i dati del POST così discutiamo se possa essere manipolata.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ciao fred,

sono un po' perplesso sul fatto che un programma possa verificare se uno script è esposto alla SQL injection.

In pratica il programma simula dei tipici attacchi, tipo l'inserimento di caratteri ' o /* o simili e verifica l'eventuale presenza di errori.

Se ti va posta la query che costruisci con i dati del POST così discutiamo se possa essere manipolata.

Ho due file, nel primo ho una select box con una serie di squadre, in seguito all'evento "onchange" viene richiamato il secondo file.

Le variabili passate via post sono:

<select name="squadra" size="1" onchange="submit()">
       ....  
</select>   
<input type="hidden" name="funzione" value="calcolo">
<input type="hidden" name="tabPlayer" value="<?php echo $tabella;?>">
<input type="hidden" name="tabRose" value="<?php echo $rose;?>">

(Nota. $tabella e $rose sono due stringhe che identificano le tabelle da cui estrarre i dati)

Mentre nel secondo file innanzi tutto si verifica che la funzione sia proprio "calcolo" e successivamente si caricano le variabili passate:

<?php 
if ($_POST["function"]=="calcolo") {   
   $tabella=$HTTP_POST_VARS['tabPlayer'];
   $rose=$HTTP_POST_VARS['tabRose'];   
   $squadra=array($HTTP_POST_VARS['squadra']);
   ...
?>

Il punto è che $tabella e $rose vengono utilizzate per caricare i dati dei giocatori nella interrogazione SQL:

<?php
$sql="SELECT $rose.`id`,`r`,`fvoto` FROM $rose NATURAL JOIN $tabella WHERE `fsquadra`='$squadra[0]'";
...
?>

A questo punto la domanda: sono vulnerabile? :idiot:

Grazie  :bye:

risposto 11 anni fa
Nico Colonna
X 0 X
A questo punto la domanda: sono vulnerabile? :idiot:

Si, lo script si può facilmente manomettere ma poiché si tratta di una SELECT in realtà non ti può capitare nulla di grave, magari la fuoriuscita di infomazioni "indesiderate" ma dipende molto da cosa e come mostri i risultati della query.

Non c'è dubbio che passare i nomi delle tabelle attraverso campi nascosti è senza dubbio una cosa da evitare. Avresti dovuto usare le sessioni per dati così importanti. Poi bisogna vedere se nel tuo php.ini è impostato il magic_quotes_gpc. Infatti tu non slesci nessun dato proveniente da post.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

In realtà il mio sito (www.nicoco.it) non ha informazioni sensibili, per cui il problema è solo quello di iparare a programmare in modo da poterlo sfruttare per future applicazioni.

In ogni caso ottimo il consiglio delle sessioni per il nome delle variabili, non ci avevo pensato. Uso le sessioni solo per l'autenticazione degli utenti e la gestione del login. Sarà la prox modifica  O0

Grazie  :bye:

risposto 11 anni fa
Nico Colonna
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda