前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >对github新CVE的监控并推送到微信

对github新CVE的监控并推送到微信

作者头像
洛米唯熊
发布于 2020-04-26 05:24:23
发布于 2020-04-26 05:24:23
1.7K00
代码可运行
举报
文章被收录于专栏:洛米唯熊洛米唯熊
运行总次数:0
代码可运行

0x00:前言

Github是国内外技术工具的分(基)享(佬)基(社)地(区),很多新的CVE利用脚本也都会第一之间的公布出来,但是每次要用到什么脚本的时候,就只能自己去查找.或者新的CVE利用脚本出来的时候,又会完美的错过.

现在,经过我一天时间的研究,结合github的API写一下自动监控CVE利用脚本的小工具,并把新结果第一时间的推送到微信上.主要是目前网上有个工具,但是它是E语言写的工具.本人就只想搞懂思路,并用纯Python写一遍.

0x01:思路

一、采用API

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://api.github.com/search/repositories?q=CVE-2020&sort=updated

其中"CVE-2020"为你要搜索的内容通过正则把想要显示的关键字匹配出来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def getNews():  api = "https://api.github.com/search/repositories?q=CVE-2020&sort=updated"  req = requests.get(api).text  cve_total_count=re.findall ('"total_count":*.{1,10}"incomplete_results"',req)[0][14:17]  cve_description=re.findall ('"description":*.{1,200}"fork"',req)[0].replace("\",\"fork\"",'').replace("\"description\":\"",'')  cve_url=re.findall ('"svn_url":*.{1,200}"homepage"',req)[0].replace("\",\"homepage\"",'').replace("\"svn_url\":\"",'')if __name__ == '__main__':    sendNews()
  • "total_count"是一个统计参数,后面我们可以用它来判断是否变化
  • "description"是Github仓库的描述
  • "svn_url"是该CVE的Github页面链接

二、通过延迟60秒时间的前后比对来判断是否有新的脚本出现.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
api = "https://api.github.com/search/repositories?q=CVE-2020&sort=updated"req = requests.get(api).texttotal_count=re.findall ('"total_count":*.{1,10}"incomplete_results"',req)[0][14:17]time.sleep(60)msg1 = str(getNews())msg=str(getNews())[7:]#getNews()是调用上面的抓取关键字的函数返回值if total_count!=getNews()[0]:#比对两个参数值  ...else:  pass

三、如果出现新的脚本,推送至指定微信号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#会弹出网页二维码扫描登录微信itchat.auto_login() #不想每次都扫描,登录时预配置#itchat.auto_login(hotReload=True)#itchat.run()#想给谁发信息,先找到该朋友,备注名my_friend = itchat.search_friends(name = r'大人啊冤枉')user_id = my_friend[0]["UserName"]itchat.send(msg,toUserName = user_id)#获取getNews()内容msg = str(getNews())itchat.send(msg,toUserName = user_id)#把msg的内容发送到指定微信号上,我这里指定的微信号是"大人啊冤枉"(我的小号)

四、完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from itchat.content import *import requests,itchat,re,time
def getNews():    try:       api = "https://api.github.com/search/repositories?q=CVE-2020&sort=updated"       req = requests.get(api).text       cve_total_count=re.findall ('"total_count":*.{1,10}"incomplete_results"',req)[0][14:17]       cve_description=re.findall ('"description":*.{1,200}"fork"',req)[0].replace("\",\"fork\"",'').replace("\"description\":\"",'')       cve_url=re.findall ('"svn_url":*.{1,200}"homepage"',req)[0].replace("\",\"homepage\"",'').replace("\"svn_url\":\"",'')
       return cve_total_count,cve_description,cve_url
    except Exception as e:       print (e,"github链接不通")
def sendNews():    try:       #会弹出网页二维码扫描登录微信       itchat.auto_login()        #不想每次都扫描,登录时预配置       #itchat.auto_login(hotReload=True)       #itchat.run()       #1.想给谁发信息,先找到该朋友,备注名       my_friend = itchat.search_friends(name = r'大人啊冤枉')       #2.找到UserName       user_id = my_friend[0]["UserName"]       #msg1 = str(getNews()) #获取getNews()内容       while True:         api = "https://api.github.com/search/repositories?q=CVE-2020&sort=updated"         req = requests.get(api).text         total_count=re.findall ('"total_count":*.{1,10}"incomplete_results"',req)[0][14:17]         time.sleep(60)         msg1 = str(getNews())         msg=str(getNews())[7:]
         if total_count!=getNews()[0]:          itchat.send(msg,toUserName = user_id)
         else:          pass       #itchat.send(cont,toUserName = my_love)    except Exception as e:       #print (e,"WeChat error")       raise eif __name__ == '__main__':    sendNews()

成果截图

0x02:后话

其实网上很多大佬写的工具都挺好的,但是我们不能只会用别人的工具,我们应该学会自己写工具.自己慢慢的完善自己的不足之处,才能跟上大佬们的脚步,不是么?

