Il mio attuale compito è trovare una possibile iniezione SQL in una WebApp PHP. Mentre osservavo il codice sorgente, ho notato che il modo in cui lo script gestisce le statistiche preparate è strano.
$query = db::prepare("SELECT password FROM vault where id=%s", $_POST['id']);
$res = db::commit($query);
 La parte interessante della funzione   prepare    ha il seguente aspetto: 
    // escape
    foreach ($args as &$value){
        $value = static::$db->real_escape_string($value);
    }
    // prepare
    $query = str_replace("%s", "'%s'", $query);
    $query = vsprintf($query, $args);
    return $query;
Ora, cercando un modo per aggirare questo, ho notato che le virgolette singole sono sfuggite, ovviamente a causa della funzione real_escape_string. Guardando da queste parti, ho trovato il seguente post che afferma che l'impostazione di% s nelle virgolette singole appare in modo molto sospetto . Tuttavia, non ho ancora trovato il modo di sfruttarlo o se è addirittura sfruttabile.
Qualcuno può dirmi se c'è qualcosa di sbagliato da evadere ed elaborare l'input dell'utente in questo modo? So che usare le funzioni di istruzioni preparate su mysqli / PDO originali è un'idea migliore, ma dato che questo non è il mio codice, sarebbe bello scoprire cosa c'è di sbagliato qui e perché non dovresti farlo in questo modo.