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

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

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

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

分享:

  Telnet_login的父类TCP_Cache简化代码如下:

class TCP_Cache:
  def __init__(self):
    self.cache = {} # {'10.0.0.1:22': ('root', conn1), '10.0.0.2:22': ('admin', conn2),
    self.curr = None

  def __del__(self):
    for _, (_, c) in self.cache.items():
      c.close()
    self.cache.clear()

  def bind(self, host, port, *args, **kwargs):

    hp = '%s:%s' % (host, port)
    key = ':'.join(args)

    if hp in self.cache:
      k, c = self.cache[hp]

      if key == k:
        self.curr = hp, k, c
        return c.fp, c.banner

      else:
        c.close()
        del self.cache[hp]

    self.curr = None

    conn = self.connect(host, port, *args, **kwargs)

    self.cache[hp] = (key, conn)
    self.curr = hp, key, conn

    return conn.fp, conn.banner

  我们可以看到,当开始新建一Telnet_login对象时,将把host:port信息加入cache,以后每次都会现在cache中寻找,如果有就直接返回连接对象(使用先前fp,fp.expect返回信息怎么还可用???)。

  Patator基于模块化的设计,啥模块化的设计?因为支持多种协议,而各个协议之间都是独立的。举个简单的例子,你想测试telnet弱密码,使用的是telnetlib库,属于标准库,所以你完全可以扫telnet弱密码,即使你没有安装pycurl(扫http弱密码使用的库,是curl库的python封装)。哇塞,挺强大啊,那这又是怎么实现的呢?

  不看不知道,一看吓一跳,相当的简单。

warnings = []

try:
  import pycurl
except ImportError:
  warnings.append('pycurl')

dependencies = {
  'paramiko': [('ssh_login',), 'http://www.lag.net/paramiko/', '1.7.7.1'],
  'pycurl': [('http_fuzz',), 'http://pycurl.sourceforge.net/', '7.19.0'],
  'openldap': [('ldap_login',), 'http://www.openldap.org/', '2.4.24'],
  'impacket': [('smb_login','smb_lookupsid','mssql_login'), 'http://oss.coresecurity.com/projects/impacket.html', 'svn#765'],
  'cx_Oracle': [('oracle_login',), 'http://cx-oracle.sourceforge.net/', '5.1.1'],
  'mysql-python': [('mysql_login',), 'http://sourceforge.net/projects/mysql-python/', '1.2.3'],
  'psycopg': [('pgsql_login',), 'http://initd.org/psycopg/', '2.4.5'],
  'pycrypto': [('vnc_login',), 'http://www.dlitz.net/software/pycrypto/', '2.3'],
  'dnspython': [('dns_reverse', 'dns_forward'), 'http://www.dnspython.org/', '1.10.0'],
  'IPy': [('dns_reverse', 'dns_forward'), 'https://github.com/haypo/python-ipy', '0.75'],
  'pysnmp': [('snmp_login',), 'http://pysnmp.sf.net/', '4.2.1'],
  'unzip': [('unzip_pass',), 'http://www.info-zip.org/', '6.0'],
  'java': [('keystore_pass',), 'http://www.oracle.com/technetwork/java/javase/', '6'],
  'python': [('ftp_login',), 'http://www.python.org/', '2.7'],
 }
 
 for w in set(warnings):
    mods, url, ver = dependencies[w]
    if name in mods:
      print('ERROR: %s %s (%s) is required to run %s.' % (w, ver, url, name))
      abort = True

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号