Code Monkey home page Code Monkey logo

dns-driveby's Introduction

What is DNS DriveBy?

DNS-Driveby is a $10 tracker that uses Open Wi-Fi networks for telemetry & reconaissance, instead of a SIM card. It logs GPS coordinates & other data to its internal memory, scans for un-authenticated Wi-Fi networks, and uses DNS Exfiltration through DNS CanaryTokens to bypass captive portals! Read about how I created it on Hackster!

Resources

  • Stealthy GPS Tracking Using Open Wi-Fi - Hackster
  • Using DNS DriveBy as a GPS Tracker - Hak5

Build Instructions

Assembly Guide

Changelog v1.2

  • MicroSD Card Support
  • JST Switch connector?
  • Route LiPo under board
  • SH1106 / SSD1306 Add-On

To-Do

  • Fix GPS Traces

  • Larger Resistor Footprint

  • Improved BMS

  • Screen Support

  • Build Custom Binary

  • OTA Update via Web Interface

Documented Issues (Note to Self / Future Docs)

  • Arduino-CLI VSCode Plugin doesn't support SPIFFS build

dns-driveby's People

Contributors

alexlynd avatar lukeswitz avatar r3dfish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dns-driveby's Issues

Implement basic web interface for IDE-less setup

Implementing a web interface with WiFiManager or something similar would make it easier to get the project set up / change variables without needing to recompile etc

  • CanaryTokens configuration
  • Pin selection
  • GPS / WiFi status

Make file has a large error in the middle and DNS driveby device doesn't appear to be working

Make file doesn't seem to be compiling properly. There is a large error in the middle of it. I've removed the first line because that's where my canary token was.

/dev/ttyUSB0
docker build . --file Dockerfile --tag dnsdriveby
Sending build context to Docker daemon  6.028MB
Step 1/13 : FROM debian:buster
 ---> 1df4474660a1
Step 2/13 : WORKDIR /app
 ---> Using cache
 ---> 3af0c3010f0f
Step 3/13 : RUN apt-get update && apt-get install -y     wget     zip     bsdmainutils     xz-utils     python3 python3-pip
 ---> Using cache
 ---> f7580d533307
Step 4/13 : RUN pip3 install pyserial esptool
 ---> Using cache
 ---> 368dbff43fa9
Step 5/13 : ARG ARDUINO_CLI_VERSION=0.22.0
 ---> Using cache
 ---> cefe3101a8a5
Step 6/13 : RUN wget https://github.com/arduino/arduino-cli/releases/download/${ARDUINO_CLI_VERSION}/arduino-cli_${ARDUINO_CLI_VERSION}_Linux_64bit.tar.gz
 ---> Using cache
 ---> 5e428f1e8f7c
Step 7/13 : RUN tar -xf arduino-cli_${ARDUINO_CLI_VERSION}_Linux_64bit.tar.gz
 ---> Using cache
 ---> 9a8a94be1593
Step 8/13 : COPY arduino-cli.yaml .
 ---> Using cache
 ---> ac22cffd6da0
Step 9/13 : RUN ./arduino-cli core update-index --config-file arduino-cli.yaml
 ---> Using cache
 ---> 9dadae9f6389
Step 10/13 : RUN ./arduino-cli core install esp8266:esp8266
 ---> Using cache
 ---> 9bee0dacb8a9
Step 11/13 : RUN ./arduino-cli lib install     "ESP8266 and ESP32 OLED driver for SSD1306 displays"     "Adafruit NeoPixel"     "TinyGPSPlus"
 ---> Using cache
 ---> 86081f71a674
Step 12/13 : COPY Demo ./Demo
 ---> Using cache
 ---> a2349dab70b3
Step 13/13 : RUN ./arduino-cli compile -b esp8266:esp8266:d1_mini Demo
 ---> Running in 7c24961c92c5
In file included from /app/Demo/Demo.ino:4:
/app/Demo/Scan.h: In function 'uint8_t initGPS()':                                                                                        
/app/Demo/Scan.h:46:20: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   46 |         drawMockup("...","...",0,0,0,0,"Waiting for GPS ...");                                                                    
      |                    ^~~~~                                                                                                          
/app/Demo/Scan.h:46:26: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   46 |         drawMockup("...","...",0,0,0,0,"Waiting for GPS ...");                                                                    
      |                          ^~~~~                                                                                                    
