Quiver
How It Works
Quiver is a Flask/SocketIO web application for managing penetration testing hardware devices. It provides a centralized interface for configuring, connecting to, and operating the physical tools used in hardware and wireless assessments — from Hak5 devices and Proxmark RFID readers to serial-attached microcontrollers and WiFi Duck keystroke injectors.
Each device registered in Quiver is assigned a shell type that determines how the operator interacts with it. SSH shells use paramiko for network-attached devices like Hak5 gear or Raspberry Pi drop devices. Serial shells use pyserial for REPL/VCP console connections to microcontrollers and embedded devices. Process shells spawn PTY subprocesses for tools like Proxmark3 (pm3), RfCat (rfcat -r), GreatFET (gf shell), or J-Link (JLinkExe). WebSocket shells relay to devices like WiFi Duck that expose a ws:// endpoint. Devices that only support libusb (no interactive CLI) are marked as none shell type.
The browser-based interface provides interactive terminals for each device via Socket.IO, with real-time input/output streaming. Operators can open multiple device terminals simultaneously, manage device inventories (IPs, credentials, connection parameters), and deploy payloads to supported devices. Quiver mirrors the Gauntlet UI theme system for visual consistency across the toolkit's web applications.
Quiver stores device configurations locally and provides payload management — operators can browse, edit, and push payload scripts to devices that support them (e.g., Hak5 Rubber Ducky payloads, WiFi Duck scripts, Proxmark Lua scripts).
Security
Quiver uses the shared _auth.py authentication module. On first launch, credentials are initialized via _auth.init_auth(). All sessions are protected with secure, HTTP-only, SameSite=Lax cookies with a 30-minute expiration. Security headers (Cache-Control, Pragma, Expires for HTML responses) are applied via _auth.apply_security_headers().
Device credentials (SSH passwords, serial parameters) are stored locally in Quiver's configuration. The application is designed to run on the operator's workstation — it should not be exposed to untrusted networks. WebSocket connections for device terminals are authenticated through the Flask session.
Features
Connectivity
Device Management
Interactive Terminals
Payload Management
UI
Use Cases
Hardware Assessment Device Orchestration
During a hardware penetration test, the operator manages all connected assessment tools (Proxmark3, logic analyzer, Bus Pirate, JTAG debugger) from a single browser interface, switching between device terminals without physically reconnecting.
Wireless Device Management
For wireless assessments involving multiple Hak5 devices (WiFi Pineapple, Packet Squirrel, Shark Jack), the operator registers each device's IP and SSH credentials in Quiver and opens simultaneous terminal sessions.
Payload Development and Deployment
An operator develops Rubber Ducky payloads in Quiver's payload editor, tests them iteratively by pushing to the connected device, and maintains a library of engagement-specific scripts.
Serial Device Interaction
When testing embedded systems with UART debug ports, the operator connects via serial shell to interact with the device's bootloader or debug console directly from the browser.
CLI Reference
Command Examples
Start Quiver
Launch the Hak5 device management dashboard.
Custom Port
Run on an alternate port.
Third-Party Tool Invocations
Commands and flags used when this tool invokes third-party dependencies during operation.
Invocation Methods
| Method | Usage |
|---|---|
| CLI — Direct |
cd /opt/pr0t31n/Quiver && python3 app.py
Run directly with command-line arguments. |
| Web UI |
https://localhost:5200
Flask web interface — start the app then open in browser. |
Integration
Used By
- Nexus (health check)
Third-Party Dependencies & Credits
| Tool / Library | Developer | Type | Link |
|---|---|---|---|
| Flask | Pallets / Armin Ronacher | python | https://github.com/pallets/flask |
| Flask-SocketIO | Miguel Grinberg | python | https://github.com/miguelgrinberg/Flask-SocketIO |
| paramiko | Jeff Forcier | python | https://github.com/paramiko/paramiko |
| pyserial | Chris Liechti | python | https://github.com/pyserial/pyserial |
| esptool | Espressif Systems | python | https://github.com/espressif/esptool |
| pyflipper | Flipper Devices community | python | https://github.com/wh00hw/pyFlipper |
| pyhackrf | dressel / HackRF community | python | https://github.com/dressel/pyhackrf |
| scapy | Philippe Biondi / SecDev | python | https://github.com/secdev/scapy |
| Cynthion / LUNA | Great Scott Gadgets | python | https://github.com/greatscottgadgets/cynthion |
| FaceDancer | Great Scott Gadgets | python | https://github.com/greatscottgadgets/facedancer |
| GreatFET | Great Scott Gadgets | python | https://github.com/greatscottgadgets/greatfet |
| pyocd | pyOCD contributors / Chris Reed | python | https://github.com/pyocd/pyOCD |
Metadata
| Name | Quiver |
| Category | Utility |
| Version | 1.27.3 |
| Install Path | /opt/pr0t31n/Quiver |
| Main File | app.py |
| Port | 5200 |
| GitHub | https://github.com/pr0t31n/Quiver.git |