From db18cc628b5a7041b983a55aa9debdf46cdd695d Mon Sep 17 00:00:00 2001
From: "Private-Locker, LLC" <40194049+PrivateLocker@users.noreply.github.com>
Date: Wed, 22 Jan 2020 13:54:00 -0800
Subject: [PATCH] Adding SharkLib to the Payload Library.

Not sure if I should add this to "util" folder or create a "tools" folder. So util folder it is!
---
 payloads/library/util/SharkLib/payload.sh | 325 ++++++++++++++++++++++
 1 file changed, 325 insertions(+)
 create mode 100644 payloads/library/util/SharkLib/payload.sh

diff --git a/payloads/library/util/SharkLib/payload.sh b/payloads/library/util/SharkLib/payload.sh
new file mode 100644
index 0000000..d9e720c
--- /dev/null
+++ b/payloads/library/util/SharkLib/payload.sh
@@ -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