From 27940e270c3b3a816984520bbb041b7831231200 Mon Sep 17 00:00:00 2001 From: arrase Date: Sun, 2 Apr 2017 20:42:35 +0200 Subject: [PATCH 1/4] Makes configuration available over USB flash disk --- hid.sh | 19 ++++++++++++++----- install.sh | 29 ++++++++++++++++++++++------- raspiducky.conf | 7 ++++++- run_payload.sh | 2 +- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/hid.sh b/hid.sh index 8f72e84..7655bbb 100644 --- a/hid.sh +++ b/hid.sh @@ -1,6 +1,6 @@ #!/bin/bash -. /etc/raspiducky/raspiducky.conf +. /home/pi/config/etc/raspiducky.conf cd /sys/kernel/config/usb_gadget/ mkdir -p g1 @@ -29,17 +29,26 @@ ln -s functions/hid.$N configs/c.$C/ # End KEYBOARD # STORAGE -if [ -e $STORAGE_FILE ] +if [ $STORAGE_MODE != "none" ] then - [ -d $STORAGE_MOUNT ] || mkdir $STORAGE_MOUNT - mount -o loop,rw -t vfat $STORAGE_FILE $STORAGE_MOUNT mkdir -p functions/mass_storage.usb0 echo 1 > functions/mass_storage.usb0/stall echo 0 > functions/mass_storage.usb0/lun.0/removable echo 0 > functions/mass_storage.usb0/lun.0/cdrom echo 0 > functions/mass_storage.usb0/lun.0/ro echo 0 > functions/mass_storage.usb0/lun.0/nofua - echo $STORAGE_FILE > functions/mass_storage.usb0/lun.0/file + + [ -d $STORAGE_MOUNT ] || mkdir $STORAGE_MOUNT + + if [ $STORAGE_MODE = "disk" ] + then + mount -o loop,rw -t vfat $STORAGE_FILE $STORAGE_MOUNT + echo $STORAGE_FILE > functions/mass_storage.usb0/lun.0/file + else + mount -o loop,rw -t vfat $STORAGE_CONFIG $STORAGE_MOUNT + echo $STORAGE_CONFIG > functions/mass_storage.usb0/lun.0/file + fi + ln -s functions/mass_storage.usb0 configs/c.$C/ fi # End STORAGE diff --git a/install.sh b/install.sh index 1f440b1..4b718e1 100644 --- a/install.sh +++ b/install.sh @@ -1,6 +1,9 @@ #!/bin/bash INSTALL_DIR=/home/pi +FLASH_DISK_SIZE=100000 # 100MB + +# EXEC FILES gcc hid-gadget-test.c -o $INSTALL_DIR/hid-gadget-test cp usleep $INSTALL_DIR/ @@ -14,8 +17,21 @@ chmod 777 $INSTALL_DIR/duckpi.sh chmod 777 $INSTALL_DIR/hid.sh chmod 777 $INSTALL_DIR/run_payload.sh -[ -d /etc/raspiducky ] || sudo mkdir /etc/raspiducky -[ -f /etc/raspiducky/raspiducky.conf ] || sudo cp raspiducky.conf /etc/raspiducky/raspiducky.conf +# APP CONFIG + +dd if=/dev/zero of=$INSTALL_DIR/.confdisk.img bs=1024 count=10000 +mkfs.vfat $INSTALL_DIR/.confdisk.img + +[ -d $INSTALL_DIR/ ] || mkdir $INSTALL_DIR/config +sudo mount $INSTALL_DIR/.confdisk.img $INSTALL_DIR/config -o loop,rw +sudo echo "$INSTALL_DIR/.confdisk.img $INSTALL_DIR/config vfat defaults 0 2" + +[ -d $INSTALL_DIR/config/etc ] || sudo mkdir $INSTALL_DIR/config/etc +[ -f $INSTALL_DIR/config/etc/raspiducky.conf ] || sudo cp raspiducky.conf $INSTALL_DIR/config/etc/raspiducky.conf +[ -d $INSTALL_DIR/config/payloads-db ] || cp -r payloads $INSTALL_DIR/config/payloads-db +[ -d $INSTALL_DIR/config/onboot_payload ] || mkdir $INSTALL_DIR/config/onboot_payload + +# BOOT CONFIG sudo echo "dtoverlay=dwc2" >> /boot/config.txt sudo echo "dwc2" >> /etc/modules @@ -23,8 +39,7 @@ sudo echo "libcomposite" >> /etc/modules cat /etc/rc.local | awk '/exit\ 0/ && c == 0 {c = 0; print "\n/home/pi/hid.sh\nsleep 3\n/home/pi/run_payload.sh\n"}; {print}' /etc/rc.local -if ! [ -e /home/pi/usbdisk.img ] -then - dd if=/dev/zero of=/home/pi/usbdisk.img bs=1024 count=10000 - mkfs.vfat /home/pi/usbdisk.img -fi +# FLASH DRIVE + +dd if=/dev/zero of=$INSTALL_DIR/.usbdisk.img bs=1024 count=$FLASH_DISK_SIZE +mkfs.vfat $INSTALL_DIR/.usbdisk.img diff --git a/raspiducky.conf b/raspiducky.conf index d171553..c3f1e8d 100644 --- a/raspiducky.conf +++ b/raspiducky.conf @@ -1,2 +1,7 @@ -STORAGE_FILE=/home/pi/usbdisk.img +# Available modes are 'config' , 'disk' or 'none' +STORAGE_MODE=config + +STORAGE_FILE=/home/pi/.usbdisk.img STORAGE_MOUNT=/media/storage + +STORAGE_CONFIG=/home/pi/.configdisk.img diff --git a/run_payload.sh b/run_payload.sh index 28b1b24..4c6aeba 100644 --- a/run_payload.sh +++ b/run_payload.sh @@ -1,6 +1,6 @@ #!/bin/bash -cat /boot/payload.dd > /home/pi/payload.dd +cat /home/pi/config/onboot_payload/payload.dd > /home/pi/payload.dd tr -d '\r' < /home/pi/payload.dd > /home/pi/payload2.dd /home/pi/duckpi.sh /home/pi/payload2.dd From f0d5f9a83e4355e7dd35450827a238f23d19edf5 Mon Sep 17 00:00:00 2001 From: arrase Date: Sun, 2 Apr 2017 20:48:35 +0200 Subject: [PATCH 2/4] Updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b0ef5f..8438087 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ A Keyboard emulator like Rubber Ducky build over Raspberry Pi Zero * Install a payload - sudo cat payloads/open_terminal/open_mint_terminal.dd payloads/backdoor/bind_shell.dd > /boot/payload.dd + sudo cat payloads/open_terminal/open_mint_terminal.dd payloads/backdoor/bind_shell.dd > /home/pi/config/onboot_payload/payload.dd ### Resources: From 2dd795781103452d47aefa7588a2d25a99051b70 Mon Sep 17 00:00:00 2001 From: arrase Date: Mon, 3 Apr 2017 00:28:34 +0200 Subject: [PATCH 3/4] Fix --- hid.sh | 4 +--- install.sh | 21 ++++++++++++--------- raspiducky.conf | 9 ++++++--- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/hid.sh b/hid.sh index 7655bbb..0a7b17d 100644 --- a/hid.sh +++ b/hid.sh @@ -38,14 +38,12 @@ then echo 0 > functions/mass_storage.usb0/lun.0/ro echo 0 > functions/mass_storage.usb0/lun.0/nofua - [ -d $STORAGE_MOUNT ] || mkdir $STORAGE_MOUNT - if [ $STORAGE_MODE = "disk" ] then + [ -d $STORAGE_MOUNT ] || mkdir $STORAGE_MOUNT mount -o loop,rw -t vfat $STORAGE_FILE $STORAGE_MOUNT echo $STORAGE_FILE > functions/mass_storage.usb0/lun.0/file else - mount -o loop,rw -t vfat $STORAGE_CONFIG $STORAGE_MOUNT echo $STORAGE_CONFIG > functions/mass_storage.usb0/lun.0/file fi diff --git a/install.sh b/install.sh index 4b718e1..6686e95 100644 --- a/install.sh +++ b/install.sh @@ -1,6 +1,8 @@ #!/bin/bash INSTALL_DIR=/home/pi +USERID=1000 +GROUPID=1000 FLASH_DISK_SIZE=100000 # 100MB # EXEC FILES @@ -22,22 +24,23 @@ chmod 777 $INSTALL_DIR/run_payload.sh dd if=/dev/zero of=$INSTALL_DIR/.confdisk.img bs=1024 count=10000 mkfs.vfat $INSTALL_DIR/.confdisk.img -[ -d $INSTALL_DIR/ ] || mkdir $INSTALL_DIR/config -sudo mount $INSTALL_DIR/.confdisk.img $INSTALL_DIR/config -o loop,rw -sudo echo "$INSTALL_DIR/.confdisk.img $INSTALL_DIR/config vfat defaults 0 2" +[ -d $INSTALL_DIR/config ] || mkdir $INSTALL_DIR/config +sudo mount $INSTALL_DIR/.confdisk.img $INSTALL_DIR/config -o loop,rw,uid=$USERID,gid=$GROUPID -[ -d $INSTALL_DIR/config/etc ] || sudo mkdir $INSTALL_DIR/config/etc -[ -f $INSTALL_DIR/config/etc/raspiducky.conf ] || sudo cp raspiducky.conf $INSTALL_DIR/config/etc/raspiducky.conf +[ -d $INSTALL_DIR/config/etc ] || mkdir $INSTALL_DIR/config/etc +[ -f $INSTALL_DIR/config/etc/raspiducky.conf ] || cp raspiducky.conf $INSTALL_DIR/config/etc/raspiducky.conf [ -d $INSTALL_DIR/config/payloads-db ] || cp -r payloads $INSTALL_DIR/config/payloads-db [ -d $INSTALL_DIR/config/onboot_payload ] || mkdir $INSTALL_DIR/config/onboot_payload +echo "$INSTALL_DIR/.confdisk.img $INSTALL_DIR/config vfat loop,rw 0 2" | sudo tee --append /etc/fstab +sudo umount $INSTALL_DIR/config # BOOT CONFIG -sudo echo "dtoverlay=dwc2" >> /boot/config.txt -sudo echo "dwc2" >> /etc/modules -sudo echo "libcomposite" >> /etc/modules +echo "dtoverlay=dwc2" | sudo tee --append /boot/config.txt +echo "dwc2" | sudo tee --append /etc/modules +echo "libcomposite" | sudo tee --append /etc/modules -cat /etc/rc.local | awk '/exit\ 0/ && c == 0 {c = 0; print "\n/home/pi/hid.sh\nsleep 3\n/home/pi/run_payload.sh\n"}; {print}' /etc/rc.local +cat /etc/rc.local | sudo awk '/exit\ 0/ && c == 0 {c = 0; print "\n/home/pi/hid.sh\nsleep 3\n/home/pi/run_payload.sh\n"}; {print}' /etc/rc.local # FLASH DRIVE diff --git a/raspiducky.conf b/raspiducky.conf index c3f1e8d..48d70bc 100644 --- a/raspiducky.conf +++ b/raspiducky.conf @@ -1,7 +1,10 @@ +INSTALL_DIR=/home/pi + # Available modes are 'config' , 'disk' or 'none' STORAGE_MODE=config -STORAGE_FILE=/home/pi/.usbdisk.img -STORAGE_MOUNT=/media/storage +STORAGE_FILE=$INSTALL_DIR/.usbdisk.img +STORAGE_MOUNT=$INSTALL_DIR/storage -STORAGE_CONFIG=/home/pi/.configdisk.img +STORAGE_CONFIG=$INSTALL_DIR/.confdisk.img +STORAGE_CONFIG_MOUNT=$INSTALL_DIR/config From bbf5ef17cc0fd50d0fd417ccdda2b910e163f1a8 Mon Sep 17 00:00:00 2001 From: arrase Date: Mon, 3 Apr 2017 00:39:27 +0200 Subject: [PATCH 4/4] README --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8438087..4a4c3d3 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,34 @@ A Keyboard emulator like Rubber Ducky build over Raspberry Pi Zero * Flash Raspbian * Login as pi, use a screen over HDMI and a keyboard over usb port +* Connect the raspberry to internet over wifi * Clone the repository + + git clone https://github.com/arrase/Raspiducky.git + * Run install script + cd Raspiducky chmod 777 install.sh ./install.sh -* Install a payload +* Delete the install folder and reboot + + cd .. + rm -rf Raspiducky + sudo reboot + +### First boot + +When Raspiducky boots for first time the configuration is exposed over usb emulation + +* Run a payload on boot + + sudo cat payloads-db/open_terminal/open_mint_terminal.dd payloads-db/backdoor/bind_shell.dd > onboot_payload/payload.dd + +* Flash drive options - sudo cat payloads/open_terminal/open_mint_terminal.dd payloads/backdoor/bind_shell.dd > /home/pi/config/onboot_payload/payload.dd + vim etc/raspiducky.conf ### Resources: