Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Grave Vulnerabilidad SQL-Injection en PHP-Nuke

Estas en el tema de Grave Vulnerabilidad SQL-Injection en PHP-Nuke en el foro de Sistemas de gestión de contenidos en Foros del Web. Vulnerabilidad SQL-Injection en PHP-Nuke Fecha: 11/09/03 Principales módulos afectados: Downloads, Web_Links Archivos sensibles: mainfile.php, admin.php, auth.php Parche por: Miguel de la Hoz - IberNuke.org y ...
  #1 (permalink)  
Antiguo 17/10/2003, 18:30
elmajaron
Invitado
 
Mensajes: n/a
Puntos:
Grave Vulnerabilidad SQL-Injection en PHP-Nuke

Vulnerabilidad SQL-Injection en PHP-Nuke
Fecha: 11/09/03
Principales módulos afectados: Downloads, Web_Links
Archivos sensibles: mainfile.php, admin.php, auth.php
Parche por: Miguel de la Hoz - IberNuke.org y Spacebom - DesarrolloNuke.org
Versiones afectadas: 5.6, 6.x


Este Bug está basado en la inyección de código SQL haciendo uso de las vulnerabilidades de los módulos Downloads y Web_Links. Para ello el atacante introduce un código SQL haciendo llamadas al nuke_authors para sacar las passwords encriptadas en md5 de los administradores. Una vez obtenidos esos passwords, se codifica en dbase64 esa contraseña y se accede a la administración (por el admin.php) introduciendo la password obtenida en dbase64.

Parche:

Como primera medida a tomar, introduciremos un código en el mainfile.php obligando a pedirnos la autentificación de la cookie del admin, con esto evitaremos que el atacante pueda realizar una ataque directo desde el admin.php con las entradas numéricas.

Después, de por ejemplo la línea ob_start("ob_gzhandler"); en el mainfile.php incluir seguidamente este código:

// Fix falso login del admin por Ibernuke.org y Desarrollonuke.org
if (isset($_COOKIE['admin'])) {
$admin = $_COOKIE['admin'];
} else {
$admin = "";
}





Seguidamente pasaremos a analizar los módulos afectados directamente, tanto el downloads como el web_links permiten que se introduzcan valores numéricos a través de ciertas variables "abiertas", para ello en el index.php de estos dos módulos introduciremos después de los primeros includes las siguientes líneas:

//Security fix by IBerNuke & DesarrolloNuke
if(isset($cid)) $cid = $cid*1;
if(isset($parentid)) $parentid = $parentid*1;
if(isset($lid)) $lid = $lid*1;
if(isset($ratinglid)) $ratinglid = $ratinglid*1;
if(isset($rating)) $rating = intval($rating)*1;
if(isset($ratinguser)) $ratinguser = addslashes(trim($ratinguser));



La explicación de esto, la tomamos de manos de Miguel de la Hoz (Ibernuke&Desarrollonuke):


Si a una variable con un valor numérico la multiplicamos por un número, simplemente nos da el resultado (en este caso lo hacemos por 1, asi que el valor no se altera), pero si esa variable contiene una cadena (que es como realizan el ataque) pueden pasar dos cosas:

- Si el primer caracter de la cadena es un numero (en los casos que hemos estado viendo desde los logs asi lo han hecho), la multiplicación se aplica a ese valor numérico y se elimina el resto del contenido texto de la variable, con lo que el módulo funciona perfectamente

- En el caso de que el primer caracter del valor no sea un número, se elimina todo el contenido de la variable y pasa a tener un tipo INT (numérico entero) debido a la mutiplicación, pero con un valor vacío.

En el otro caso de la variable $ratinguser, simplemente le pasamos un TRIM para eliminar espacios innecesarios y despues un ADDSLASHES que limpiará cualquier comilla y se cargará practicamente cualquier intento de ataque ya que necesitan meter comillas en casi todos los casos para pasar los valores de las variables a hackear.

Resumiendo un poco, asi impedimos, o ponemos las cosas más dificiles cuando se trate de realizar una consulta con un UNION e introducir el SQL quedaría acceso a los datos de la Base de Datos.

noticia sacada de http://www.desarrollonuke.org un saludo


__________________
  #2 (permalink)  
Antiguo 17/10/2003, 20:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129


Otra vez con lo mismo .. "SQL inyection" .. Casi todas las versiones de PHP-Nuke han fallado en lo mismo!!. Y siguen haciendolo ..

Un saludo,
  #3 (permalink)  
Antiguo 05/04/2008, 00:53
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Re: Grave Vulnerabilidad SQL-Injection en PHP-Nuke

usa esta funcion para todas las variables externas $_GET $_POST $_COOKIE etc...

Código PHP:

if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

ejemplo de llamando a la funcion:

Código PHP:
$variable=GetSQLValueString($_GET['Id'],"int"); 
  #4 (permalink)  
Antiguo 05/04/2008, 22:38
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Grave Vulnerabilidad SQL-Injection en PHP-Nuke

oye porque publicas esto, solo de das mala fama a la nueva version de phpnuke esa vulnerabilidad es de la verision 6.x y ya van en la 8.1 :S
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:08.