util
提供了一些公用的方法库
decode_html(head, body)
将 HTTP 响应头和响应体以 utf-8 编码方式解码
参数
head
HTTP 响应头,类型 String
body
HTTP 响应体,类型 String
返回值
类型 String
范例
code, head, body, err, redir_url = hackhttp.http(url="xxxx")
ret = util.decode_html(head, body)
get_domain_root(url)
获取 url 的根域名地址
参数
url
URL 地址,类型 String
返回值
类型 String
范例
>>> util.get_domain_root("http://www.test.com/index.php?id=1")
'test.com'
>>> util.get_domain_root("http://www.test.com/test/")
'test.com'
>>> util.get_domain_root("http://test.com/test/index.php?id=1")
'test.com'
get_url_ext(url)
获取 URL 中请求的文件的后缀名(不适用于重写 URL 规则的 URL)
参数
url
目标 URL 地址,类型 String
返回值
后缀名,类型 String
范例
>>> util.get_url_ext("http://www.test.com/test/test.jsp?id=1")
'.jsp'
get_url_host(url)
获取该 URL 的域名地址
参数
url
目标 URL 地址,类型 String
返回值
类型 String
范例
>>> util.get_url_host("http://www.test.com/test/")
'www.test.com'
>>> util.get_url_host("http://www.test.com/test/index.php?id=2")
'www.test.com'
is_ipaddr(varObj)
判断 varObj 是不是 IPv4 地址
返回值
类型 Bool
范例
>>> util.is_ipaddr("www.test.com")
False
>>> util.is_ipaddr("127.0.0.1")
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 与用户名组合
内置的用户名和密码字典列表
sub_domain.txt
telnet_user.txt
ssh_user.txt
ftp_user.txt
http_user.txt
form_user.txt
rsync_user.txt
mssql_user.txt
mysql_user.txt
telnet_pass.txt
ftp_pass.txt
form_pass.txt
mssql_pass.txt
mysql_pass.txt
http_pass.txt
ssh_pass.txt
内置字典均放在
database/
目录下,具体使用方法参见范例二userlist 类型 list。 用户名的文本列表
- passlist 类型 list。 密码的文本列表
- mix 类型 bool。额外将
%username%+密码
作为密码
返回值
类型 list
说明
加载顺序为:
1.加载默认用户字典
2.加载内置文件用户字典
3.加载添加任务时设置url用户字典
4.加载默认密码字典
5.加载内置文件密码字典
6.加载添加任务时设置url密码字典
如果需要在本地测试自定义字典,请打开 dummy/__init__.py
_G = {
'scanport':False,
'subdomain': False,
'target': 'www.abc.com',
'disallow_ip':['127.0.0.1'],
'kv' : {},
#'user_dict':'http://192.168.0.158/1.txt'
#'pass_dict':'http://192.168.0.158/1.txt'
}
将其中的 user_dict
和 pass_dict
前的 #
号去掉,并将值修改为用户远程字典的地址
范例
范例一
>>> util.load_password_dict('')
[['root', 'root'], ['admin', 'admin'], ['test', 'test']]
范例二
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urlparse
def assign(service, arg):
if service == fingerprint.test:
return True, arg
def audit(args):
r = urlparse.urlparse(args)
host = r.hostname
debug("host:%s",host)
pass_list = util.load_password_dict(
host,
userfile='database/ftp_user.txt',
passfile='database/ftp_pass.txt',
userlist=['sa:sa','username'],
passlist=['123456'],
mix=True,
)
for username,password in pass_list:
debug("%s,%s", username, password)
if __name__ == '__main__':
from dummy import *
audit(assign(fingerprint.test, 'http://mp3.baidu.com/')[1])
urljoin(base, ref, encoding='utf-8')
连接 URL,用法和返回值与 urlparse.urljoin 完全相同
>>> util.urljoin('http://www.test.com/', '/index.php?id=1&page=2')
'http://www.test.com/index.php?id=1&page=2'