2011-10-12 28 views
7

En primer lugar, no estoy tratando de piratear o hacer algo ilegal. Pensé que les deja saber. Tengo un cliente que quiere que haga algunas modificaciones en su sistema, cuando lo estaba viendo noté que NADA se había escapado. No estoy bromeando, nada se está escapando. Le expliqué que no es seguro tener un sistema como ese. Luego procede a decirme que ha tenido su sistema así durante algunos años y que nada ha sucedido. Necesito mostrarle que su sistema no es seguro, pero realmente no sé hacer una inyección sql. Aquí hay algunas consultas que usan $ _GET y no se escapan.necesita ayuda con inyección sql

SELECT *,DATE_FORMAT(joined,'%M %d, %Y') as \"Joined\" FROM `members` WHERE `name` LIKE '".$ltr."%' ORDER BY points DESC LIMIT $page,50 

Aquí hay otro:

SELECT * FROM groups WHERE id=$thisladder[grid] 

La única cosa que veo que "podría" limpiar el $ _GET es esta función:

if (!ini_get('register_globals')) { 
    $superglobals = array($_SERVER, $_ENV, 
     $_FILES, $_COOKIE, $_POST, $_GET); 
    if (isset($_SESSION)) { 
     array_unshift($superglobals, $_SESSION); 
    } 
    foreach ($superglobals as $superglobal) { 
     extract($superglobal, EXTR_SKIP); 
    } 
} 

Es posible que la función anterior puede estar desinfectando las variables. Y sí, el sistema también usa el registro global, que también es malo.

También hice una copia de seguridad, por las dudas.

+2

¿Desea saber cómo evitar una inyección SQL o probarle a su cliente que no es segura? – skyuzo

+3

¡Oh hombre, no solo no escapan nada, sino que * explícitamente * emulan la funcionalidad 'register_globals' si está deshabilitada! Esta es la primera! – rid

+0

No sé cómo probarlo. Pero sí sé que mysql_real_escape y las declaraciones preparadas son el camino a seguir. – user962449

Respuesta

6

No puedo decirlo mejor que http://xkcd.com/327/.

Pero, de nuevo, como Marc B dice, se olvide de inyección SQL, register_globals es mucho, mucho peor. Nunca pensé que realmente lo vería emulado, por si acaso está apagado.

+0

dios, somos unos nerds, no podíamos dejar de reírnos de esas imágenes jajaja. ¿Entonces lo global es peor que las inyecciones? o_0 – user962449

+0

@ user962449, con 'register_globals', puede simplemente reemplazar el valor de casi cualquier variable simplemente incluyéndolo en su solicitud GET, por ejemplo. – rid

5

Algunas cosas divertidas para mostrar su 'amigo' de lo estúpido de su código es:

http://example.com/badscript.php?_GET[]=ha+ha+I+pwned+your+GET+superglobal 
http://example.com/badscript.php?_SESSION[issuperuser]=1 

Este tipo de cosas es exactamente qué register_globals es una idea tan pura y simple F'ingly idiota, y (después de FAR demasiado largo) finalmente se ha configurado como APAGADO.

Olvidé la inyección de SQL: esa pieza idiota de código permite la inyección remota de variables PHP.

+0

Esto es como la madre de todas las inyecciones ... –

+0

@Marc B: Discuto que ese código no funcionará si el registro global está activado o no. '$ _SESSION' podría sobrescribirse si está desactivado y la sesión aún no se ha inicializado, pero' session_start' la habría borrado de todos modos. Es posible que desee hacer referencia a una versión de PHP hasta que eso sea posible cuando el registro global esté activado. – hakre

+0

@hakre: es cierto, la sesión uno depende completamente de cuándo se llama a session_start en relación con el pseudoregistro global. Simplemente usando esto para demostrar cuán potencialmente pueden ser BAD register_globals. –

1

si el código de inicio de sesión se veía algo como esto:

$query = 'SELECT id FROM users WHERE username=\''.$_POST['username'].'\' AND password=\''.$_POST[password].'\''; 
$result = mysql_query($query); 
etc, etc... 

prueba a escribir esto en los campos de login

username = "whatever" 
password = "' OR 1" 

sentido?

+0

Las contraseñas son hash. Así que supongo que el guión no es tan malo:/ – user962449

+0

, luego use "'O 1" para el nombre de usuario en su lugar. – dqhendricks

+0

Tenga en cuenta que no soy genial con las inyecciones de sql. Entonces, ¿escribo ''O 1'? – user962449

Cuestiones relacionadas