/app/Demo/Scan.h:46:40: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   46 |         drawMockup("...","...",0,0,0,0,"Waiting for GPS ...");                                                                    
      |                                        ^~~~~~~~~~~~~~~~~~~~~                                                                      
In file included from /app/Demo/Demo.ino:4:                                                                                               
/app/Demo/Scan.h:66:59: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   66 |         drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"GPS SUCCESS");                                                         
      |                                                           ^~~~~~~~~~~~~                                                           
/app/Demo/Scan.h:69:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   69 |     drawMockup("...","...",0,0,0,0,"GPS NOT DETECTED");                                                                           
      |                ^~~~~                                                                                                              
/app/Demo/Scan.h:69:22: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   69 |     drawMockup("...","...",0,0,0,0,"GPS NOT DETECTED");                                                                           
      |                      ^~~~~                                                                                                        
/app/Demo/Scan.h:69:36: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                                
   69 |     drawMockup("...","...",0,0,0,0,"GPS NOT DETECTED");                                                                           
      |                                    ^~~~~~~~~~~~~~~~~~                                                                             
/app/Demo/Scan.h: In function 'bool connectToOpen()':                                                                                     
/app/Demo/Scan.h:165:59: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  165 |         drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"No open nets found :(");                                               
      |                                                           ^~~~~~~~~~~~~~~~~~~~~~~                                                 
/app/Demo/Scan.h:170:64: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  170 |         drawMockup(currentGPS,currTime,sats,nets,reqs,openNets,"Open nets found!");                                               
      |                                                                ^~~~~~~~~~~~~~~~~~                                                 
/app/Demo/Scan.h:182:64: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  182 |         drawMockup(currentGPS,currTime,sats,nets,reqs,openNets,"Attemping to connect...");                                        
      |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~                                          
/app/Demo/Scan.h:193:76: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  193 |                     drawMockup(currentGPS,currTime,sats,nets,reqs,openNets,"Failed to connect :(");                               
      |                                                                            ^~~~~~~~~~~~~~~~~~~~~~                                 
/app/Demo/Scan.h:214:76: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  214 |                     drawMockup(currentGPS,currTime,sats,nets,reqs,openNets,"CONNECTED TO NET");                                   
      |                                                                            ^~~~~~~~~~~~~~~~~~                                     
/app/Demo/Scan.h:218:72: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  218 |                 drawMockup(currentGPS,currTime,sats,nets,reqs,openNets,"COULDN'T CONNECT");                                       
      |                                                                        ^~~~~~~~~~~~~~~~~~                                         
/app/Demo/Scan.h: In function 'void encodeB32()':                                                                                         
/app/Demo/Scan.h:237:55: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  237 |     drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"Making request...");                                                       
      |                                                       ^~~~~~~~~~~~~~~~~~~                                                         
/app/Demo/Scan.h: In function 'bool dnsRequest(char*, uint8_t)':                                                                          
/app/Demo/Scan.h:275:115: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                              
  275 |         if (dnsRequestSuccess) {Serial.println("[+] Success!"); drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"DNS SUCCESS");}
      |                                                                                                                   ^~~~~~~~~~~~~   
/app/Demo/Scan.h:276:117: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                              
  276 |         else                   { Serial.println("[-] Failed :("); drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"DNS FAILED :(");}                                                                                                                                      
      |                                                                                                                     ^~~~~~~~~~~~~~~                                                                                                                                         
/app/Demo/Scan.h: In function 'void makeDNSRequest()':                                                                                    
/app/Demo/Scan.h:299:63: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  299 |             drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"DNS FAILED :(");                                                   
      |                                                               ^~~~~~~~~~~~~~~                                                     
/app/Demo/Scan.h:308:59: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  308 |         drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"DNS SUCCESS");                                                         
      |                                                           ^~~~~~~~~~~~~                                                           
/app/Demo/Scan.h: In function 'char* getEncryption(uint8_t)':                                                                             
/app/Demo/Scan.h:320:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  320 |         return "WEP"; // WEP                                                                                                      
      |                ^~~~~                                                                                                              
/app/Demo/Scan.h:322:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  322 |         return "WPA"; // WPA                                                                                                      
      |                ^~~~~                                                                                                              
/app/Demo/Scan.h:324:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  324 |         return "WPA2"; // WPA2                                                                                                    
      |                ^~~~~~                                                                                                             
