You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
62 lines
1.5 KiB
#!/usr/bin/env bash |
|
|
|
# This script takes a payload and disguises it as an image. |
|
|
|
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" |
|
CURRENT=$(pwd) |
|
|
|
PAYLOAD="$1" |
|
IMAGETYPE="${2:-jpg}" |
|
# Make sure the image type is lower case |
|
IMAGETYPE=$(echo "$IMAGETYPE" | tr '[:lower:]' '[:upper:]') |
|
|
|
# Hex encoded versions of the magic bytes of images |
|
MAGIC_GIF='47494638396140004000e7ff0002050101070a0d' |
|
MAGIC_JPG='ffd8ffe000104a46494600010101012c012c0000' |
|
MAGIC_PNG='89504e470d0a1a0a0000000d49484452000000400a' |
|
# This function prints the usage |
|
function printUsage(){ |
|
echo "Usage: $(basename "$0") PAYLOAD TYPE" |
|
echo "" |
|
echo "Disguises a payload as an image" |
|
echo "" |
|
echo -e "PAYLOAD\t\tThe payload to use, currently only supports a file in CWD (Required)" |
|
echo -e "TYPE\t\tThe type of image (jpg, png, gif) (default: jpg)" |
|
} |
|
|
|
function getPayload(){ |
|
local payload="$CURRENT/$PAYLOAD" |
|
echo "$payload" |
|
if [ -f "$payload" ]; then |
|
exit 0 |
|
else |
|
# Add stuff here if we want to look in another folder for payloads at some point |
|
exit 1 |
|
fi |
|
} |
|
|
|
function getDestination(){ |
|
local ext=$(echo "$IMAGETYPE" | tr '[:upper:]' '[:lower:]') |
|
echo "$CURRENT/$PAYLOAD.$ext" |
|
exit 0 |
|
} |
|
|
|
eval template="\$MAGIC_$IMAGETYPE" |
|
|
|
if [ -n "$template" ]; then |
|
if payload=$(getPayload); then |
|
# Do copy stuff |
|
destination=$(getDestination) |
|
echo "$template" | xxd -r -p > "$destination" |
|
cat "$payload" >> $destination |
|
else |
|
"No such payload $payload" |
|
echo "" |
|
printUsage |
|
fi |
|
else |
|
echo "No such template $template" |
|
echo "" |
|
printUsage |
|
exit 1 |
|
fi
|
|
|