• util
    • decode_html(head, body)
      • 参数
      • 返回值
      • 范例
    • get_domain_root(url)
      • 参数
      • 返回值
      • 范例
    • get_url_ext(url)
      • 参数
      • 返回值
      • 范例
    • get_url_host(url)
      • 参数
      • 返回值
      • 范例
    • is_ipaddr(varObj)
      • 返回值
      • 范例
    • load_password_dict(hostname, userfile=None, passfile=None, userlist=None, passlist=None, mix=True)
      • 参数
      • 返回值
      • 说明
      • 范例
    • urljoin(base, ref, encoding='utf-8')

    util


    提供了一些公用的方法库

    decode_html(head, body)

    将 HTTP 响应头和响应体以 utf-8 编码方式解码

    参数
    • head

      HTTP 响应头,类型 String

    • body

      HTTP 响应体,类型 String

    返回值

    类型 String

    范例
    1. code, head, body, err, redir_url = hackhttp.http(url="xxxx")
    2. ret = util.decode_html(head, body)

    get_domain_root(url)

    获取 url 的根域名地址

    参数
    • url

      URL 地址,类型 String

    返回值

    类型 String

    范例
    1. >>> util.get_domain_root("http://www.test.com/index.php?id=1")
    2. 'test.com'
    3. >>> util.get_domain_root("http://www.test.com/test/")
    4. 'test.com'
    5. >>> util.get_domain_root("http://test.com/test/index.php?id=1")
    6. 'test.com'

    get_url_ext(url)

    获取 URL 中请求的文件的后缀名(不适用于重写 URL 规则的 URL)

    参数
    • url

      目标 URL 地址,类型 String

    返回值

    后缀名,类型 String

    范例
    1. >>> util.get_url_ext("http://www.test.com/test/test.jsp?id=1")
    2. '.jsp'

    get_url_host(url)

    获取该 URL 的域名地址

    参数
    • url

      目标 URL 地址,类型 String

    返回值

    类型 String

    范例
    1. >>> util.get_url_host("http://www.test.com/test/")
    2. 'www.test.com'
    3. >>> util.get_url_host("http://www.test.com/test/index.php?id=2")
    4. 'www.test.com'

    is_ipaddr(varObj)

    判断 varObj 是不是 IPv4 地址

    返回值

    类型 Bool

    范例
    1. >>> util.is_ipaddr("www.test.com")
    2. False
    3. >>> util.is_ipaddr("127.0.0.1")
    4. True

    load_password_dict(hostname, userfile=None, passfile=None, userlist=None, passlist=None, mix=True)

    加载字典,函数自带去重功能

    参数
    • hostname

      类型 str。当前扫描的域名或者 ip(若是 IP,会自动从当前扫描的 url 匹配到域名)

    • userfile

      类型 str。加载的内置用户名字典文件

      用户名字典例子:

      • root:root 表示一对用户名和密码,这种类型会不和密码字典来组合
      • %domain% 该通过扫描的域名来生成,包含一级二级三级
      • %domain%:%domain%
      • admin:admin
      • test:test
    • passfile

      类型 str。 加载的内置密码字典文件

      密码字典例子:

      • %null% 空口令
      • 123456789
      • %username%123 与用户名组合

      内置的用户名和密码字典列表

      1. sub_domain.txt
      2. telnet_user.txt
      3. ssh_user.txt
      4. ftp_user.txt
      5. http_user.txt
      6. form_user.txt
      7. rsync_user.txt
      8. mssql_user.txt
      9. mysql_user.txt
      10. telnet_pass.txt
      11. ftp_pass.txt
      12. form_pass.txt
      13. mssql_pass.txt
      14. mysql_pass.txt
      15. http_pass.txt
      16. ssh_pass.txt

      内置字典均放在 database/ 目录下,具体使用方法参见范例二

    • userlist 类型 list。 用户名的文本列表

    • passlist 类型 list。 密码的文本列表
    • mix 类型 bool。额外将 %username%+密码 作为密码
    返回值

    类型 list

    说明

    加载顺序为

    1.加载默认用户字典

    2.加载内置文件用户字典

    3.加载添加任务时设置url用户字典

    4.加载默认密码字典

    5.加载内置文件密码字典

    6.加载添加任务时设置url密码字典

    如果需要在本地测试自定义字典,请打开 dummy/__init__.py

    1. _G = {
    2. 'scanport':False,
    3. 'subdomain': False,
    4. 'target': 'www.abc.com',
    5. 'disallow_ip':['127.0.0.1'],
    6. 'kv' : {},
    7. #'user_dict':'http://192.168.0.158/1.txt'
    8. #'pass_dict':'http://192.168.0.158/1.txt'
    9. }

    将其中的 user_dictpass_dict 前的 # 号去掉,并将值修改为用户远程字典的地址

    范例
    1. 范例一

      1. >>> util.load_password_dict('')
      2. [['root', 'root'], ['admin', 'admin'], ['test', 'test']]
    2. 范例二

      1. #!/usr/bin/env python
      2. # -*- coding: utf-8 -*-
      3. import urlparse
      4. def assign(service, arg):
      5. if service == fingerprint.test:
      6. return True, arg
      7. def audit(args):
      8. r = urlparse.urlparse(args)
      9. host = r.hostname
      10. debug("host:%s",host)
      11. pass_list = util.load_password_dict(
      12. host,
      13. userfile='database/ftp_user.txt',
      14. passfile='database/ftp_pass.txt',
      15. userlist=['sa:sa','username'],
      16. passlist=['123456'],
      17. mix=True,
      18. )
      19. for username,password in pass_list:
      20. debug("%s,%s", username, password)
      21. if __name__ == '__main__':
      22. from dummy import *
      23. audit(assign(fingerprint.test, 'http://mp3.baidu.com/')[1])

    urljoin(base, ref, encoding='utf-8')

    连接 URL,用法和返回值与 urlparse.urljoin 完全相同

    1. >>> util.urljoin('http://www.test.com/', '/index.php?id=1&page=2')
    2. 'http://www.test.com/index.php?id=1&page=2'