/app/Demo/Scan.h:326:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  326 |         return "NONE"; // NONE                                                                                                    
      |                ^~~~~~                                                                                                             
/app/Demo/Scan.h:328:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  328 |         return "AUTO"; // AUTO                                                                                                    
      |                ^~~~~~                                                                                                             
/app/Demo/Scan.h:330:10: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  330 |   return "AUTO"; // AUTO / fail case                                                                                              
      |          ^~~~~~                                                                                                                   
/app/Demo/Scan.h: In function 'void dnsDriveby()':                                                                                        
/app/Demo/Scan.h:347:55: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  347 |     drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"Scanning WiFi...");                                                        
      |                                                       ^~~~~~~~~~~~~~~~~~                                                          
/app/Demo/Scan.h:353:59: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  353 |         drawMockup(currentGPS,currTime,sats,nets,reqs,opn,"None found :(");                                                       
      |                                                           ^~~~~~~~~~~~~~~                                                         
/app/Demo/Scan.h:359:73: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]                               
  359 |         drawMockup(currentGPS,currTime,tinyGPS.satellites.value(),0,0,0,"Connecting to:");                                        
      |                                                                         ^~~~~~~~~~~~~~~~                                          
. Variables and constants in RAM (global, static), used 32756 / 80192 bytes (40%)                                                         
║   SEGMENT  BYTES    DESCRIPTION                                                                                                         
╠══ DATA     3584     initialized variables                                                                                               
╠══ RODATA   2060     constants                                                                                                           
╚══ BSS      27112    zeroed variables                                                                                                    
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 62559 / 65536 bytes (95%)                                                            
║   SEGMENT  BYTES    DESCRIPTION                                                                                                         
╠══ ICACHE   32768    reserved space for flash instruction cache                                                                          
╚══ IRAM     29791    code in IRAM                                                                                                        
. Code in flash (default, ICACHE_FLASH_ATTR), used 266432 / 1048576 bytes (25%)                                                           
║   SEGMENT  BYTES    DESCRIPTION                                                                                                         
╚══ IROM     266432   code in flash                                                                                                       
                                                                                                                                          
Removing intermediate container 7c24961c92c5
 ---> cd1ad2bf1a00
Successfully built cd1ad2bf1a00
Successfully tagged dnsdriveby:latest
docker create --name dnsdriveby-1692150741 --device=/dev/ttyUSB0 -t dnsdriveby:latest
2881b3bc5ee5ef3e654e9811f7fcdf4bf9b6c31b4a86d635b5bd989ed60e95b0
docker start dnsdriveby-1692150741
dnsdriveby-1692150741
docker exec dnsdriveby-1692150741 bash -c \
        './arduino-cli upload -b esp8266:esp8266:d1_mini --port /dev/ttyUSB0 Demo/ && sleep 2'
esptool.py v3.0
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 48:e7:29:55:7b:6d
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 306016 bytes to 221358...
Writing at 0x00000000... (7 %)
Writing at 0x00004000... (14 %)
Writing at 0x00008000... (21 %)
Writing at 0x0000c000... (28 %)
Writing at 0x00010000... (35 %)
Writing at 0x00014000... (42 %)
Writing at 0x00018000... (50 %)
Writing at 0x0001c000... (57 %)
Writing at 0x00020000... (64 %)
Writing at 0x00024000... (71 %)
Writing at 0x00028000... (78 %)
Writing at 0x0002c000... (85 %)
Writing at 0x00030000... (92 %)
Writing at 0x00034000... (100 %)
Wrote 306016 bytes (221358 compressed) at 0x00000000 in 5.2 seconds (effective 474.4 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

docker rm --force dnsdriveby-1692150741
dnsdriveby-1692150741

Other than this error, everything else seems to compile and load onto the DNS driveby without error.

I tried running the DNS driveby on my drive to work (plenty of open wifi networks on the way) after compiling and I didn't receive anything. I was powering it via USB-C and I could see the blue light flashing, but I'm not sure how to access the logs so I don't have any other way to diagnose what the error is.

Happy to do further troubleshooting with some guidance!

Implement basic PoC

Current codebase is convoluted and too specific for my application. Should aim to build a simple poc that demonstrates core functionality of the project but acts otherwise as a wardriver. (Silo DNS-Driveby code from PoC code)

  • Deep Sleep Mode Tester
  • Basic Open WiFi Network Pinger
  • RAM Based (for now)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.