Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: yasión en 25 Noviembre 2009, 23:30 pm



Título: Sistema de quote en SMF querys
Publicado por: yasión en 25 Noviembre 2009, 23:30 pm
Pues con la excusa de la búsqueda del XSS he estado mirando algunas líneas de código de SMF2.0, y resulta que de PHP se más bién poco así que si alguien me puede explicar esto lo agradeceré.
En la Wiki del smf2-review dice:

Citar
Es dificil hacer inyecciones SQL porque ahora ya usan un sistema de quote...

¿A que se refiere esto? Lo que yo he visto en las consultas es que usan las funciones de $smcFunc. Por ejemplo:

$smcFunc['db_query'] (identifier, query, values, connection)
Código:
$where = 'member_name = {string:member_name}';
$where_params['member_name'] = $_POST['user'];
$request = $smcFunc['db_query']('', '
     SELECT id_member, real_name, member_name, email_address, is_activated, validation_code, lngfile, openid_uri, secret_question
     FROM {db_prefix}members
     WHERE ' . $where . '
     LIMIT 1',
     array_merge($where_params, array())
);

Que hace {string:member_name}? Supongo que convertirá a string $_POST['user'], digo yo que equivaldrá a algo así:

Código:
WHERE member_name='.$_POST['user']

El caso es que no veo que mire el contenido en ningún sitio, con que supongo que lo estará haciendo en la parte de {string:variable}...  Cualquier cosa que me cuenten me sirve porqué tengo muy poca idea...  :huh:

Bueno, y luego pasa $request a otra función de $smcFunc, realiza la consulta y etcétera...

Gracias por adelantado!!  ;D


Título: Re: Sistema de quote en SMF querys
Publicado por: WHK en 26 Noviembre 2009, 00:09 am
Lo que quiere decir es que antes de procesar cada query lo pasa por quotes (no siempre)

Código
  1. $where = 'member_name = {string:member_name}';
  2. $where_params['member_name'] = $_POST['user'];
  3. echo '
  4.     SELECT id_member, real_name, member_name, email_address, is_activated, validation_code, lngfile, openid_uri, secret_question
  5.     FROM {db_prefix}members
  6.     WHERE ' . $where . '
  7.     LIMIT 1'.array_merge($where_params, array());

Prueba con eso y verás como queda la query.

Hay algunos casos en que el filtro de quotes no se respeta como en dos casos de dos inyecciones sql que tiene smf actualmente.