mirror of
https://github.com/shmilylty/OneForAll.git
synced 2026-08-26 12:57:50 +08:00
添加dns和req参数,移除verity参数。
This commit is contained in:
+2
-1
@@ -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
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user