Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: bizco en 3 Septiembre 2010, 23:00 pm



Título: No es vulnerable?
Publicado por: bizco en 3 Septiembre 2010, 23:00 pm
Hola, tengo este codigo:

Código:
"SELECT * FROM {sessions} WHERE sessionid = '$sessionid'
                                                                 AND lastactivity > " . (TIMENOW - COOKIE_TIMEOUT) . "
                                                                 AND ipaddress = '" . USERIP . "'
                                                                 AND useragent = '" . USERAGENT . "'"

$sessionid no se limpia en ningun caso, se lee el valor de la cookie directo. pues bien, modificando el valor de la cookie no muestra ni un solo error.... ¿es normal esto?.


Título: Re: No es vulnerable?
Publicado por: Debci en 4 Septiembre 2010, 12:57 pm
Hola, tengo este codigo:

Código:
"SELECT * FROM {sessions} WHERE sessionid = '$sessionid'
                                                                 AND lastactivity > " . (TIMENOW - COOKIE_TIMEOUT) . "
                                                                 AND ipaddress = '" . USERIP . "'
                                                                 AND useragent = '" . USERAGENT . "'"

$sessionid no se limpia en ningun caso, se lee el valor de la cookie directo. pues bien, modificando el valor de la cookie no muestra ni un solo error.... ¿es normal esto?.
La cookie no tiene porque almacenar un valor que valla a ser ejecutado como querie, osea que alomejor el contenido de dicha cookie no es una consulta :S

Saludos


Título: Re: No es vulnerable?
Publicado por: bizco en 4 Septiembre 2010, 13:02 pm
obtiene el valor de la cookie y lo mete en la consulta sin mas, active el modo debug para ver las consultas y la ejecuta aparentemente sin errores ni cerrandole mal las comillas, ponga lo que ponga no muestra error alguno.


Título: Re: No es vulnerable?
Publicado por: tragantras en 4 Septiembre 2010, 17:13 pm
hace:

Código
  1. $sessionid = $_COOKIE['sessionid'];

??? Porque si hace eso, porsupuesto que es vulnerable, vasta con cambiar la cookie a algo como:

Código:
-1 union all select 1,2,3,4,n--


Título: Re: No es vulnerable?
Publicado por: bizco en 4 Septiembre 2010, 18:35 pm
si es exactamente eso, como no hace nada extraño no puse ese trozo pero es asi, despues de eso ejecuta la sentencia que puse anteriormente. es en local asi que se los campos y todo lo que necesito, pero como digo metiendo una sentencia invalida no me da error alguno ni nada que me marque algo.

salida del debug:

Código:
 SELECT * FROM sessions WHERE sessionid = 'or 1=0'
                                                                 AND lastactivity > 1283615617
                                                                 AND ipaddress = '0.0.0.0'
                                                                 AND useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 AskTbCPUID/3.8.0.12304 Firefox/3.6.8'

el user agent tb puedo meter lo que quiera, pero..... no parece tener efecto alguno ni me sale error.

edito:

en el useragent no puedo meter " ' ".


Título: Re: No es vulnerable?
Publicado por: Shell Root en 4 Septiembre 2010, 22:33 pm
Pero si, nisiquiera estas produciendo un error. Es decir, estás realizando una consulta donde en el campo sessionid es una cadena.
Código
  1. SELECT
  2.     *
  3.  FROM sessions
  4. WHERE sessionid = 'or 1=0'
  5.   AND lastactivity > 1283615617
  6.   AND ipaddress = '0.0.0.0'
  7.   AND useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 AskTbCPUID/3.8.0.12304 Firefox/3.6.8'

Pero si haces algo así,
Código
  1. SELECT
  2.     *
  3.  FROM sessions
  4. WHERE sessionid = '' OR 1=0 ''
  5.   AND lastactivity > 1283615617
  6.   AND ipaddress = '0.0.0.0'
  7.   AND useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 AskTbCPUID/3.8.0.12304 Firefox/3.6.8'


Título: Re: No es vulnerable?
Publicado por: bizco en 4 Septiembre 2010, 23:21 pm
a sido solo como ejemplo, como ya comente rompo la cadena incluso pongo bestialidades y no salta un solo error, es lo que me tiene despistado.

