暴力破解测试工具--Patator 源码分析

发表于:2013-8-15 11:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:yueguanghaidao    来源:51Testing软件测试网采编

  从上面我们可以很明显看出,匹配的正则是按顺序的,虽然返回数据中,‘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\r')
  f.expect([self.promote],self.timeout)
  f.write('nullnull\r')
  _,_,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+'\r')
  _,_,p=t.expect([self.promote],self.timeout)
  if p.strip() == self.errmsg:
   return False
  t.write(Passwd+'\r')
  _,_,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')

  运行结果如下:

  我们发现这的确是一种可行的办法。这也给hydra误报带来了解决办法。

  由于每次都创建telnetlib.Telnet对象比较浪费资源,patator使用了缓存来解决这个问题,但这里我一直有一个疑问,为啥Telnet对象可以缓存,如果亲明白,教教我吧!

53/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号