根据以上的代码还可以改成RCE脚本的监控,或者两者一起推送.看个人的喜好,可随意增加

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洛米唯熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
printf()详解之终极无惑
printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。
恋喵大鲤鱼
2018/08/03
4.6K0
printf()详解之终极无惑
C语言中的基本输入输出
1.字符输出函数putchar putchar函数是字符输出函数,其功能是在终端(显示器)输出单个字符。其一般调用形式为: putchar(字符变量); 例: putchar(‘A’); /*输出大写字母A */ putchar(x); /*输出字符变量x的值*/ putchar(‘\n’); /*换行*/ 2、字符输入函数getchar getchar函数的功能是接收用户从键盘上输入的一个字符。其一般调用形式为: getchar(); getchar会以返回值的形式返回接收到的字符.
编程范 源代码公司
2018/04/16
4K0
C语言中输入输出所有格式控制符
 最近在重温C语言,发现C语言的输入输出函数scanf和printf函数在控制输入输出时有许多控制符来控制输入输出数据的格式。于是就打算来整理一下。
全栈程序员站长
2022/09/15
2.1K0
C语言—scanf和printf的介绍
printf()的作用是将参数文本输出到屏幕。它的名字里的f代表format(格式化),表示可以定制输出文本的格式。
_孙同学
2024/10/21
2450
C语言—scanf和printf的介绍
C:02---scanf、printf
你以为你输出了helloworld就掌握了printf,来,我接着带你重新认识printf,我这个人比较爱刚代码,来看第一个代码:
用户3479834
2021/02/03
1.2K0
scanf的使用,cin和scanf的区别
对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,关键就是该函数可以按用户指定的格式,把指定的数据显示到显示器屏幕上。该函数原型的一般格式如下: int printf(const char * format, … );
秋名山码神
2022/12/13
1.1K0
scanf的使用,cin和scanf的区别
【C语言指南】printf()函数详解
参数format -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。
倔强的石头
2024/12/06
4000
【C语言指南】printf()函数详解
江哥带你玩转C语言 | 05-printf 和 scanf 函数
printf函数 printf函数称之为格式输出函数,方法名称的最后一个字母f表示format。其功能是按照用户指定的格式,把指定的数据输出到屏幕上 printf函数的调用格式为: printf("格式控制字符串",输出项列表 ); 例如:printf("a = %d, b = %d",a, b); 非格式字符串原样输出, 格式控制字符串会被输出项列表中的数据替换 注意: 格式控制字符串和输出项在数量和类型上***必须一一对应*** ---- 格式控制字符串 形式: %[标志][输出宽度][.精
极客江南
2021/07/11
1.3K0
【C语言指南】scanf()函数详解
关于printf()函数的详细介绍请看这篇文章C语言printf函数详解-CSDN博客
倔强的石头
2024/12/06
6430
【C语言指南】scanf()函数详解
轻松拿捏C语言——关于 printf 和 scanf 那些事儿
将参数文本输出到屏幕。printf中的f代表format(格式化),表示可以定制文本的输出格式。
用户11162265
2024/06/14
6850
轻松拿捏C语言——关于 printf 和 scanf 那些事儿
c语言printf()输出格式大全
大家好,又见面了,我是你们的朋友全栈君。 1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零”0″ %i
全栈程序员站长
2022/09/15
4.2K0
printf和scanf的介绍以及VS解决scanf报错问题
本章内容我们将上章没介绍完的printf和scanf进行讲解,由于VS中scanf不能正常使用,把printf和scanf和VS的scanf问题放在一起讲解,可以更好的帮助初学者解决问题,当然本章我们主要以解决VS中scanf报错问题。
四念处茫茫
2025/01/26
1360
printf和scanf的介绍以及VS解决scanf报错问题
3.格式IO
3.printf函数不会进行任何类型转换(包括隐式转换),它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)
py3study
2020/01/06
9580
【C生万物】C语言数据类型、变量和运算符
C语言提供了了丰富的数据类型来描述生活中的各种数据。 C语言提供的一下数据类型:
爱敲代码的小杨.
2024/05/07
1350
【C生万物】C语言数据类型、变量和运算符
[c语言日寄]数据输入
在C语言的世界里,数据输入是程序与用户交互的重要环节。无论是简单的计算器程序,还是复杂的系统软件,都需要从用户那里获取数据,然后进行处理和输出。今天,我们就通过一个简单的程序来深入探讨数据输入的实现方法、相关知识点以及一些拓展应用。
siy2333
2025/03/24
1100
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
在 C 语言中,#include 是一条预处理指令,它的作用是将指定的头文件内容包含到当前的源文件中,使得当前源文件可以使用头文件中所声明的函数、宏定义、数据类型等各种元素。
Rossy Yan
2024/12/24
1140
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
第2讲:C语言数据类型和变量
使用 整型类型来描述整数,使用 字符类型来描述字符,使用 浮点型类型来描述小数。
用户11290648
2024/09/25
1980
第2讲:C语言数据类型和变量
printf 和scanf 介绍-学习笔记
嘿,相信大家肯定对这两个函数不陌生吧!每次写代码都会用到它们。今天,就让我们来揭开它们神秘的面纱,看看它们到底有多厉害!
LonlyMay
2024/10/21
3420
printf 和scanf 介绍-学习笔记
初识C语言·2
signed和unsigned都是C语言中的关键字,它们的作用是决定字符或者整型的正负号。
_lazy
2024/10/16
1150
初识C语言·2
printf 和 scanf 并没有这么简单
printf 函数我们在前几篇文章已经浅显的了解过,在本文中我们来全面的探讨一下它的具体用法和作用。printf()的作用是将参数文本输出到屏幕。它名字里面的 f 代表 format(格式化),代表可以定制输出文本的格式。
_小羊_
2024/10/16
1230
printf 和 scanf 并没有这么简单
相关推荐
printf()详解之终极无惑
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档