Acerca de SQL Injection Mysql

0

Estoy intentando probar la inyección de SQL en un sitio (PHP, usa la base de datos MySQL). Cuando coloco un apóstrofe en el campo de nombre de usuario y dejo el cuadro de contraseña en blanco, luego de enviarlo, el formulario se vuelve a cargar y los campos se vuelven a vaciar. Pero cuando utilicé un apóstrofe en el campo de contraseña, el mensaje dice "Nombre de usuario / contraseña no válidos".

¿Qué indica eso? Y si pongo admin 'como nombre de usuario (no agregar comentarios) y en el campo de la contraseña, escriba ;Drop Table users; (no agregue comentarios), ¿mis comentarios funcionarán?

    
pregunta Rifat 05.07.2018 - 11:37
fuente

1 respuesta

4

No hay suficiente información para decir: dado esto, podría simplemente rechazar contraseñas vacías y tomar cualquier entrada en el campo de la contraseña, hacer una "hash" y luego verificarla contra la base de datos de forma segura.

Considere el siguiente pseudocódigo (esto no pretende ser una buena práctica, solo es claro para leer, ¡no lo use en producción!):

if (isempty($password)) {
  reloadPage();
} else {
  $query = "SELECT * FROM users where username = :username";
  if ($user = dbquery($query, $username)){
    if (checkpassword($password, $user.password)){
      login();
    } else {
      reloadPage("Invalid Username/Password");
    }
  } else {
    reloadPage("Invalid Username/Password");
  }
}

Esto daría el comportamiento descrito, sin (asumiendo que la función dbquery hace una distinción clara entre los datos de consulta y los parámetros proporcionados por el usuario) permitiendo SQLi.

Dejando de lado, es poco probable que el uso de DROP TABLE en una prueba de penetración vaya bien con el cliente. Debería usar métodos más seguros para verificar el posible defecto: obtener el usuario actual de la base de datos, por ejemplo.

    
respondido por el Matthew 05.07.2018 - 12:05
fuente

Lea otras preguntas en las etiquetas