
Configura il tuo Pi Zero 2W per trasformarlo in una BadUSB.
Una piattaforma di attacco BadUSB / HID programmabile basata su un Raspberry Pi Zero 2 W. Il Pi si presenta come un dispositivo USB composito (tastiera più un volume di archiviazione di massa di sola lettura opzionale) ed esegue payload in stile Ducky-Script sull'host a cui è collegato. Progettata per attività di red team autorizzate, test di penetrazione e CTF.
⚠️ Nota legale. Utilizzare solo su sistemi di propria proprietà o per i quali si dispone di esplicita autorizzazione scritta al test. L'accesso non autorizzato è illegale nella maggior parte delle giurisdizioni, e fingere di non saperlo non aiuta.
configured della UDC — nessun
payload spurio viene eseguito all'avvio.LAYOUT.IF / ELSE, WHILE, HOLD / RELEASE, INJECT_MOD,
generatori RANDOM_*, STRING_BLOCK / STRINGLN_BLOCK, DEFINE.ExecStop che smonta il gadget
in modo pulito. Nessuno stato configfs residuo, il riavvio del servizio funziona senza riavviare il sistema./dev/hidg0 — nessun nodo di dispositivo
scrivibile da tutti.+----------------+ USB cable +-------------+
| Raspberry Pi | ===================>>> | Host PC |
| Zero 2 W | (Pi emulates HID + | (target) |
| (this device) | optional drive) | |
+----------------+ +-------------+
|
| /home/pi/pi-badusb/
|
+-- badusb.service ----> monitor_and_run.py
|
| on `state == configured`:
v
run_payload.py
|
v
/dev/hidg0 (USB HID gadget)
badusb.service esegue gadget_setup.sh,
che usa configfs/libcomposite per comporre un gadget USB con una
funzione di tastiera HID e (opzionalmente) una LUN di archiviazione di massa basata su
un file immagine flat in /var/badusb/storage.img.monitor_and_run.py. Sonda
/sys/class/udc/<udc>/state e attende configured — lo
stato della specifica USB che indica che un host ha enumerato correttamente il
gadget. (Non usiamo l'esistenza di /dev/hidg0 come segnale:
tale condizione è vera nel momento in cui il gadget si lega alla UDC all'avvio,
indipendentemente dal fatto che qualcosa sia collegato.)run_payload.py,
che analizza payload.txt e scrive i report HID su /dev/hidg0.configured.| Componente | Nota |
|---|---|
| Raspberry Pi Zero 2 W | Testato sulla revisione hardware del 2026-05. Anche il vecchio Pi Zero W con il driver BCM2835 dwc_otg funziona in linea di principio, ma questo README presuppone il 2 W con dwc2. |
| Cavo micro-USB verso USB-A | Oppure un adattatore con fattore di forma "chiavetta USB" che permette al Pi di collegarsi direttamente a una porta dell'host. |
| Opzionale: caricatore separato | Se si vuole alimentare il Pi da una sorgente non-host così che il listener possa avviarsi prima di essere collegato a un target (in caso contrario, la porta dell'host fornisce l'alimentazione). |
Il Pi Zero 2 W ha due porte micro-USB:
PWR IN — solo alimentazione, non espone le linee dati USB al blocco dwc2 OTG.USB — la porta dati OTG; è qui che ci si collega al target.| Requisito | Motivo |
|---|---|
| Raspberry Pi OS (Debian Bookworm o Trixie, Lite 64-bit consigliato) | Lo script di installazione scrive in /boot/firmware/... su Bookworm+ e ripiega su /boot/... nelle immagini più vecchie. |
| Python 3 | Incluso con Pi OS. |
mkfs.vfat | Per formattare l'immagine di supporto dell'archiviazione di massa al primo avvio. Da saltare se si disabilita l'archiviazione di massa. |
| Accesso root per l'installazione | Modifica systemd, udev e /boot/firmware/config.txt. |
Clona o copia il repository nel Pi, quindi esegui l'installer:
git clone http://your-gitea/admin/Pi-Zero-2W-Bad-USB.git /home/pi/pi-badusb
cd /home/pi/pi-badusb
sudo ./install.sh
sudo reboot
Dopo il riavvio, abilita e avvia il servizio:
sudo systemctl enable --now badusb.service
journalctl -u badusb -f
install.sh è idempotente — rieseguilo ogni volta che modifichi i
file del progetto. Esso:
/boot/firmware (Bookworm+) rispetto a /boot (più vecchio).dtoverlay=dwc2,dr_mode=otg sia attivo in un blocco [all]
in config.txt. Le impostazioni predefinite di Raspberry Pi Imager mettono questa riga
dentro un filtro [cm5] che non si applica al Pi Zero 2 W; l'installer
aggiunge un override contrassegnato da sentinella così che le riesecuzioni non lo
duplichino.modules-load=dwc2 sia presente in cmdline.txt.g_ether è ancora presente in cmdline.txt (ruba la
UDC a libcomposite e rompe la modalità gadget)./etc/systemd/system/badusb.service./etc/udev/rules.d/99-badusb-hidg.rules
così che /dev/hidg0 sia scrivibile dal gruppo plugdev.pi al gruppo plugdev./var/badusb/ per l'immagine di supporto dell'archiviazione di massa.# Start / stop / restart
sudo systemctl start badusb
sudo systemctl stop badusb
sudo systemctl restart badusb # safe to do while plugged in
# Watch live
journalctl -u badusb -f
# Disable autostart on boot
sudo systemctl disable badusb
# Tune timings (creates an override drop-in)
sudo systemctl edit badusb
# (paste an [Service] block with Environment="BADUSB_REARM_COOLDOWN_S=8" etc)
sudo systemctl restart badusb