添加dns和req参数,移除verity参数。

This commit is contained in:
shmilylty
2019-10-30 22:51:45 +08:00
parent 3f56cda716
commit 3b24db2d89
2 changed files with 30 additions and 18 deletions
+2 -1
View File
@@ -27,7 +27,8 @@ enable_partial_module = [] # 启用部分模块 必须禁用enable_all_module
# 爆破模块设置 # 爆破模块设置
enable_brute_module = False # 使用爆破模块(默认禁用) enable_brute_module = False # 使用爆破模块(默认禁用)
enable_verify_subdomain = True # 验证子域有效性(默认True) enable_dns_resolve = True # DNS解析子域(默认True)
enable_http_request = True # HTTP请求子域(默认True)
enable_wildcard_check = True # 开启泛解析检测 会去掉泛解析的子域 enable_wildcard_check = True # 开启泛解析检测 会去掉泛解析的子域
# 爆破时使用的进程数(根据系统中CPU数量情况设置 不宜大于CPU数量 默认为系统中的CPU数量) # 爆破时使用的进程数(根据系统中CPU数量情况设置 不宜大于CPU数量 默认为系统中的CPU数量)
brute_process_num = os.cpu_count() brute_process_num = os.cpu_count()
+28 -17
View File
@@ -52,44 +52,42 @@ class OneForAll(object):
python3 oneforall.py --target example.com --brute True run python3 oneforall.py --target example.com --brute True run
python3 oneforall.py --target example.com --port medium run python3 oneforall.py --target example.com --port medium run
python3 oneforall.py --target example.com --format csv run python3 oneforall.py --target example.com --format csv run
python3 oneforall.py --target example.com --verify False run python3 oneforall.py --target example.com --dns False run
python3 oneforall.py --target example.com --req False run
python3 oneforall.py --target example.com --takeover False run python3 oneforall.py --target example.com --takeover False run
python3 oneforall.py --target example.com --show True run python3 oneforall.py --target example.com --show True run
Note: Note:
参数valid可选值1,0,None分别表示导出有效,无效,全部子域 参数valid可选值1,0,None分别表示导出有效,无效,全部子域
参数verify为True会尝试解析和请求子域并根据结果给子域有效性打上标签
参数port可选值有'default', 'small', 'medium', 'large', 详见config.py配置 参数port可选值有'default', 'small', 'medium', 'large', 详见config.py配置
参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html', 参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods' 'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
:param str target: 单个域名或者每行一个域名的文件路径(必需参数) :param str target: 单个域名或者每行一个域名的文件路径(必需参数)
:param bool brute: 使用爆破模块(默认False) :param bool brute: 使用爆破模块(默认False)
:param bool verify: 验证子域有效性(默认True) :param bool dns: DNS解析子域(默认True)
:param bool req: HTTP请求子域(默认True)
:param str port: 请求验证子域的端口范围(默认只探测80端口) :param str port: 请求验证子域的端口范围(默认只探测80端口)
:param int valid: 导出子域的有效性(默认1) :param int valid: 导出子域的有效性(默认1)
:param str format: 导出格式(默认csv) :param str format: 导出格式(默认csv)
:param bool show: 终端显示导出数据(默认False) :param bool show: 终端显示导出数据(默认False)
""" """
def __init__(self, target, brute=None, verify=None, port='default', def __init__(self, target, brute=None, dns=None, req=None, port='default',
valid=1, format='csv', takeover=True, show=False): valid=1, format='csv', takeover=True, show=False):
self.target = target self.target = target
self.port = port self.port = port
self.domains = set() self.domains = set()
self.domain = str() self.domain = str()
self.data = list() self.data = list()
self.brute = brute self.brute = brute or config.enable_brute_module
self.verify = verify self.dns = dns or config.enable_dns_resolve
self.req = req or config.enable_http_request
self.takeover = takeover self.takeover = takeover
self.valid = valid self.valid = valid
self.format = format self.format = format
self.show = show self.show = show
def main(self): def main(self):
if self.brute is None:
self.brute = config.enable_brute_module
if self.verify is None:
self.verify = config.enable_verify_subdomain
old_table = self.domain + '_last' old_table = self.domain + '_last'
new_table = self.domain + '_now' new_table = self.domain + '_now'
collect = Collect(self.domain, export=False) collect = Collect(self.domain, export=False)
@@ -111,16 +109,17 @@ class OneForAll(object):
db.rename_table(new_table, old_table) # 新表重命名为旧表 db.rename_table(new_table, old_table) # 新表重命名为旧表
old_data = db.get_data(old_table).as_dict() old_data = db.get_data(old_table).as_dict()
# 不验证子域的情况 # 不解析子域直接导出结果
if not self.verify: if not self.dns:
# 数据库导出 # 数据库导出
self.valid = None self.valid = None
dbexport.export(self.domain, valid=self.valid, dbexport.export(self.domain, valid=self.valid,
format=self.format, show=self.show) format=self.format, show=self.show)
db.drop_table(new_table) db.drop_table(new_table)
db.rename_table(self.domain, new_table) db.rename_table(self.domain, new_table)
db.close()
return return
# 开始验证子域工作
self.data = db.get_data(self.domain).as_dict() self.data = db.get_data(self.domain).as_dict()
# 标记新发现子域 # 标记新发现子域
@@ -129,7 +128,7 @@ class OneForAll(object):
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
asyncio.set_event_loop(loop) asyncio.set_event_loop(loop)
# 解析域名地址 # 解析
task = resolve.bulk_query_a(self.data) task = resolve.bulk_query_a(self.data)
self.data = loop.run_until_complete(task) self.data = loop.run_until_complete(task)
@@ -139,14 +138,26 @@ class OneForAll(object):
db.create_table(resolve_table) db.create_table(resolve_table)
db.save_db(resolve_table, self.data, 'resolve') db.save_db(resolve_table, self.data, 'resolve')
# 请求域名地址 # 请求子域直接导出结果
if not self.req:
# 数据库导出
self.valid = None
dbexport.export(self.domain, valid=self.valid,
format=self.format, show=self.show)
db.drop_table(new_table)
db.rename_table(self.domain, new_table)
db.close()
return
# 请求子域
task = request.bulk_get_request(self.data, self.port) task = request.bulk_get_request(self.data, self.port)
self.data = loop.run_until_complete(task) self.data = loop.run_until_complete(task)
# 在关闭事件循环前加入一小段延迟让底层连接得到关闭的缓冲时间 # 在关闭事件循环前加入一小段延迟让底层连接得到关闭的缓冲时间
loop.run_until_complete(asyncio.sleep(0.25)) loop.run_until_complete(asyncio.sleep(0.25))
# 保存请求结果
db.clear_table(self.domain) db.clear_table(self.domain)
db.save_db(self.domain, self.data) db.save_db(self.domain, self.data, 'request')
# 数据库导出 # 数据库导出
dbexport.export(self.domain, valid=self.valid, dbexport.export(self.domain, valid=self.valid,
@@ -154,8 +165,8 @@ class OneForAll(object):
db.drop_table(new_table) db.drop_table(new_table)
db.rename_table(self.domain, new_table) db.rename_table(self.domain, new_table)
db.close() db.close()
# 子域接管检查
# 子域接管检查
if self.takeover: if self.takeover:
subdomains = set(map(lambda x: x.get('subdomain'), self.data)) subdomains = set(map(lambda x: x.get('subdomain'), self.data))
takeover = Takeover(subdomains) takeover = Takeover(subdomains)