¿Es posible incluir una función de PHP mientras se realiza la inyección SQL?

1

Considera este código:

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

¿Esto funcionará?

Consulta 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>";
  }
}

Mi observación:

El mismo fragmento de código funciona bien cuando lo codifico en el archivo .php, es decir,

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

PERO cuando lo envío desde un formulario, a través de GET, lo que recibo:

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

Avísame si necesito ser más detallado.

    
pregunta ankush dubey 30.05.2018 - 15:21
fuente

2 respuestas

1

Debe comprender cómo se ejecuta el código PHP en su servidor.
Cuando solicite index.php al servidor, lo que sucederá es que su motor de php evaluará su nombre de archivo index.php , ya que no es nada más ni menos.
Si su página contiene una solicitud SQL , se enviará y el resultado será utilizado por su código php .
Lo que quieres en tu caso es modificar el contenido de index.php .
Lo que estás sugiriendo podría funcionar si después de la solicitud de tu SQL tuvieras algo como:

$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 función eval rara vez se usa, ya que es muy peligrosa porque podría permitirlo en este caso por ejemplo, inyección de código php (que es mucho peor que la inyección mysql) en la mayoría de los casos.
Sin eval php nunca considerará una cadena como código y el motor php solo ejecutará el código estático contenido en su archivo php.

No puedo insistir lo suficiente en el hecho de que nunca debes usar eval . Los casos en los que se podría usar eval son muy específicos y, en la mayoría de los casos, revela una falla de diseño en el código.

    
respondido por el Kiwy 30.05.2018 - 15:55
fuente
5

En general, NO PUEDE hacerse. La inyección SQL solo le permite ejecutar comandos SQL. No puedes usar directamente PHP.

La única forma en que puede ejecutar PHP usando la inoperación de SQL es si la página usa eval () en entradas sin datos del DB. Pocas páginas web alguna vez harán esto. Puede ser posible incluso si la página usa algo aún más raro y extraño, como generar un archivo php para incluirlo desde la base de datos, pero esto casi nunca sucede.

Si la página usa eval en el resultado de la base de datos, entonces solo usa la inyección SQL para insertar el código en el lugar apropiado en la base de datos (la columna que se coloca en eval) y luego visita la página que usa la eval ( ). Una vez que el código PHP de la base de datos se pasa a eval, se ejecuta.

    
respondido por el Peter Harmann 30.05.2018 - 15:55
fuente

Lea otras preguntas en las etiquetas