Come aggirare mysql_real_escape_string per sfruttare una vulnerabilità SQLi?

5

Ho provato a trovare alcuni exploit di SQL injection che potrebbero aggirare le funzioni che dovrebbero prevenire le vulnerabilità di SQL injection, ad esempio mysql_real_escape_string . Ho trovato un exploit e l'autore ha descritto la vulnerabilità e pubblicato il codice vulnerabile:

<?php
 if(isset($_GET['pagename'])){
  $name=$_GET['pagename'];
  $query=sprintf("SELECT* FROM ".PREFIX."page WHERE
  pagename = '%s' AND publish = 'Y'",$xx_con->real_escape_string($name));
}

Ma non ha descritto come bypassare la protezione, ovvero la funzione real_escape_string . Esiste una vera vulnerabilità SQLi nel codice e in che modo un hacker può sfruttarla?

    
posta user126623 24.08.2016 - 18:37
fonte

1 risposta

2

Aggiornamento: vedi i commenti sotto relativi alla corretta implementazione.

Risposta originale , prima di sapere che era ufficialmente documentata :

The use of function real_escape_string with substitution %s within an already quoted string '%s' looks highly suspect.

There could well be a vulnerability if

  • if real_escape_string not designed correctly,
  • or not used in accordance with its documentation. (mis-used, perhaps with extra quotes ' or something else)

Consiglio vivamente di utilizzare un metodo più standard per risolvere SQLi in PHP. Uno che coinvolge la sostituzione di ? è il migliore. Tuttavia, ci può essere un altro metodo di codifica sonora disponibile. Tali metodi di solito aggiungono le loro proprie citazioni internamente, nel qual caso aggiungendo le virgolette ' nel vostro il codice non sarebbe necessario.

Ho notato un'altra cosa su quel codice. Dove arriva PREFIX a partire dal? Se questo è fornito dall'utente, ovviamente hai uno SQLi vulnerabilità. D'altra parte, se è semplicemente un hardcoded o valore ben igienizzato, quindi si sta bene con quello.

    
risposta data 24.08.2016 - 18:54
fonte

Leggi altre domande sui tag