È possibile includere una funzione PHP durante l'esecuzione di SQL Injection?

1

Considera questo codice:

?id=' UNION SELECT 1,2;"; phpinfo();//-- -&Submit=Submit 

Funzionerà?
Query SQL:

if(isset( $_GET[ 'submit' ] ) ) {
  // Get input
  $id = $_GET[ 'id' ];

  // Check database
  $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
  $result = mysqli_query($connection, $query);
  // Get results
  while( $row = mysqli_fetch_assoc( $result ) ) {
    // Get values
    $first = $row["first_name"];
    $last  = $row["last_name"];

    // Feedback for end user
    $html .= "<pre>ID: {$id} <br>First name: {$first} & Surname: {$last}</pre>";
  }
}

La mia osservazione:

Lo stesso frammento di codice funziona bene quando inserisco un codice nel file .php i.e.

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '' UNION SELECT 1,2;"; phpinfo();//-- -&Submit=Submit';";

MA quando lo invio da un modulo, tramite GET, cosa ottengo:

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

Fammi sapere se ho bisogno di essere più dettagliato.

    
posta ankush dubey 30.05.2018 - 15:21
fonte

2 risposte

1

Devi capire come viene eseguito il codice PHP sul tuo server.
Quando richiedi index.php sul server, ciò che accadrà è che il tuo nome file index.php verrà valutato dal tuo motore php come niente altro.
Se la tua pagina contiene una richiesta di SQL , sarà inviata e il risultato verrà utilizzato dal tuo codice php .
Quello che vuoi nel tuo caso è la modifica del contenuto di index.php .
Quello che stai suggerendo potrebbe funzionare se dopo la richiesta del tuo SQL avevi qualcosa del tipo:

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
  $result = mysqli_query($connection, $query);
 // Get results
  while( $row = mysqli_fetch_assoc( $result ) ) {
      // Get values
      eval( $row["first_name"]);

  }

La funzione eval viene usata raramente in quanto è molto pericolosa perché potrebbe consentire in questo caso ad esempio l'iniezione di codice php (che è molto peggio dell'iniezione mysql) nella maggior parte dei casi.
Senza eval php non considererà mai una stringa come codice e il motore php eseguirà solo il codice statico contenuto nel tuo file php.

Non potrei insistere abbastanza sul fatto che non dovresti mai usare eval . I casi in cui eval potrebbe essere utilizzato sono molto specifici e nella maggior parte dei casi rivelano un difetto di progettazione nel codice.

    
risposta data 30.05.2018 - 15:55
fonte
5

Generalmente NON PUO essere fatto. SQL injection consente solo di eseguire comandi SQL. Non sei direttamente in grado di usare PHP.

L'unico modo in cui potresti essere in grado di eseguire PHP usando SQL inejction è se la pagina usa eval () su input non-disinfettati da DB. Poche pagine web lo faranno mai. Potrebbe essere possibile anche se la pagina utilizza qualcosa di ancora più raro e bizzarro come la generazione di un file php da includere dal DB, ma questo non succede praticamente mai.

Se la pagina utilizza eval sul risultato del DB, allora si usa semplicemente l'iniezione SQL per inserire il codice nella posizione appropriata nel DB (la colonna che viene inserita in eval) e quindi visitare la pagina che utilizza l'eval ( ). Una volta che il codice PHP dal DB viene passato a eval, viene eseguito.

    
risposta data 30.05.2018 - 15:55
fonte

Leggi altre domande sui tag