BlackBackup – Een BashBunny Payload
Een tijdje terug hebben we snel even naar de mogelijkheden van de BashBunny gekeken in de “Hak5 BashBunny First Look” post. Nu gaan we een payload maken!
Ondertussen heb ik al heel wat uurtjes met de BashBunny mogen spelen en eerlijk is eerlijk, ik blijf het een fantastisch apparaat vinden. De BunnyScript taal (in de basis Bash), de attack vectors en de casing maken deze tool tot een van de betere USB pentesting tools. De mogelijkheden zijn eindeloos. De mooiste optie is de ETHERNET aanval. Helaas is dit ook de optie die me het meeste problemen geeft. Switch 1 werkt soms beter dan Switch 2 en op sommige computers werken de ethernet aanvallen niet omdat de netwerkkaart nooit online komt waardoor scripts blijven loopen.
Dus voor mijn eigen gemak snel (en samen met JWHEUVER) een BashBunny HID + STORAGE payload gemaakt om allerlei handige informatie van de computer te “back-uppen”.
Deze payload heet “BlackBackup” en bestaat uit 2 bestanden. Een BashBunny Payload file die een HID en STORAGE aanval initieert en een Windows PowerShell script. Dit is dus Windows-only aanval. De payload roept een administrator PowerShell op waarna het PowerShell script de aanval uitvoert.
Als je deze post leest dan kan het zijn dat de BlackBackup payload alweer verbeterd en veranderd is. Download de nieuwste bestanden onderaan deze post of op de BashBunny GitHub repository.
Snel informatie, register dumps en wachtwoorden achterhalen van een computer… laten we starten met de BlackBackup payload.
De Payload
De payload is het kleinste gedeelte. We gebruiken de Payload alleen om de HID (human interface device) aanval te starten waarna het script de computer via computeraanslagen kan overnemen (alsof het een toetsenbord is) en om een STORAGE aanval te starten waarna de BashBunny beschikbaar wordt als opslagapparaat. Vervolgens gaan we een administrator command prompt starten waar vanuit we een administrative PowerShell starten. In dit PowerShell proces voeren we de werkelijke “back-up” uit.
De gehele payload ziet er als volgt uit:
# Title: BlackBackup # Author: JBaselier & JWHeuver # Version: 1.0 # # Runs PowerShell script to get Wlan and logon credentials # from computer and save them on USB drive (Storage attack) # # Purple.............Loading # Green .............Execute Credential Ripper PowerShell # Off...................Finished # #!/bin/bash # OPTIONS - More options available in the PowerShell payload OBFUSCATECMD="N" # Y=yes or N=no # Source bunny_helpers.sh to get environment variable and switch_positions source bunny_helpers.sh #----------------------------------- # Purple LED - initializing LED R B 0 # Attackmode HID / Storage ATTACKMODE HID STORAGE #----------------------------------- # Green LED - executing credential_PowerShell LED G 0 QUACK GUI r QUACK DELAY 300 QUACK STRING PowerShell Start-Process CMD -Verb runAs QUACK ENTER QUACK DELAY 4000 QUACK ALT y QUACK ALT j QUACK ENTER QUACK DELAY 1000 # Obfuscate CMD? if [ $OBFUSCATECMD == "Y" ]; then QUACK STRING mode con:cols=20 lines=1 QUACK ENTER QUACK DELAY 100 QUACK STRING color FE QUACK ENTER QUACK DELAY 100 fi # Execute Attack QUACK STRING PowerShell -windowstyle hidden -ExecutionPolicy Bypass ".((gwmi win32_volume -f 'label=''BashBunny''').Name+'payloads\\$SWITCH_POSITION\credentials.ps1')" QUACK ENTER QUACK DELAY 1000 QUACK STRING exit QUACK ENTER #----------------------------------- # Kill the lights - finished LED 0 |
Het begin van het script starten we met de algemene informatie zoals de credits, titel, omschrijving en wat de kleuren van de BashBunny lampjes betekenen.
Vervolgens komt de “optie” sectie waarin we bepaalde opties aan of uit zetten. Dit script kent 1 optie en dat is de “OBFUSCATECMD” optie. Wanneer deze is ingesteld op “Y” zal het venster van de CMD prompt die we later in het script oproepen verkleind en onopvallend gekleurd worden.
Dus deze variabele:
OBFUSCATECMD="N" # Y=yes or N=no |
Heeft invloed op:
if [ $OBFUSCATECMD == "Y" ]; then QUACK STRING mode con:cols=20 lines=1 QUACK ENTER QUACK DELAY 100 QUACK STRING color FE QUACK ENTER QUACK DELAY 100 fi |
Dit werkt omdat we de kracht van Bash kunnen gebruiken in de BashBunny payloads waardoor het maken van “IF” loops mogelijk wordt.
Vervolgens laden we de bunny_helpers.sh waarmee we meer opties krijgen in de payload zoals extra variabelen als $SWITCH_POSITION waarmee het mogelijk wordt om de huidige switch positie van de BashBunny te detecteren zodat we bestanden kunnen laden van (of opslaan op) de juiste locatie op de bashBunny.
source bunny_helpers.sh |
Dan selecteren we de gewenste attackvectors, dus HID en STORAGE:
ATTACKMODE HID STORAGE |
En dan roepen we een administrative command prompt op met de volgende (Rubber Ducky) HID commando’s:
QUACK GUI r QUACK DELAY 300 QUACK STRING PowerShell Start-Process CMD -Verb runAs QUACK ENTER QUACK DELAY 4000 QUACK ALT y QUACK ALT j QUACK ENTER QUACK DELAY 1000 |
QUACK zouden we ook simpelweg kunnen vervangen voor “Q”. Wat volgt is de CMD OBFUSCATION als we de optie geselecteerd hebben. Default zet ik deze echter op nee omdat de tijd die het kost om het scherm te maskeren langer duurt en dus meer aandacht trekt dan het simpele commando dat we hierin uitvoeren alvorens we het venster weer sluiten.
Tenslotte voeren we de volgende code uit:
QUACK STRING PowerShell -windowstyle hidden -ExecutionPolicy Bypass ".((gwmi win32_volume -f 'label=''BashBunny''').Name+'payloads\\$SWITCH_POSITION\credentials.ps1')" QUACK ENTER QUACK DELAY 1000 QUACK STRING exit QUACK ENTER |
Hierbij wordt de volgende string getyped in de administrative CMD prompt waardoor het PowerShell bestand op de BashBunny wordt uitgevoerd in een administrative PowerShell:
PowerShell -windowstyle hidden -ExecutionPolicy Bypass ".((gwmi win32_volume -f 'label=''BashBunny''').Name+'payloads\\$SWITCH_POSITION\credentials.ps1')" |
“-windowstyle hidden” zorgt ervoor dat de PowerShell verborgen (op de achtergrond wordt uitgevoerd) en “-ExecutionPolicy Bypass” zorgt ervoor dat we scripts kunnen uitvoeren in PowerShell. Deze optie roepen we (voor de zekerheid) in het PowerShell script nogmaals aan (op een andere manier).
Vervolgens wordt het “exit” commando getypt waarna de zichtbare CMD prompt zich sluit. Tenslotte worden alle lampjes uitgeschakeld. Dit is een groot nadeel van het script. Omdat de BashBunny payload gewoon doorgaat (terwijl op de achtergrond het PowerShell script wordt uitgevoerd) gaan de lampjes uit wanner de BashBunny payload klaar is. Het script draait echter (afhankelijk van de gekozen opties in het script) veel langer. Wanneer de lampjes dus uitgaan is het PowerShell script niet klaar met back-uppen. Test dus uitvoerig vooraf welke opties je gaat gebruiken en hoe lang deze duren. Zo weet je of het na 30sec veilig is om de BashBunny te verwijderen of pas na 5 minuten.
Als iemand weet hoe we de lampjes kunnen laten branden tot het PowerShell proces gesloten is dan please let me know. Op die manier kunnen we ook de BlackBackup payload weer verbeteren!
En dan nu the real magic:
PowerShell Script
Het PowerShell script is waar de feitelijke back-ups gemaakt worden. De gehele Powershell is nogal groot om hier in te laden, dus download hier de hele Payload en bekijk de Powershell in een goede texteditor zoals Notepad++:
Alle opties staan bovenin het script. Later in het script staan (net al in de BashBunny payload) IF loops. Als we bovenin het script hebben gezegd om het backuptype uit te voeren (en de optie dus op “Y” staat) dan zal de code in de loop worden uitgevoerd. Zo niet dan wordt deze overgeslagen.
Het script begint weer met de credentials. Vervolgens wordt de volgende regel uitgevoerd om er zeker van te zijn dat we binnen PowerShell het recht hebben om scripts uit te voeren:
powerShell set-executionpolicy remotesigned |
Daarna noteren we de algemene script variabelen. Deze variabelen registreren de hostnaam, datum en tijd en wat er moet gebeuren als ere en fout optreed (SilentlyContinue). Vervolgens maken we de “$timeformat” variabele aan welke een combinatie is van de datum + tijd + hostnaam.
$ErrorActionPreference = "SilentlyContinue" $timeformat = Get-Date -Format yyyyMMddHHmmss $hostname = $env:computername $filetimestamp = $hostname+'_'+$timeformat |
Vervolgens komt het belangrijkste stuk van het script en dat is het onderdeel waarin je zelf de payl… backup gaat samenstellen. We hebben verschillende opties, waaronder:
-
SYSTEMINFO
Maakt een bestand aan met diverse systeem gegevens zoals hostnaam, OS, BIOS, drive informatie, proces informatie, geïnstalleerde software, windows serial key, office serial key etc. -
SYSTEMINFO
Maakt een bestand aan met diverse systeemgegevens zoals hostnaam, OS, BIOS, drive informatie, proces informatie, geinstalleerde software, windows serial key, office serial key etc. -
WIFIDUMPKEYS
Dumpt alle bekende WiFi wachtwoorden (en netwerken) naar een bestand -
MIMIKATZDUMP
Laad MimiKatz in het geheugen en zorgt voor een clear-tekst wachtwoordenbestand van wachtwoorden die aanwezig zijn in het systeemgeheugen. -
LSASSDUMP
Dumpt je systeemgeheugen naar een *.dmp bestand welke later met tools als MimiKatz te analyseren is. -
TAKESCREENSHOT
Maakt een screenshot van je primaire monitor -
BACKUPREGISTRY
De mogelijkheid om een backup van je register te maken. Je kunt ook specifieke register hives backuppen. -
BACKUPSAMSYSTEM
Maak een backup van de actieve SYSTEM en SAM of NTDS.dit databases. -
PASSWORDVAULTDUMP
Slaat alle wachtwoorden (indien mogelijk in clear-text) op vanuit je Windows Password Vault. -
FILECOPY
Het kopiëren van gebruikersbestanden -
CLEARTRACKS
Nadat het script is uitgevoerd zal de “CLEARTRACKS” regel ervoor zorgen dat de “RUN” regel leeggemaakt wordt zodat men niet kan zien wat hier is ingevoerd om het script te starten.
Bij de SYSTEMINFO back-up kun je ervoor kiezen om niet op te nemen welke software packages er geïnstalleerd zijn. Dit kan lang duren (+/- 25 sec) en kan dus overgeslagen worden door de EXCLUDEINSTALLEDSOFTWARE variabele op “Y” te zetten.
Als je het register wilt back-uppen zet je de BACKUPREGISTRY op “Y” vervolgens moet je nog kiezen welke hives je wilt back-uppen. Voor het hele register selecteer je alle hives. Bij default staat alleen de HKEY_CURRENT_USER hive aan om geback-upped te worden.
Als je wilt dat er specifieke bestanden gekopieerd worden dan zet je de FILECOPY variabele op “Y”. Vervolgens kun je kiezen welke directories je mee wilt nemen (let op, hoe meer er geback-upped wordt des te langer het duurt alvorens het gehele script doorlopen is). Je hebt de keuzes uit de volgende directories:
- Desktop van de huidige gebruiker
- Documenten folder van de huidige gebruiker
- Downloads folder van de huidige gebruiker (let op, de downloadsfolder bevindt zich in de “mijn documenten” folder. Deze optie hoeft dus niet aangevinkt te worden als bovenstaande optie ook aanstaat).
- Images folder van de huidige gebruiker
- Favorieten folder van de huidige gebruiker
- Alle complete profielen van alle gebruikers
- De C:\TEMP en C:\WINDOWS\TEMP folders
Tenslotte kun je er nog voor kiezen om alleen uit deze folders bepaalde bestanden te kopiëren (b.v. *.PDF bestanden). In dat geval kun je dit aangeven in de $EXTENSION variabele. Wil je gewoon alle bestanden kopiëren dan zet je deze variabele op “*”.
Achter elke optie staat vermeld hoe lang de kopieerslag ongeveer duurt en hoe hoog de kans is dat de virusscanner je back-up actie niet zo leuk vindt. Choose your picks…
Voor de gebruiker houdt het aanpassen van het script hier op. Wat volgt is het aanmaken van de “loot” (back-up) directory op de BashBunny (of waar je dit script ook uitvoert). Dit gebeurt middels de regel:
New-Item -ItemType directory -Force -Path $PSScriptRoot\loot\$filetimestamp $LootDir = "$PSScriptRoot\loot\$filetimestamp" |
En daarna volgen alle “IF” loops met payloads welke je zelf zojuist in- of uit hebt geschakeld.
Zoals al gezegd is het mooie aan dit PowerShell script dat het ook gebruikt kan worden vanuit willekeurige andere devices of folders om backups te maken. Dit script is volledig generiek met variabelen opgebouwd zodat het niet afhankelijk is van de BashBunny. De BashBunny payload zorgt er alleen voor dat het allemaal automatisch wordt gedaan zodra de BashBunny in een Windows computer gestopt wordt.
Verbeter mee
Help mee om BlackBackup nog beter te maken! Heb jij verbeteringen of aanvullingen of het script plaats deze dan in de reactie hieronder of stuur me een e-mail via het contactformulier. Ik zal de aanvulling zorgvuldig bekijken en toevoegen aan het script. Uiteraard ontvang je altijd bericht terug!
Download hier de meest recente versie van het BashBunny BlackBackup script!
Want hoe beter de back-up, des te veiliger de data. Toch 🙂 ?