├── README.md ├── tree.json ├── vs_0sec.py └── vul-0sec.db /README.md: -------------------------------------------------------------------------------- 1 | # 0sec-search 2 | 新版零组资料文库离线漏洞名搜索,功能:更新 、查询 (不包含漏洞详情) 3 | 4 | 当前项目漏洞信息版本20210830 5 | 6 | **由于监管零组已于20210901正式停运,“相濡以沫,不如相忘于江湖”** 7 | 8 | kali@kali:~$ python3 vs_0sec.py 9 | 10 | 零组资料文库离线漏洞名搜索,功能:更新 、查询 11 | -up:在线更新数据 12 | -offline:离线更新数据库(根据tree.json文件更新) 13 | -s [keyword]:查询关键字 14 | 15 | # 使用:在线更新数据库 16 | kali@kali:~$ python3 vs_0sec.py -up 17 | 18 | 未找到数据库文件vul-0sec.db,将自动创建空库 19 | tree.json文件下载成功 20 | 开始将json转换到sqlite3数据库 21 | [Web安全] 转换完成 22 | [系统安全] 转换完成 23 | [APP安全] 转换完成 24 | [IOT安全] 转换完成 25 | [工控安全] 转换完成 26 | [云安全] 转换完成 27 | [域渗透] 转换完成 28 | [安全技术] 转换完成 29 | [友情链接] 转换完成 30 | 更新完成 31 | 32 | # 使用:查询关键字 33 | kali@kali:~$ python3 vs_0sec.py -s mail 34 | 35 | Web安全|Coremail|Coremail配置文件信息泄漏 https://wiki.0-sec.org/api/wiki/articleInfo/5661 36 | 安全技术|Disable function| mail https://wiki.0-sec.org/api/wiki/articleInfo/6237 37 | 38 | # 使用:离线更新数据库(在线失败) 39 | 浏览器访问 https://wiki.0-sec.org/api/wiki/tree 将json数据保存到本地(与脚本同目录下),执行命令更新数据库 40 | 41 | kali@kali:~$ python3 vs_0sec.py -offline 42 | 43 | 开始将json转换到sqlite3数据库 44 | [Web安全] 转换完成 45 | [系统安全] 转换完成 46 | [APP安全] 转换完成 47 | [IOT安全] 转换完成 48 | [工控安全] 转换完成 49 | [云安全] 转换完成 50 | [域渗透] 转换完成 51 | [安全技术] 转换完成 52 | [友情链接] 转换完成 53 | 更新完成 54 | 55 | -------------------------------------------------------------------------------- /vs_0sec.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # coding=utf-8 3 | # python version 3.7 4 | # 零组资料文库离线漏洞名搜索 by 时光难逆 5 | 6 | import os, sys 7 | import json, sqlite3, time 8 | import requests 9 | 10 | 11 | # 功能:更新 、查询 12 | class search_0sec(): 13 | def __init__(self): 14 | self._db_name = 'vul-0sec.db' # 数据库文件名 15 | self._table_name = '0sec' 16 | if os.path.exists(self._db_name) and os.path.isfile(self._db_name): 17 | pass 18 | else: 19 | print('未找到数据库文件vul-0sec.db,将自动创建空库') 20 | 21 | # 下载漏洞json到本地 22 | def downloadjson(self): 23 | u = 'https://wiki.0-sec.org/api/wiki/tree' 24 | # 循环直到获取成功(有时下载不成功) 25 | while 1: 26 | try: 27 | _res = requests.get(u, verify=False) 28 | if _res.status_code == 200: 29 | json.loads(_res.text) # 能被json解析表示数据完整 30 | with open('tree.json', 'w', encoding='utf-8') as f: 31 | f.write(_res.text) 32 | break 33 | except: 34 | time.sleep(3) 35 | print('tree.json文件下载成功') 36 | 37 | # 将json转存到sqlit3数据库便于查询 38 | def dump2sqlit3(self): 39 | print('开始将json转换到sqlite3数据库') 40 | # 创建库 41 | _conn = sqlite3.connect(self._db_name) 42 | # 创建表,只保留2级目录 43 | qy = """CREATE TABLE IF NOT EXISTS "%s"( 44 | count INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 45 | name1 TEXT,name2 TEXT,data TEXT);""" 46 | _conn.execute(qy % self._table_name) 47 | qy = """delete from "%s";""" 48 | _conn.execute(qy % self._table_name) # 清空表(偷懒) 49 | qy = """update sqlite_sequence SET seq = 0 where name ='%s';""" 50 | _conn.execute(qy % self._table_name) # 清空自增长 51 | # 读取数据 52 | with open('tree.json', 'r', encoding='utf-8') as f: 53 | data = json.load(f) 54 | # 获取漏洞列表 55 | for v1 in data['data']: # 输出大类别 56 | name1 = v1['name'] 57 | for v2 in v1['treeNode']: # 输出小类别 58 | name2 = v2['name'] 59 | vul_list = self.jsontreeNode(v2) 60 | # 将漏洞信息存到数据库 61 | cur = _conn.cursor() 62 | qy_config = "INSERT INTO '%s'(name1,name2,data)VALUES(?,?,?);" % self._table_name 63 | for vinfo in vul_list: 64 | v = (str(name1), str(name2), str(vinfo)) 65 | cur.execute(qy_config, v) 66 | _conn.commit() 67 | print("[{}] 转换完成".format(name1)) 68 | _conn.close() 69 | 70 | # 从2级节点中循环提取子节点 71 | def jsontreeNode(self, v2=json): 72 | result = [] 73 | v3_list = v2['treeNode'] 74 | if type(v3_list) is not list: # 直到没有子节点,返回漏洞信息 75 | result.append(v2) 76 | return result 77 | else: # 如果有子节点就循环获取内部信息 78 | for v3 in v3_list: 79 | result.extend(self.jsontreeNode(v3)) 80 | return result 81 | 82 | # 查询数据库返回格式化结果 83 | def searchsqlit3(self, keyword=str): 84 | _conn = sqlite3.connect(self._db_name) 85 | _nodes = list(_conn.execute("SELECT * FROM '{0}' WHERE data like '%{1}%'".format(self._table_name, keyword))) 86 | for node in _nodes: 87 | vinfo = eval(node[3]) 88 | # 根据命令规则拼接url 89 | http_h = 'https://wiki.0-sec.org/api/wiki/articleInfo/' + str(vinfo['id']) 90 | name = node[1] + '|' + node[2] + '|' + vinfo['name'] 91 | print('{0}\t{1}'.format(name, http_h)) 92 | _conn.close() 93 | 94 | 95 | if __name__ == '__main__': 96 | if sys.argv.__len__() < 2: 97 | print(u"""零组资料文库离线漏洞名搜索,功能:更新 、查询 98 | -up:在线更新数据 99 | -offline:离线更新数据库(根据tree.json文件更新) 100 | -s [keyword]:查询关键字 101 | """) 102 | exit(0) 103 | _0sec = search_0sec() 104 | if sys.argv[1] == '-up': 105 | _0sec.downloadjson() 106 | _0sec.dump2sqlit3() 107 | print('更新完成') 108 | if sys.argv[1] == '-s': 109 | _0sec.searchsqlit3(sys.argv[2]) 110 | if sys.argv[1] == '-offline': 111 | _0sec.dump2sqlit3() 112 | print('更新完成') 113 | -------------------------------------------------------------------------------- /vul-0sec.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moyuwa/0sec-search/41d40175f485ddef3bccc308de1393168d5e1f52/vul-0sec.db --------------------------------------------------------------------------------