Aprendizaje de inyección ética de SQL con el formulario de inicio de sesión de php

2

Estoy aprendiendo hackeo ético y ahora estoy en el tema de inyección de SQL. También soy nuevo en SQL y PHP. Ok, tengo un sitio web local muy vulnerable con back-end Linux, MySQL y Apache y ahora estoy tratando de usar inyección SQL para iniciar sesión. El formulario de inicio de sesión es PHP script, la página de inicio de sesión consta de 2 cuadros: nombre de usuario y contraseña. Intenté agregar el signo "'" al final de la contraseña y obtengo un error de SQL, por lo que es probable que sea inyectable. Luego intenté agregar el "'OR 1 = 1" y "O' a '= a'" al final de la contraseña, pero sin mucho éxito. Así que ahora necesito ayuda! Cualquier idea o sugerencia será útil. El código parcial de inicio de sesión de php está debajo:

// Sanitization is present

if (isset($_POST['user']))
{
$user = sanitizeString($_POST['user']);
$pass = sanitizeStringSQL1($_POST['pass']);

if ($user == "" || $pass == "")
$error = "Not all fields were entered<br>";

else
{
$result = queryMySQL("SELECT user,pass FROM members WHERE user='$user' AND pass='$pass'");
if ($result->num_rows == 0)
    
pregunta Gazel 31.01.2015 - 03:15
fuente

1 respuesta

1

Tu sintaxis está un poco apagada en tus dos intentos en esto. Como mencionó que está usando DVWA , le proporcionaré la fuente aquí (para que podamos descartar errores de PHP / DB en tu lado)

<?php     

if(isset($_GET['Submit'])){ 

// Retrieve data 

$id = $_GET['id']; 

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; 
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); 

$num = mysql_numrows($result); 

$i = 0; 

while ($i < $num) { 

    $first = mysql_result($result,$i,"first_name"); 
    $last = mysql_result($result,$i,"last_name"); 

    echo '<pre>'; 
    echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; 
    echo '</pre>'; 

    $i++; 
} 
} 
?>

La siguiente línea activará una inyección exitosa:

foo' or '1' = '1

Observe que no hay un tick al principio ni al final de la carga útil. Esto se debe a (como se puede ver en la fuente) que la consulta en sí misma lo está proporcionando (en ambos extremos de $id ).

En tus ejemplos de

' OR 1=1 and ' OR 'a'=a'

En el primer caso faltan tics todos juntos, y el segundo caso tiene un tilde final. Es probable que ambos produzcan errores de sintaxis SQL.

Si desea verificar su sintaxis SQL, use un recurso en línea como este .

    
respondido por el KDEx 31.01.2015 - 05:40
fuente

Lea otras preguntas en las etiquetas