diff --git a/README.md b/README.md index 5857750..9a84fed 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,27 @@ -# RubberNugget USB Attack Tool -The RubberNugget is a USB attack tool that lets you hack computers in seconds with keystroke injection! +# RubberNugget: USB Attack Platform +A versatile USB attack platform that lets you hack computers in seconds using a [WiFi Nugget](https://wifinugget.com)! +More documentation coming soon. -### Beta v1.0 Feature List -- [x] Directory Traversal -- [x] Defaults / Checks -- [x] File IO -- [x] DuckyScript Parsing -- [x] Web Access +## Creating Payloads +To upload a payload, you can save a `.txt` file to the RubberNugget flash drive. Payloads must be saved under an operating system, then category type. (OS->Category->Payload.txt) -### Priority Features v1.0 release -- [x] Single level navigation -- [x] Responsive Web UI -- [x] Web close button -- [x] duckyscript min delay -- [x] file name truncation -- [x] update graphics - arrow indicators, nugget +## Accessing the Web Interface +To access the web interface, connect to the `RubberNugget` AP with the password `password`. In a web browser, navigate to `192.168.4.1` to access the payload deployment system. At the moment, the web interface can only edit / run payloads. -### Future Features -- [ ] DuckyScript Aliasing -- [ ] Proper FS mounting / USB -- [ ] Overhaul / Implement OOP Graphic Library -- [ ] Scrolling full file path -- [ ] Web portal password config -- [ ] Graphic differentiation - files vs folders -- [ ] Edit web files from file system +## Current Features - v1.0 (beta) -## Bugs -### Critical -- [x] File names collide w/ Nugget graphic -- [x] Recursive payload selection w/ no exit clause -- [x] Responsive web interface -- [x] Can't access web UI after running payload -- [x] web UI shows doesn't subfolder files - follows OS/Type paradigm -- [x] crash after exit payload / clear screen delaying - -### Meh / Edge Cases -- [ ] Folders named `*txt` trigger payloadRun -- [ ] Files named `BACK` trigger backwards navigation -- [ ] Files parsed as folder for extensions that arent `.txt` -- [ ] Shouldn't run empty files -- [ ] Keypress debouncing / key features -- [ ] Proper input sanitation for filepaths -- [ ] Can't rename files / folders +- DuckyScript Compatible + - Basic syntax: `STRING`, `DELAY`, keypress combos + - Basic colors: `R` `G` `B` `C` `Y` `M` `W` +- Web Interface + - Deploy Payloads + - Edit Payloads +- USB Flash Drive + - FAT filesystem + - Create default OS folders + - Follows Hak5 naming convention (OS->Category->Payload) +- Nugget Interface + - Custom graphics + - Live command preview + - Deploy payloads in 3 clicks + - Reactive RGB NeoPixel \ No newline at end of file diff --git a/RubberNugget/RubberNugget.ino b/RubberNugget/RubberNugget.ino index f1bf0c5..5c10058 100644 --- a/RubberNugget/RubberNugget.ino +++ b/RubberNugget/RubberNugget.ino @@ -56,25 +56,25 @@ void javascript() { void websave() { String path = (server.arg("path")); String content = (server.arg("content")); - content.replace(" ","/"); + content.replace(" ", "/"); char tab2[100]; strcpy(tab2, path.c_str()); - char tab3[content.length()+1]; + char tab3[content.length() + 1]; strcpy(tab3, content.c_str()); uint8_t raw[BASE64::decodeLength(tab3)]; BASE64::decode(tab3, raw); - FRESULT fr; - FIL file; + FRESULT fr; + FIL file; uint16_t size; UINT bytesRead; - + fr = f_open(&file, tab2, FA_WRITE | FA_CREATE_ALWAYS); if (fr == FR_OK) { - Serial.println("opened: "+path); + Serial.println("opened: " + path); UINT written = 0; fr = f_write(&file, (char*) raw, BASE64::decodeLength(tab3), &written); Serial.println(fr); @@ -156,13 +156,13 @@ void webrun() { char tab2[100]; strcpy(tab2, path.c_str()); - RubberNugget::runPayload(tab2,1); // provide parameter triggered from webpage + RubberNugget::runPayload(tab2, 1); // provide parameter triggered from webpage } void setup() { pinMode(12, OUTPUT); delay(500); - + Serial.println(115200); WiFi.softAP(ssid, password); @@ -184,10 +184,10 @@ void setup() { server.on("/runpayload.php", HTTP_GET, webrun); server.begin(); - + strip.begin(); strip.clear(); strip.show(); - strip.setPixelColor(0, strip.Color(0,0, 0)); strip.show(); - + strip.setPixelColor(0, strip.Color(0, 0, 0)); strip.show(); + strip.setBrightness(100); payloadSelector.addNav(RubberNugget::selectPayload); @@ -202,8 +202,7 @@ void setup() { } void loop() { -// RubberNugget::selectPayload("/"); -// payloadSelector.autoUpdateDisplay(); + return; } void webserverInit(void *p) { diff --git a/RubberNugget/RubberNugget.ino.esp32s2.bin b/RubberNugget/RubberNugget.ino.esp32s2.bin new file mode 100644 index 0000000..3318786 Binary files /dev/null and b/RubberNugget/RubberNugget.ino.esp32s2.bin differ diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..659c740 --- /dev/null +++ b/changelog.md @@ -0,0 +1,46 @@ +# RubberNugget USB Attack Tool +The RubberNugget is a USB attack tool that lets you hack computers in seconds with keystroke injection! + +## Features + +### Beta v1.0 Feature List +- [x] Directory Traversal +- [x] Defaults / Checks +- [x] File IO +- [x] DuckyScript Parsing +- [x] Web Access + +### Priority Features v1.0 release +- [x] Single level navigation +- [x] Responsive Web UI +- [x] Web close button +- [x] duckyscript min delay +- [x] file name truncation +- [x] update graphics - arrow indicators, nugget + +### Future Features +- [ ] DuckyScript Aliasing +- [ ] Proper FS mounting / USB +- [ ] Overhaul / Implement OOP Graphic Library +- [ ] Scrolling full file path +- [ ] Web portal password config +- [ ] Graphic differentiation - files vs folders +- [ ] Edit web files from file system + +## Bugs +### Critical +- [x] File names collide w/ Nugget graphic +- [x] Recursive payload selection w/ no exit clause +- [x] Responsive web interface +- [x] Can't access web UI after running payload +- [x] web UI shows doesn't subfolder files - follows OS/Type paradigm +- [x] crash after exit payload / clear screen delaying + +### Meh / Edge Cases +- [ ] Folders named `*txt` trigger payloadRun +- [ ] Files named `BACK` trigger backwards navigation +- [ ] Files parsed as folder for extensions that arent `.txt` +- [ ] Shouldn't run empty files +- [ ] Keypress debouncing / key features +- [ ] Proper input sanitation for filepaths +- [ ] Can't rename files / folders diff --git a/v1.0-beta-RubberNugget.bin b/v1.0-beta-RubberNugget.bin new file mode 100644 index 0000000..42f8bc3 Binary files /dev/null and b/v1.0-beta-RubberNugget.bin differ diff --git a/web/create.html b/web/create.html index 0027d6a..b32d7a8 100644 --- a/web/create.html +++ b/web/create.html @@ -1,120 +1,47 @@ - - - - - - - - - + + -
- - - -
+ +
-
-
-
Upload Payloads
-
-
-
-
- uploadSelect File - -
-
- -
-
-
-
+ -
-
- -
- create - - -
- -
- info - - -
- -
- computer - - -
- -
- code - - -
- -
+
+
+

Create a payload

+
+ +
- flash_onRun - Live - saveSave + - +
+

Copyright 2022, HakCat Hardware

+

Beta v1.0

- - - \ No newline at end of file diff --git a/web/run.html b/web/run.html index 4200866..091bfca 100644 --- a/web/run.html +++ b/web/run.html @@ -15,7 +15,7 @@ diff --git a/web/style.css b/web/style.css index 9cf35aa..f0f1e6c 100644 --- a/web/style.css +++ b/web/style.css @@ -117,4 +117,12 @@ body { .container { width: 90% !important; } +} + +input { + width: 50%; + box-sizing: border-box; + padding: 0; + margin: 0; + } \ No newline at end of file