No es vulnerable?

Iniciado por bizco, 3 Septiembre 2010, 23:00 PM

0 Miembros y 1 Visitante están viendo este tema.

bizco

Hola, tengo este codigo:


"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?.

Debci

Cita de: ctlon en  3 Septiembre 2010, 23:00 PM
Hola, tengo este codigo:


"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

bizco

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.

tragantras

hace:

Código (php) [Seleccionar]
$sessionid = $_COOKIE['sessionid'];

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

-1 union all select 1,2,3,4,n--
Colaboraciones:
1 2

bizco

#4
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:

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 " ' ".

Shell Root

Pero si, nisiquiera estas produciendo un error. Es decir, estás realizando una consulta donde en el campo sessionid es una cadena.
Código (sql) [Seleccionar]
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'


Pero si haces algo así,
Código (sql) [Seleccionar]
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'
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

bizco

#6
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:

CitarSELECT * 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.

tragantras

Cita de: ctlon 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:

CitarSELECT * 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
Colaboraciones:
1 2

bizco

si, leere sobre blind pq es raro, por ejemplo me registre una cuenta que deja el query de esta forma:

CitarSELECT * 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.

tragantras

la web es tuya? tienes el código del proyecto? por echarte una mano... pq así a ciegas, es dificil!
Colaboraciones:
1 2