redis登录测试hydra以及python脚本方式

来源:互联网 发布:数据透视表值显示文本 编辑:程序博客网 时间:2024/06/05 20:26

使用hydra对本机的redis做密码登录测试,测试命令:(hydra版本8.1)

         Hydra–P pass.txt redis://127.0.0.1:6379

a)      将正确密码放置在密码库文件的前16个,能够成功找到密码。

b)     将正确密码放置在密码库文件的16位之后,不能找到密码。


通过wireshark抓包显示登录时重复发送密码库文件的前16个密码字符串


考虑到hydra默认开启16个task,而发送的密码数也为16,或许两者有联系,测试命令:

hydra –Ppass.txt redis:127.0.0.1:6379  -t 2

a)      将正确密码放置在密码库文件的前2个,能够成功找到密码。

b)     将正确密码放置在密码库文件的2位之后,不能找到密码。

可以判断,成功发送的密码数量即为开启task的个数。


因为hydra的redis数据库爆破命令的奇怪的问题,只能发送极少数的测试密码,为了解决这个问题,可以选择1、将密码库文件分割成每个文件16个密码,但是这种方式会造成多次的hydra启动停止和文件读取;2、利用python脚本实现redis登录行为并通过redis状态判断登录是否成功。

python登录脚本如下:

#!/usr/bin/pythonimport redisimport sysimport getoptimport datetimeimport time'''author:Qingtry to login the redis database-h help-P password file-a server address-o port, default 6379'''def usage():print '''Options:-h help-P password file-a server address-o port, default 6379'''port = 6379 # default portstarttime = time.localtime()print "start time: ", time.strftime("%Y-%m-%d %H:%M:%S",starttime)opts,args = getopt.getopt(sys.argv[1:],"hP:a:o:")for op, value in opts:if op =="-P":input_file = valueelif op == "-a":host = valueelif op == "-o":port = valueelif op =="-h":usage()sys.exit()fo = open(input_file, "r+")passwd = " "while 1:line = fo.readline()passwd = linepasswd = passwd[0:(len(passwd)-2)]#filter the /nrs = redis.Redis(host,port, db = 0, password = passwd) #AUTH passwordresponse = 'wrong passwd'try:response = rs.ping() # use PING to judge the state of redisexcept redis.exceptions.ResponseError:pass#print responseelse:if response ==  True:print responseprint passwdfo.close()stoptime = time.localtime()print "stop time: ", time.strftime("%Y-%m-%d %H:%M:%S",stoptime)exit(0)if not line:print "no valid passwd"stoptime = time.localtime()print "stop time: ", time.strftime("%Y-%m-%d %H:%M:%S",stoptime)exit(0)

python脚本用最简易的方法实现了我们的目标,只适用于redis服务开启且开启了授权密码的情况。

用的是hydra8.1,编译了github上最新的8.4版本之后,这个问题就解决了。(捂脸.jpg)

2 0