Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding SharkLib to the Payload Library. #16

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
325 changes: 325 additions & 0 deletions payloads/library/util/SharkLib/payload.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,325 @@
#!/bin/bash
#
# Title: SharkLib
# Author: REDD of Private-Locker
# Version: 1.3
#
# This Script is to be ran on the Hak5 SharkJack itself. This Script
# makes switching between local stored payloads quick and simple.
#

VERS=1.3
LIB_DIR="/root/payload/sharklib"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
START_DIR="$DIR"
INSTALL_DIR="/usr/sbin"
EXEC_FILE="sharklib"
PAYLOAD_DIR="/root/payload"
PAYLOAD_FILE="$PAYLOAD_DIR/payload.sh"

function install_sharklib() {
if [[ "$DIR" != $INSTALL_DIR ]]; then
if [ ! -f "$INSTALL_DIR/$EXEC_FILE" ]; then
printf " -> Installing SharkLib into System for Easy Access.\n"
sleep 1;
cp -rf $0 $INSTALL_DIR/$EXEC_FILE
printf " -> Fixing Permissions of $EXEC_FILE in $INSTALL_DIR.\n"
sleep 1;
chmod +x $INSTALL_DIR/$EXEC_FILE
fi
fi
}

function view_payload() {
printf "\n";
cat "$PAYLOAD_FILE";
printf "\n";
read -n 1 -s -r -p "Press any key to return to Menu..";
sharklib_menu;
}

function remove_sharklib() {
if [ -f "$INSTALL_DIR/$EXEC_FILE" ]; then
printf "\n"
printf "Removing SharkLib from local system.\n"
rm -rf "$INSTALL_DIR/$EXEC_FILE";
printf "Removing SharkLib Payload Library.\n"
rm -rf "$LIB_DIR";
printf "SharkLib has been fully removed.\n\n"
fi
}

function free_space() {
FREE_MEM="$(df -h $PWD | awk '/[0-9]%/{print $(NF-2)}')"
}


function header() {
free_space;
printf "\n"
printf "O========================================O\n"
printf "| SharkLib - SharkJack Quick Payload |\n"
printf "| Library |\n"
printf "O=O====================================O=O\n"
printf " | %-29s |\n" "$SHARKLIB_TITLE"
printf " O====================================O\n"
printf " | Free Space: %-6s Vers: %-3s | \n" "$FREE_MEM" "$VERS"
printf " O================================O \n"
printf " -Huge Thanks goes to Hak5! \n"
printf "\n"
}

function backup_payload() {
clear;
SHARKLIB_TITLE=" Backup Payloads"
header;
if [ -f "$PAYLOAD_FILE" ]; then
printf "\n"
printf " 1. Backup current payload to SharkLib\n"
printf "\n"
printf " 2. Return to Previous Menu.\n"
printf "\n"
printf " Select a Menu Item by # and press ENTER: "
read BACKUP_INPUT
printf "\n"
if [ "$BACKUP_INPUT" = "1" ]; then
printf " What would you want to call this Payload?: "
read BACKUP_INPUT_1
if [[ "$BACKUP_INPUT_1" != "" ]]; then
if [ ! -d "$LIB_DIR/$BACKUP_INPUT_1" ]; then
mkdir -p "$LIB_DIR/$BACKUP_INPUT_1"
cp -rf "$PAYLOAD_FILE" "$LIB_DIR/$BACKUP_INPUT_1/payload.sh"
printf " Created Payload directory named $BACKUP_INPUT_1\n"
sleep 2;
sharklib_menu;
else
printf " Removing Old Copy and using New Copy of $BACKUP_INPUT_1\n"
rm -rf "$LIB_DIR/$BACKUP_INPUT_1"
mkdir -p "$LIB_DIR/$BACKUP_INPUT_1"
cp -rf "$PAYLOAD_FILE" "$LIB_DIR/$BACKUP_INPUT_1/payload.sh"
sleep 2;
sharklib_menu;
fi
else
if [ ! -d "$LIB_DIR/Payload" ]; then
printf " Backing up Payload into Default Payload directory..\n"
mkdir -p "$LIB_DIR/Payload"
cp -rf "$PAYLOAD_FILE" "$LIB_DIR/Payload/payload.sh"
sleep 2;
sharklib_menu;
else
printf " Removing Old Copy and using New Copy of $LIB_DIR/Payload\n"
rm -rf "$LIB_DIR/Payload"
mkdir -p "$LIB_DIR/Payload"
cp -rf "$PAYLOAD_FILE" "$LIB_DIR/Payload/payload.sh"
sleep 2;
sharklib_menu;
fi
fi
elif [ "$BACKUP_INPUT" = "2" ]; then
sharklib_menu;
else
backup_payload;
fi
else
printf " No Payload in $PAYLOAD_DIR.\n"
fi
}

