From 4fd7341bccf9a381ac19b43ed763746c7f339f78 Mon Sep 17 00:00:00 2001 From: MasonLiu <2857911564@qq.com> Date: Wed, 4 Dec 2024 00:08:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B4=9E=E8=A7=81/=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E5=AE=A2/=E5=98=B6=E5=90=BC=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E7=A8=8B=E5=BA=8F=EF=BC=8C=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=8F=AF=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core.py | 35 ++++- GotoSend_4hou.py | 14 +- GotoSend_anquanke.py | 127 ++++++++++++++++ GotoSend_doonsec.py | 135 ++++++++++++++++++ JSON/doonsec.json | 96 ++++++------- README.md | 6 +- SendBot.py | 3 +- __pycache__/GotoSend_4hou.cpython-312.pyc | Bin 0 -> 5659 bytes __pycache__/GotoSend_anquanke.cpython-312.pyc | Bin 0 -> 5583 bytes __pycache__/SendBot.cpython-312.pyc | Bin 3602 -> 3719 bytes config.yaml | 7 +- db/4hou.db | Bin 229376 -> 229376 bytes db/anquanke.db | Bin 0 -> 12288 bytes db/doonsec.db | Bin 0 -> 69632 bytes media/__pycache__/common.cpython-312.pyc | Bin 5766 -> 5854 bytes media/__pycache__/xianzhi.cpython-312.pyc | Bin 2340 -> 2357 bytes 16 files changed, 359 insertions(+), 64 deletions(-) create mode 100644 GotoSend_anquanke.py create mode 100644 GotoSend_doonsec.py create mode 100644 __pycache__/GotoSend_4hou.cpython-312.pyc create mode 100644 __pycache__/GotoSend_anquanke.cpython-312.pyc create mode 100644 db/anquanke.db create mode 100644 db/doonsec.db diff --git a/Core.py b/Core.py index 5eb5db9..d7cb600 100644 --- a/Core.py +++ b/Core.py @@ -2,11 +2,27 @@ import signal from datetime import datetime import sys import time -from SendBot import SendToFeishu +import yaml +# from SendBot import SendToFeishu from media.common import run from media.freebuf import freebuf_main from media.xianzhi import xianzhi_main +from GotoSend_4hou import Src_4hou +from GotoSend_anquanke import Src_anquanke +from GotoSend_doonsec import Src_doonsec +# 加载参数 +def get_params(): + with open('./config.yaml', 'r', encoding="utf-8") as file: + config = yaml.safe_load(file) + sleep_time = f"{config['sleep_time']}" + s_hour = int(f"{config['s_hour']}") + e_hour = int(f"{config['e_hour']}") + c_hour = int(f"{config['c_hour']}") + + return sleep_time, s_hour, e_hour, c_hour + +sleep_time, s_hour, e_hour, c_hour = get_params() def crab_job(): print("正在启动各爬虫并获取资源中...") @@ -14,6 +30,11 @@ def crab_job(): xianzhi_main() freebuf_main() +def send_job(): + Src_4hou(s_hour, e_hour) + Src_anquanke(s_hour, e_hour) + Src_doonsec(s_hour, e_hour) + def signal_handler(sig, frame): print("接收到退出信号,程序即将退出...") sys.exit(0) @@ -28,16 +49,20 @@ def main_loop(): # 获取当前时间 now = datetime.now() # 检查是否为特定时间点 - if now.hour == 11 and now.minute == 5: + if now.hour == c_hour and now.minute == 5: crab_job() + send_job() print("执行完毕,等待下一次执行...") else: - print("正在等待执行...") - time.sleep(35) # 每隔35秒执行一次 + pass + # print("正在等待执行...") + # print("等待间隔:", int(sleep_time)) + time.sleep(int(sleep_time)) # 每隔35秒执行一次 except Exception as e: print(f"发生错误: {e} ,程序已暂停") - SendToFeishu(f"发生错误: {e} ,程序已退出", "报错信息") + # SendToFeishu(f"发生错误: {e} ,程序已退出", "报错信息") exit() if __name__ == "__main__": + print("程序正在运行当中。") main_loop() \ No newline at end of file diff --git a/GotoSend_4hou.py b/GotoSend_4hou.py index 6708683..a7374cc 100644 --- a/GotoSend_4hou.py +++ b/GotoSend_4hou.py @@ -66,17 +66,15 @@ def get_4hou_json(): return total_data -def query_articles_within_time_range(): +def query_articles_within_time_range(s_hour, e_hour): conn = sqlite3.connect('./db/4hou.db') cursor = conn.cursor() # 获取当前日期和时间 now = datetime.now() - # 计算前一天11点的时间 - start_time = datetime(now.year, now.month, now.day, 11) - timedelta(days=1) + start_time = datetime(now.year, now.month, now.day, s_hour) - timedelta(days=1) # print(start_time) - # 计算当日11点的时间 - end_time = datetime(now.year, now.month, now.day, 11) + end_time = datetime(now.year, now.month, now.day, e_hour) # print(end_time) # 查询指定时间段内的数据 @@ -105,7 +103,7 @@ def get_filtered_articles(entries): return result -def Src_4hou(): +def Src_4hou(s_hour, e_hour): if not os.path.exists('./db/4hou.db'): # 创建数据库和表 create_database() @@ -120,7 +118,7 @@ def Src_4hou(): insert_data(M_4hou_data) # 查询指定时间段内的数据 - filtered_articles = query_articles_within_time_range() + filtered_articles = query_articles_within_time_range(s_hour, e_hour) # print(filtered_articles) if filtered_articles: @@ -133,4 +131,4 @@ def Src_4hou(): # print(results) if __name__ == "__main__": - Src_4hou() + Src_4hou(11, 11) diff --git a/GotoSend_anquanke.py b/GotoSend_anquanke.py new file mode 100644 index 0000000..15985a0 --- /dev/null +++ b/GotoSend_anquanke.py @@ -0,0 +1,127 @@ +import json +import sqlite3 +import os +from datetime import datetime, timedelta +from SendBot import SendToFeishu + +def create_database(): + conn = sqlite3.connect('./db/anquanke.db') + cursor = conn.cursor() + cursor.execute('''CREATE TABLE IF NOT EXISTS articles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT, + guid TEXT, + source TEXT, + description TEXT, + pubDate DATETIME, + author TEXT + )''') + conn.commit() + conn.close() + +def insert_data(data): + conn = sqlite3.connect('./db/anquanke.db') + cursor = conn.cursor() + for entry in data: + cursor.execute(''' + INSERT INTO articles (title, guid, source, description, pubDate, author) + VALUES (?, ?, ?, ?, ?, ?) + ''', (entry['title'], entry['guid'], entry['source'], entry['description'], entry['pubDate'], entry['author'])) + conn.commit() + conn.close() + +def get_anquanke_json(): + # 检查文件是否存在 + if not os.path.exists('./JSON/anquanke.json'): + raise FileNotFoundError(f"anquanke.json文件不存在,请检查程序是否运行正常!") + + # 打开并读取JSON文件 + with open('./JSON/anquanke.json', 'r', encoding='utf-8') as file: + data = json.load(file) + + # 假设data是一个包含多个JSON对象的列表 + if not isinstance(data, list): + raise ValueError("JSON文件格式错误,请检查common.py是否异常!") + + # 提取所需字段并编号 + total_data = [] + for index, item in enumerate(data, start=1): + entry = { + "id": index, + "title": item.get("title", ""), + "guid": item.get("guid", ""), + "description": item.get("description", ""), + "pubDate": item.get("pubDate", ""), + "author": item.get("author", ""), + "source": item.get("source", "") + } + total_data.append(entry) + + return total_data + +def query_articles_within_time_range(s_hour, e_hour): + conn = sqlite3.connect('./db/anquanke.db') + cursor = conn.cursor() + + # 获取当前日期和时间 + now = datetime.now() + start_time = datetime(now.year, now.month, now.day, s_hour) - timedelta(days=1) + # print(start_time) + end_time = datetime(now.year, now.month, now.day, e_hour) + # print(end_time) + + # 查询指定时间段内的数据 + cursor.execute(''' + SELECT * FROM articles + WHERE pubDate BETWEEN ? AND ? + ''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), end_time.strftime('%Y-%m-%d %H:%M:%S'))) + + results = cursor.fetchall() + conn.close() + return results + +def clear_table(): + conn = sqlite3.connect('./db/anquanke.db') + cursor = conn.cursor() + cursor.execute('DELETE FROM articles') + conn.commit() + conn.close() + +def get_filtered_articles(entries): + result = "" + for entry in entries: + result += f"作者:{entry[6]}\t来源:{entry[3]}\t文章:{entry[1]}\n" + result += f"链接:{entry[2]}\t上传时间:{entry[5]}\n" + result += "-" * 40 + "\n" # 添加分隔线以便区分不同文章 + return result + + +def Src_anquanke(s_hour, e_hour): + if not os.path.exists('./db/anquanke.db'): + # 创建数据库和表 + create_database() + + # 清空表 + clear_table() + + # 获取 JSON 数据 + M_anquanke_data = get_anquanke_json() + + # 插入数据到数据库 + insert_data(M_anquanke_data) + + # 查询指定时间段内的数据 + filtered_articles = query_articles_within_time_range(s_hour, e_hour) + # print(filtered_articles) + + if filtered_articles: + results = get_filtered_articles(filtered_articles) + SendToFeishu(results, "安全客资讯递送") + # print(results) + else: + # 如果为空,则跳过执行 + print("安全客数据为空,跳过执行。") + # print(results) + +if __name__ == "__main__": + Src_anquanke(11, 11) diff --git a/GotoSend_doonsec.py b/GotoSend_doonsec.py new file mode 100644 index 0000000..bc31d6c --- /dev/null +++ b/GotoSend_doonsec.py @@ -0,0 +1,135 @@ +import json +import sqlite3 +import os +from datetime import datetime, timedelta +from SendBot import SendToFeishu + +def create_database(): + conn = sqlite3.connect('./db/doonsec.db') + cursor = conn.cursor() + cursor.execute('''CREATE TABLE IF NOT EXISTS articles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT, + link TEXT, + description TEXT, + pubDate DATETIME, + author TEXT + )''') + conn.commit() + conn.close() + +def insert_data(data): + conn = sqlite3.connect('./db/doonsec.db') + cursor = conn.cursor() + for entry in data: + try: + # 解析 pubDate 字符串为 datetime 对象 + pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%S') + # 格式化 pubDate 为所需的格式 + formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S') + except ValueError: + # 如果解析失败,使用原始 pubDate 字符串 + formatted_pub_date = entry['pubDate'] + + cursor.execute(''' + INSERT INTO articles (title, link, description, pubDate, author) + VALUES (?, ?, ?, ?, ?) + ''', (entry['title'], entry['link'], entry['description'], formatted_pub_date, entry['author'])) + conn.commit() + conn.close() + +def get_doonsec_json(): + # 检查文件是否存在 + if not os.path.exists('./JSON/doonsec.json'): + raise FileNotFoundError(f"doonsec.json文件不存在,请检查程序是否运行正常!") + + # 打开并读取JSON文件 + with open('./JSON/doonsec.json', 'r', encoding='utf-8') as file: + data = json.load(file) + + # 假设data是一个包含多个JSON对象的列表 + if not isinstance(data, list): + raise ValueError("JSON文件格式错误,请检查common.py是否异常!") + + # 提取所需字段并编号 + total_data = [] + for index, item in enumerate(data, start=1): + entry = { + "id": index, + "title": item.get("title", ""), + "link": item.get("link", ""), + "description": item.get("description", ""), + "pubDate": item.get("pubDate", ""), + "author": item.get("author", ""), + } + total_data.append(entry) + + return total_data + +def query_articles_within_time_range(s_hour, e_hour): + conn = sqlite3.connect('./db/doonsec.db') + cursor = conn.cursor() + + # 获取当前日期和时间 + now = datetime.now() + start_time = datetime(now.year, now.month, now.day, s_hour) - timedelta(days=1) + # print(start_time) + end_time = datetime(now.year, now.month, now.day, e_hour) + # print(end_time) + + # 查询指定时间段内的数据 + cursor.execute(''' + SELECT * FROM articles + WHERE pubDate BETWEEN ? AND ? + ''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), end_time.strftime('%Y-%m-%d %H:%M:%S'))) + + results = cursor.fetchall() + conn.close() + return results + +def clear_table(): + conn = sqlite3.connect('./db/doonsec.db') + cursor = conn.cursor() + cursor.execute('DELETE FROM articles') + conn.commit() + conn.close() + +def get_filtered_articles(entries): + result = "" + for entry in entries: + result += f"作者:{entry[5]}\t文章:{entry[1]}\n" + result += f"链接:[点此访问]({entry[2]})\t上传时间:{entry[4]}\n" + result += f"简介:{entry[3]}\n" + result += "-" * 40 + "\n" # 添加分隔线以便区分不同文章 + return result + + +def Src_doonsec(s_hour, e_hour): + if not os.path.exists('./db/doonsec.db'): + # 创建数据库和表 + create_database() + + # 清空表 + clear_table() + + # 获取 JSON 数据 + M_doonsec_data = get_doonsec_json() + + # 插入数据到数据库 + insert_data(M_doonsec_data) + + # 查询指定时间段内的数据 + filtered_articles = query_articles_within_time_range(s_hour, e_hour) + # print(filtered_articles) + + if filtered_articles: + results = get_filtered_articles(filtered_articles) + SendToFeishu(results, "洞见微信安全资讯递送") + # print(results) + else: + # 如果为空,则跳过执行 + print("洞见数据为空,跳过执行。") + # print(results) + +if __name__ == "__main__": + Src_doonsec(11, 11) diff --git a/JSON/doonsec.json b/JSON/doonsec.json index 89e783f..c6f8651 100644 --- a/JSON/doonsec.json +++ b/JSON/doonsec.json @@ -5,7 +5,7 @@ "description": "根据提示输入内容执行,集成调用sqlmap\\\\x0d\\\\x0a泛微CheckServer-Sql注入,检测漏洞存在后,将payload字段下内容保存为req文件,使用sqlmap模块构造参数", "author": "星悦安全", "category": "星悦安全", - "pubDate": "2024-12-02T16:58:07" + "pubDate": "2024-12-03T16:58:07" }, { "title": "Linux通用应急响应脚本", @@ -13,7 +13,7 @@ "description": "Linux通用应急响应脚本,适用大多数情况,目前在ubuntu、centos7、kali上均可以正常运行。", "author": "Hack分享吧", "category": "Hack分享吧", - "pubDate": "2024-12-02T16:56:30" + "pubDate": "2024-12-03T16:56:30" }, { "title": "JAVA安全-反序列化系列-CC6(无依赖链)分析", @@ -21,7 +21,7 @@ "description": "CC6这条链是基于CC1的基础上,由于在CC1中使用到的AnnotationInvocationHandler类,也就是入口点,它的readObject()在java8u71版本后就进行了修改,导致在jdk8u71后的版本,cc1使用不了", "author": "菜狗安全", "category": "菜狗安全", - "pubDate": "2024-12-02T16:30:14" + "pubDate": "2024-12-03T16:30:14" }, { "title": "Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞(CVE-2024-0012)", @@ -29,7 +29,7 @@ "description": "Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞(CVE-2024-0012)", "author": "nday POC", "category": "nday POC", - "pubDate": "2024-12-02T15:43:29" + "pubDate": "2024-12-03T15:43:29" }, { "title": "一款快速等保核查、资产扫描工具", @@ -37,7 +37,7 @@ "description": "主要功能主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破等~~", "author": "安全帮", "category": "安全帮", - "pubDate": "2024-12-02T15:13:26" + "pubDate": "2024-12-03T15:13:26" }, { "title": "Windows日志分析工具(GUI版)", @@ -45,7 +45,7 @@ "description": null, "author": "信安404", "category": "信安404", - "pubDate": "2024-12-02T14:50:25" + "pubDate": "2024-12-03T14:50:25" }, { "title": "Windows日志分析工具(GUI版)", @@ -53,7 +53,7 @@ "description": "骁佬终于把日志查询、内存检索、md5检索整合在一起了,还开发了GUI,有了自己公众号,给榜一大佬点点关注。", "author": "安服仔的救赎", "category": "安服仔的救赎", - "pubDate": "2024-12-02T14:46:21" + "pubDate": "2024-12-03T14:46:21" }, { "title": "安卓逆向 -- 某app破解下载和高清功能", @@ -61,7 +61,7 @@ "description": null, "author": "逆向有你", "category": "逆向有你", - "pubDate": "2024-12-02T14:08:29" + "pubDate": "2024-12-03T14:08:29" }, { "title": "Windows 在新的网络钓鱼攻击中感染了后门 Linux 虚拟机", @@ -69,7 +69,7 @@ "description": "Securonix 研究人员发现的一项新活动是使用网络钓鱼电子邮件执行无人值守的 Linux 虚拟机安装,以破坏企业网络并获得持久性。", "author": "嘶吼专业版", "category": "嘶吼专业版", - "pubDate": "2024-12-02T14:00:24" + "pubDate": "2024-12-03T14:00:24" }, { "title": "最近邻居攻击:X 罗斯 APT 如何利用附近的 Wi-Fi 网络进行隐秘访问", @@ -77,7 +77,7 @@ "description": null, "author": "securitainment", "category": "securitainment", - "pubDate": "2024-12-02T13:38:02" + "pubDate": "2024-12-03T13:38:02" }, { "title": "一次0Day漏洞Rce审计流程", @@ -85,7 +85,7 @@ "description": null, "author": "钟毓安全", "category": "钟毓安全", - "pubDate": "2024-12-02T13:28:36" + "pubDate": "2024-12-03T13:28:36" }, { "title": "关于缓存欺骗的小总结", @@ -93,7 +93,7 @@ "description": null, "author": "白帽子左一", "category": "白帽子左一", - "pubDate": "2024-12-02T12:01:48" + "pubDate": "2024-12-03T12:01:48" }, { "title": "记一次网上阅卷系统漏洞挖掘", @@ -101,7 +101,7 @@ "description": null, "author": "掌控安全EDU", "category": "掌控安全EDU", - "pubDate": "2024-12-02T12:00:13" + "pubDate": "2024-12-03T12:00:13" }, { "title": "干货|一文搞懂加密流量检测的解决方法和技术细节", @@ -109,7 +109,7 @@ "description": null, "author": "e安在线", "category": "e安在线", - "pubDate": "2024-12-02T10:34:52" + "pubDate": "2024-12-03T10:34:52" }, { "title": "混淆 API 补丁以绕过新的 Windows Defender 行为签名", @@ -117,7 +117,7 @@ "description": null, "author": "securitainment", "category": "securitainment", - "pubDate": "2024-12-02T10:24:00" + "pubDate": "2024-12-03T10:24:00" }, { "title": "二开哥斯拉-绕过cloudflare流量检测", @@ -125,7 +125,7 @@ "description": "WebShell\\\\x0d\\\\x0a\\\\x0d\\\\x0a上传了 但是遇到防火墙拦截了,哎,苦恼连接不上\\\\x0d\\\\x0a\\\\x0d\\\\x0a没办法经过测试发现是因为流量中的字段有敏感字段被拦截了,找了好几个人要了二开过的哥斯拉发现都不行,还是被检测被拦截,无奈只能自己手搓一个二开了", "author": "RongRui安全团队", "category": "RongRui安全团队", - "pubDate": "2024-12-02T10:23:40" + "pubDate": "2024-12-03T10:23:40" }, { "title": "任子行网络安全审计系统 log_fw_ips_scan_jsondata SQL注入漏洞", @@ -133,7 +133,7 @@ "description": "任子行网络安全审计系统 log_fw_ips_scan_jsondata 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用xa0SQLxa0注入获取数据库中的信息之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。", "author": "nday POC", "category": "nday POC", - "pubDate": "2024-12-02T10:13:51" + "pubDate": "2024-12-03T10:13:51" }, { "title": "绕过CDN查找真实IP方法", @@ -141,7 +141,7 @@ "description": null, "author": "黑白之道", "category": "黑白之道", - "pubDate": "2024-12-02T10:08:31" + "pubDate": "2024-12-03T10:08:31" }, { "title": "一款内存马检测工具", @@ -149,7 +149,7 @@ "description": null, "author": "黑白之道", "category": "黑白之道", - "pubDate": "2024-12-02T10:08:31" + "pubDate": "2024-12-03T10:08:31" }, { "title": "Windows 自动登录配置指南", @@ -157,7 +157,7 @@ "description": null, "author": "网络个人修炼", "category": "网络个人修炼", - "pubDate": "2024-12-02T10:01:50" + "pubDate": "2024-12-03T10:01:50" }, { "title": "一次0Day漏洞Rce审计流程", @@ -165,7 +165,7 @@ "description": null, "author": "Jie安全", "category": "Jie安全", - "pubDate": "2024-12-02T10:00:35" + "pubDate": "2024-12-03T10:00:35" }, { "title": "二开哥斯拉-绕过cloudflare流量检测", @@ -173,7 +173,7 @@ "description": null, "author": "RongRui安全团队", "category": "RongRui安全团队", - "pubDate": "2024-12-02T09:57:03" + "pubDate": "2024-12-03T09:57:03" }, { "title": "应用内存中的后渗透利用-远程工具密码读取", @@ -181,7 +181,7 @@ "description": "新版本的todesk和向日葵已经无法从配置文件获取密码,而且常规的替换手法也已经失效", "author": "安全洞察知识图谱", "category": "安全洞察知识图谱", - "pubDate": "2024-12-02T09:54:28" + "pubDate": "2024-12-03T09:54:28" }, { "title": "Windows常规应急", @@ -189,7 +189,7 @@ "description": "“A9 Team 甲方攻防团队,成员来自某证券、微步、青藤、长亭、安全狗等公司。", "author": "A9 Team", "category": "A9 Team", - "pubDate": "2024-12-02T09:44:45" + "pubDate": "2024-12-03T09:44:45" }, { "title": "蓝队应急响应-Linux日志分析及常用命令总结", @@ -197,7 +197,7 @@ "description": "蓝队应急响应-Linux日志分析及常用命令总结", "author": "网络安全实验室", "category": "网络安全实验室", - "pubDate": "2024-12-02T09:37:05" + "pubDate": "2024-12-03T09:37:05" }, { "title": "实战!一次超简单的网站后门利用体验", @@ -205,7 +205,7 @@ "description": null, "author": "中国电信安全", "category": "中国电信安全", - "pubDate": "2024-12-02T09:26:04" + "pubDate": "2024-12-03T09:26:04" }, { "title": "【新增PHP类型】蚁剑 | 哥斯拉免杀 过雷池、D盾、安全狗的 XlByPassWAF v1.1已更新!", @@ -213,7 +213,7 @@ "description": "新增PHP免杀Webshell\\\\x0d\\\\x0a过雷池、D盾、安全狗等WAF \\\\x0d\\\\x0a蚁剑 | 哥斯拉免杀", "author": "威零安全实验室", "category": "威零安全实验室", - "pubDate": "2024-12-02T09:15:21" + "pubDate": "2024-12-03T09:15:21" }, { "title": "【新增PHP类型】蚁剑 | 哥斯拉免杀 过雷池、D盾、安全狗的 XlByPassWAF v1.1已更新!", @@ -221,7 +221,7 @@ "description": "新增PHP免杀Webshell\\\\x0d\\\\x0a过雷池、D盾、安全狗等WAF \\\\x0d\\\\x0a蚁剑 | 哥斯拉免杀", "author": "爱喝酒烫头的曹操", "category": "爱喝酒烫头的曹操", - "pubDate": "2024-12-02T09:14:56" + "pubDate": "2024-12-03T09:14:56" }, { "title": "【漏洞复现】OfficeWeb365 SaveDraw 任意文件上传getshell漏洞", @@ -229,7 +229,7 @@ "description": "【漏洞复现】OfficeWeb365 SaveDraw 任意文件上传getshell漏洞", "author": "白帽攻防", "category": "白帽攻防", - "pubDate": "2024-12-02T09:10:26" + "pubDate": "2024-12-03T09:10:26" }, { "title": "新型网络钓鱼活动利用损坏的 Word 文档来逃避安全保护", @@ -237,7 +237,7 @@ "description": "攻击者利用损坏的Word文档钓鱼", "author": "军哥网络安全读报", "category": "军哥网络安全读报", - "pubDate": "2024-12-02T09:01:01" + "pubDate": "2024-12-03T09:01:01" }, { "title": "一次0Day漏洞Rce审计流程", @@ -245,7 +245,7 @@ "description": null, "author": "进击安全", "category": "进击安全", - "pubDate": "2024-12-02T09:00:59" + "pubDate": "2024-12-03T09:00:59" }, { "title": "JS逆向系列12-深入Js Hook", @@ -253,7 +253,7 @@ "description": null, "author": "Spade sec", "category": "Spade sec", - "pubDate": "2024-12-02T09:00:48" + "pubDate": "2024-12-03T09:00:48" }, { "title": "vulnhub之Matrix-2的实践", @@ -261,7 +261,7 @@ "description": null, "author": "云计算和网络安全技术实践", "category": "云计算和网络安全技术实践", - "pubDate": "2024-12-02T08:57:56" + "pubDate": "2024-12-03T08:57:56" }, { "title": "针对【中文】和越南语【用户】的新型【恶意软件】“CleverSoar”", @@ -269,7 +269,7 @@ "description": null, "author": "安小圈", "category": "安小圈", - "pubDate": "2024-12-02T08:45:48" + "pubDate": "2024-12-03T08:45:48" }, { "title": "【漏洞复现】Apache OFBiz远程代码执行漏洞(CVE-2024-45195)", @@ -277,7 +277,7 @@ "description": "星标公众号,及时接收推文消息", "author": "Z0安全", "category": "Z0安全", - "pubDate": "2024-12-02T08:42:15" + "pubDate": "2024-12-03T08:42:15" }, { "title": "针对银狐一些最新攻击样本加载过程的调试分析", @@ -285,7 +285,7 @@ "description": "针对银狐一些最新攻击样本加载过程的调试分析", "author": "安全分析与研究", "category": "安全分析与研究", - "pubDate": "2024-12-02T08:40:42" + "pubDate": "2024-12-03T08:40:42" }, { "title": "开源的Webshell管理器--游魂", @@ -293,7 +293,7 @@ "description": null, "author": "菜鸟学信安", "category": "菜鸟学信安", - "pubDate": "2024-12-02T08:30:43" + "pubDate": "2024-12-03T08:30:43" }, { "title": "某通用系统0day审计过程", @@ -301,7 +301,7 @@ "description": null, "author": "道一安全", "category": "道一安全", - "pubDate": "2024-12-02T08:12:18" + "pubDate": "2024-12-03T08:12:18" }, { "title": "内存马检测工具", @@ -309,7 +309,7 @@ "description": null, "author": "白帽学子", "category": "白帽学子", - "pubDate": "2024-12-02T08:11:23" + "pubDate": "2024-12-03T08:11:23" }, { "title": "Wireshark & Packetdrill | TCP RST 之连接不存在的服务端口", @@ -317,7 +317,7 @@ "description": null, "author": "Echo Reply", "category": "Echo Reply", - "pubDate": "2024-12-02T08:08:50" + "pubDate": "2024-12-03T08:08:50" }, { "title": "Windows权限控制相关的防御与攻击技术", @@ -325,7 +325,7 @@ "description": null, "author": "SecretTeam安全团队", "category": "SecretTeam安全团队", - "pubDate": "2024-12-02T08:02:54" + "pubDate": "2024-12-03T08:02:54" }, { "title": "利用js挖掘漏洞", @@ -333,7 +333,7 @@ "description": "在漏洞挖掘中,通过对js的挖掘可发现诸多安全问题,此文章主要记录学习如何利用JS测试以及加密参数逆向相关的漏洞挖掘。", "author": "李白你好", "category": "李白你好", - "pubDate": "2024-12-02T08:02:42" + "pubDate": "2024-12-03T08:02:42" }, { "title": "LLVM Pass转储类或结构的内存布局", @@ -341,7 +341,7 @@ "description": "面向LLVM Pass小白提供完整可操作示例", "author": "青衣十三楼飞花堂", "category": "青衣十三楼飞花堂", - "pubDate": "2024-12-02T08:00:35" + "pubDate": "2024-12-03T08:00:35" }, { "title": "漏洞预警 | PAN-OS Web管理界面身份认证绕过漏洞", @@ -349,7 +349,7 @@ "description": "PAN-OS设备管理Web界面中存在身份认证绕过漏洞,未经身份验证的远程攻击者可以通过网络访问管理Web界面,从而进行后续活动,包括修改设备配置、访问其他管理功能。", "author": "浅安安全", "category": "浅安安全", - "pubDate": "2024-12-02T08:00:13" + "pubDate": "2024-12-03T08:00:13" }, { "title": "AUTOSAR OS模块详解(二) Counter", @@ -357,7 +357,7 @@ "description": "本文主要介绍AUTOSAR OS的Counter,并对基于英飞凌Aurix TC3XX系列芯片的Vector Microsar代码和配置进行部分讲解。", "author": "汽车电子嵌入式", "category": "汽车电子嵌入式", - "pubDate": "2024-12-02T07:40:28" + "pubDate": "2024-12-03T07:40:28" }, { "title": "DedeCMS v5.7 SP2后台SSTI到RCE再到GetShell", @@ -365,7 +365,7 @@ "description": "影响范围DedeCMS v5.7 SP2利用条件登陆后台(有点鸡肋,但是可以结合DedeCMS的其他漏洞进行", "author": "七芒星实验室", "category": "七芒星实验室", - "pubDate": "2024-12-02T07:01:03" + "pubDate": "2024-12-03T07:01:03" }, { "title": "Windows钓鱼演练工具 -- xiao_fishing", @@ -373,7 +373,7 @@ "description": null, "author": "Web安全工具库", "category": "Web安全工具库", - "pubDate": "2024-12-02T06:44:33" + "pubDate": "2024-12-03T06:44:33" }, { "title": "文末获取 | 基于卡巴斯基虚拟化技术实现内核Hook", @@ -381,7 +381,7 @@ "description": null, "author": "星落安全团队", "category": "星落安全团队", - "pubDate": "2024-12-02T00:00:48" + "pubDate": "2024-12-03T00:00:48" }, { "title": "什么CNVD证书批量化挖掘 ?", diff --git a/README.md b/README.md index 32e125d..1dd7197 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -## 持续更新中 \ No newline at end of file +## 持续更新中 + +RSS订阅链接来源:https://github.com/zhengjim/Chinese-Security-RSS +使用python-json进行格式化,然后使用飞书webhook机器人进行发送 +config.yaml可指定大部分可能需要的参数 \ No newline at end of file diff --git a/SendBot.py b/SendBot.py index 62b3139..16f517b 100644 --- a/SendBot.py +++ b/SendBot.py @@ -17,7 +17,7 @@ import yaml # return sign def gen_sign(): - with open('./config.yaml', 'r') as file: + with open('./config.yaml', 'r', encoding="utf-8") as file: config = yaml.safe_load(file) secret = f"{config['secret']}" # print(secret) @@ -74,6 +74,7 @@ def SendToFeishu(body, header): print("发送失败: 签名验证错误,请检查签名密钥是否正确!") else: print("发送失败: 其他错误,请检查请求参数是否正确!") + print(f"原因:{response_data.get('msg')}") except json.JSONDecodeError as e: print(f"JSON 解析错误: {e}") # print(sign) diff --git a/__pycache__/GotoSend_4hou.cpython-312.pyc b/__pycache__/GotoSend_4hou.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efa4b0af8d940af1a90fccdf342082d1d0e45e7b GIT binary patch literal 5659 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 diff --git a/config.yaml b/config.yaml index 2de7a6a..a31c277 100644 --- a/config.yaml +++ b/config.yaml @@ -1,2 +1,7 @@ key: 22b68f21-def4-4bd5-96eb-71d78ee995f7 -secret: 9gE9j1kT5bh9HvCyoPcIHc \ No newline at end of file +secret: 9gE9j1kT5bh9HvCyoPcIHc +sleep_time: 35 # 秒数 +# 结算时间范围 +s_hour: 11 # 开始时间,前一天的*点 +e_hour: 11 # 结束时间,当天的*点 +c_hour: 11 # 程序运行时间,当天的*点,建议与e_hour一致 \ No newline at end of file diff --git a/db/4hou.db b/db/4hou.db index 439418e603b5845ab0d3b7b64f127a9f777ac80c..21e143d3d8a7da11e21a7a48194aef777fc942dc 100644 GIT binary patch delta 1022 zcmaLVTWB0r7zgnD&pDH($tGu-CT(upOzypGlG&uWY#Wo^+$vOM#R>&e*-!+bLKZ>r zLEAlf5tQPFwLO9_tD>z$Fv-|Ch$sn`pw-w=UxdD-wr_25MNzP;^_z&V!uEwg;ojHmdTM43MS4J-OjaxSq`&ra~a4NGuHlpEo4 zs#2k&i>yOmAK~ZBWrsf_5&HMc*+G8ND4WkqRO&(*FZu|IR2flVbf46{x7nikWQ(1U zuys1a8g=158#B*tvJWJ7X>{_t=I2#bBT=pMU$7cex5VyB!}IJfxssgu|Aw8)G6+A* zl)$)|e~Z0ZfxUhPeHBQU{x|TQuny9z*6D?}S+i+#@RKxF8V}@$Hf%qRr#Rx~!~~W@ zS1k6Xg`?(z#mh6c$oB)J`yD^=_L`;L%PW!Qb+cX8nTzvlHk+VlLMrQI3!H=k!I3PI!Gt!Zlh=* sjii+XMgDt`{WK3Y2sR2f?8z;;&6NW*8ze)-%Khlx$D`hQG*$)oAE-_RJpcdz delta 1010 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 VU?}kaqCiQ}q0`0L|64Hq^*=TYhwuOZ literal 0 HcmV?d00001 diff --git a/db/doonsec.db b/db/doonsec.db new file mode 100644 index 0000000000000000000000000000000000000000..7e651f632e723451338b585470942a924f02598d GIT binary patch literal 69632 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 literal 0 HcmV?d00001 diff --git a/media/__pycache__/common.cpython-312.pyc b/media/__pycache__/common.cpython-312.pyc index f82340a4a54a029085719035a2eeae340026d362..0d57b2d1b44f16d57d664a8098b4c20e2fdf1637 100644 GIT binary patch delta 152 zcmZqEy{F52nwOW00SGoM@=Gt>$XmwDn7X-zIY^MPX7Y6r$Dk5+kR%AKhENQQ3?-aU zCbAeerdTC|CZnGwTah_Xs>l*VSOba4@}gQ23P45!!yOj>7GEeK*y8_$g@1F1s1YLo DBoG?T delta 64 zcmcbo+osEVnwOW00SLa<_@-BHV{{%>z;1k^ko0sr)y_C y?bx8F?-lItr(cnom{*mNsh3rppZ9)Gm$orFt(RDLBa}2YzI8e|l*xyg#*|hd2ySF{vzUj&S gxlh;5c-+vmxu5L>Ba8A?7M01-99P&>i}-