por ejemplo esto:

Citar
SELECT * FROM sd_sessions WHERE sessionid = '819545cc8a2769483167db653ed0a0d9' union select 1,2,3,4,5,password from sd_users where username='yo'

en la consulta desde el archivo php no genera ninguna coincidencia, pero si lo pongo a mano en mysql funciona bien.

EDITO:

ahora mirando mejor he logrado modificar privilegios de mi sesion, pero....... seria necesario eliminar los and de la consulta original que es lo que me esta creando problemas. voy a probar a ver si hay suerte.


Título: Re: No es vulnerable?
Publicado por: tragantras en 6 Septiembre 2010, 00:42 am
a sido solo como ejemplo, como ya comente rompo la cadena incluso pongo bestialidades y no salta un solo error, es lo que me tiene despistado.

por ejemplo esto:

Citar
SELECT * FROM sd_sessions WHERE sessionid = '819545cc8a2769483167db653ed0a0d9' union select 1,2,3,4,5,password from sd_users where username='yo'

en la consulta desde el archivo php no genera ninguna coincidencia, pero si lo pongo a mano en mysql funciona bien.

EDITO:

ahora mirando mejor he logrado modificar privilegios de mi sesion, pero....... seria necesario eliminar los and de la consulta original que es lo que me esta creando problemas. voy a probar a ver si hay suerte.


a ver... en un ámbito de select no pueds hacer un update, stacked queries en php+mysql no están permitidas... los and del resto pueds eliminarlos comentando el resto de la cadena con --

si no te tira ningun error puede que tengas que atacar con blind injection


Título: Re: No es vulnerable?
Publicado por: bizco en 6 Septiembre 2010, 01:24 am
si, leere sobre blind pq es raro, por ejemplo me registre una cuenta que deja el query de esta forma:

Citar
SELECT * FROM {users} WHERE username = '' or username='yo'

mi nombre de usuario es ' or username='yo y las comillas reales cierran bien la consulta. se ejecuta tal cual, y el objetivo seria que la sesion de usuario se cargasen con los datos del usuario "yo". y lo mismo de antes, ejecutando la consulta desde mysql directamente me da los datos de "yo", pero en el script no parece funcionar.


Título: Re: No es vulnerable?
Publicado por: tragantras en 7 Septiembre 2010, 12:36 pm
la web es tuya? tienes el código del proyecto? por echarte una mano... pq así a ciegas, es dificil!


Título: Re: No es vulnerable?
Publicado por: bizco en 7 Septiembre 2010, 16:58 pm
na es en local, solo por pasar el rato. si tengo las fuentes, mira esto es el codigo que hay, si necesitas mas te puedo pasar por mp un enlace a todo.

sessions

Citar
$sessionid = isset($_COOKIE[COOKIE_PREFIX . 'sessionid']) ? $_COOKIE[COOKIE_PREFIX . 'sessionid'] : 0;
if($sessionid)
{
  $session_arr = $DB->query_first("SELECT * FROM {sessions} WHERE sessionid = '$sessionid'
                                                                
                                                                 AND lastactivity > " . (TIMENOW - COOKIE_TIMEOUT) . "
                                                                 AND ipaddress = '" . USERIP . "'
                                                                 AND useragent = '" . USERAGENT . "'");
  if($session_arr)
  {
    if($user_arr = $DB->query_first("SELECT * FROM {users} WHERE userid = " . $session_arr['userid'] . " LIMIT 1"))
    {
      $userinfo = GetUserInfo($user_arr);
    }  
    
    // update session
    $DB->query("UPDATE {sessions} SET lastactivity = " . TIMENOW . " WHERE sessionid = '$sessionid'");
    }
}

metodo query first:

Citar
function query_first($query_string)
  {
    $args = func_get_args();
    array_shift($args);
    printf("SQL -> %s",$query_string); //esto es mio para observar la consulta.
    $queryid      = $this->query($query_string, $args);
    $returnarray  = $this->fetch_array($queryid, $query_string);

    $this->free_result($queryid);

    return $returnarray;
  }

el metodo query es mas de lo mismo, no hace nada especial sobre la cadena.