function delete_payload() {
DELETE_INPUT=NULL
clear;
SHARKLIB_TITLE=" Delete Payloads"
header;
cd "$LIB_DIR"
DIR_CNT="NULL"
DIR_CNT=$(ls "$LIB_DIR" | grep -v total | wc -l)
declare -a DIRS
i=1
for d in */; do
DIRS[i++]="${d%/}"
done
if [ "$DIR_CNT" -lt "1" ]; then
printf " There are no Payloads to Delete. \n\n"
printf " Returning to Previous Menu.\n"
sleep 2;
sharklib_menu;
fi
printf " There are ${#DIRS[@]} Payloads in SharkLib:\n"
for((i=1;i<=${#DIRS[@]};i++)); do
printf " %2d. %-20s\n" "$i" "${DIRS[i]}"
done
PAYLOAD_TOTAL=${#DIRS[@]}
PLUS_QUIT=$((PAYLOAD_TOTAL+1))
printf "\n"
printf " %2d. %-20s\n" "$PLUS_QUIT" "Return to Previous Menu."
printf "\n"
printf " Please choose a Payload by Number: "
read DELETE_INPUT
printf "\n"
if [[ "$DELETE_INPUT" == "$PLUS_QUIT" ]]; then
printf " Returning to Previous Menu.\n"
sleep 2;
sharklib_menu;
elif [[ "$DELETE_INPUT" == "" ]]; then
printf " Please Input a choice.\n"
sleep 2;
delete_payload;
elif ! [[ "$DELETE_INPUT" =~ ^[0-9]+$ ]]; then
printf " Please Input a choice.\n"
sleep 2;
delete_payload;
elif [[ "$DELETE_INPUT" == "0" ]]; then
printf " Please Input a choice.\n"
sleep 2;
delete_payload;
elif [[ "$DELETE_INPUT" -gt "$PLUS_QUIT" ]]; then
printf " Please Input a choice.\n"
sleep 2;
delete_payload;
elif [[ "$DELETE_INPUT" -le "$PLUS_QUIT" ]]; then
printf " Deleting payload ${DIRS[$DELETE_INPUT]} from SharkJack. \n"
rm -rf "$LIB_DIR/${DIRS[$DELETE_INPUT]}"
cd "$START_DIR"
sleep 2;
sharklib_menu;
else
printf " Wrong Choice, going back to Previous Menu.\n"
cd "$START_DIR"
sleep 2;
sharklib_menu;
fi
}


function restore_payload() {
LOAD_INPUT=NULL
clear;
SHARKLIB_TITLE=" Restore Payloads"
header;
cd "$LIB_DIR"
DIR_CNT=$(ls "$LIB_DIR" | grep -v total | wc -l)
declare -a DIRS
i=1
for d in */; do
DIRS[i++]="${d%/}"
done
if [ "$DIR_CNT" -lt "1" ]; then
printf " There are no Payloads to Restore. \n\n"
printf " Returning to Previous Menu.\n"
sleep 2;
sharklib_menu;
fi
printf " There are ${#DIRS[@]} Payloads in SharkLib:\n"
for((i=1;i<=${#DIRS[@]};i++)); do
printf " %2d. %-20s\n" "$i" "${DIRS[i]}"
done
PAYLOAD_TOTAL=${#DIRS[@]}
PLUS_QUIT=$((PAYLOAD_TOTAL+1))
printf "\n"
printf " %2d. %-20s\n" "$PLUS_QUIT" "Return to Previous Menu."
printf "\n"
printf " Please choose a Payload by Number: "
read LOAD_INPUT
printf "\n"
if [[ "$LOAD_INPUT" == "$PLUS_QUIT" ]]; then
printf " Returning to Previous Menu.\n"
sleep 2;
sharklib_menu;
elif [[ "$LOAD_INPUT" == "" ]]; then
printf " Please Input a choice.\n"
sleep 2;
restore_payload;
elif ! [[ "$LOAD_INPUT" =~ ^[0-9]+$ ]]; then
printf " Please Input a choice.\n"
sleep 2;
restore_payload;
elif [[ "$LOAD_INPUT" == "0" ]]; then
printf " Please Input a choice.\n"
sleep 2;
restore_payload;
elif [[ "$LOAD_INPUT" -gt "$PLUS_QUIT" ]]; then
printf " Please Input a choice.\n"
sleep 2;
restore_payload;
elif [[ "$LOAD_INPUT" -le "$PLUS_QUIT" ]]; then
printf " Loading payload ${DIRS[$LOAD_INPUT]} to SharkJack. \n"
cp -rf "$LIB_DIR/${DIRS[$LOAD_INPUT]}/payload.sh" "$PAYLOAD_FILE"
cd "$START_DIR"
sleep 2;
sharklib_menu;
else
printf " Wrong Choice, going back to Previous Menu.\n"
cd "$START_DIR"
sleep 2;
sharklib_menu;
fi
}
function cleanup_ctrl {
echo -en "\n -> Caught SIGINT! \n"
printf " -> Cleaning up and Exiting..\n\n"
sync
sleep 1;
exit $?
}
function exit_sharklib() {
printf " -> Cleaning up and Exiting..\n\n"
sync
sleep 1;
exit 0;
}

function sharklib_menu() {
clear;
trap cleanup_ctrl SIGINT
trap cleanup_ctrl SIGTERM
MENU_INPUT=NULL
if [ ! -d "$LIB_DIR" ]; then
printf " -> Creating SharkLib Payload Library directory.\n"
mkdir -p "$LIB_DIR"
fi
cd "$LIB_DIR"
SHARKLIB_TITLE=" By REDD"
header;
printf " 1. Backup Payload to SharkLib\n"
printf " 2. Restore Payload from SharkLib\n"
printf " 3. Delete Payload from SharkLib\n"
printf "\n"
printf " 4. View Current Payload on SharkJack\n"
printf "\n"
printf " 5. Exit\n"
printf "\n"
printf " Select a Menu Item by # and press ENTER: "
read MENU_INPUT
printf "\n"
if ! [[ "$MENU_INPUT" =~ ^[0-9]+$ ]]; then
sharklib_menu;
elif [[ "$MENU_INPUT" = "0" ]]; then
sharklib_menu;
elif [[ "$MENU_INPUT" = "1" ]]; then
backup_payload;
elif [[ "$MENU_INPUT" = "2" ]]; then
restore_payload;
elif [[ "$MENU_INPUT" = "3" ]]; then
delete_payload;
elif [[ "$MENU_INPUT" = "4" ]]; then
view_payload;
elif [[ "$MENU_INPUT" = "5" ]]; then
exit_sharklib;
elif [[ "$MENU_INPUT" -ge "6" ]]; then
sharklib_menu;
elif [[ "$MENU_INPUT" == "" ]]; then
sharklib_menu;
else
sharklib_menu;
fi
}
if [ "$1" == "--install" ]; then
install_sharklib;
exit 0;
elif [ "$1" == "--remove" ]; then
remove_sharklib;
else
install_sharklib;
sharklib_menu;
fi