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'