基于xxl-job+python2实现企业微信漏洞预警
ztj100 2025-05-26 20:21 12 浏览 0 评论
背景
最近Spring框架曝出的RCE 0day漏洞,大家来跟我一起思考下以下3个问题:
问题1:你是通过什么渠道了解到的?
是通过群消息了解到的,还是通过自己看新闻资讯了解到的,亦或是通过公司内部人员/邮件了解到的?
问题2:你是什么时候了解到的?
是漏洞爆出当天,还是n天后?
问题3:你可知0day,1day,nday的漏洞有什么区别吗?
0day:只有你知道的漏洞,通杀。
1day:刚公布后的漏洞,或者公布后没有poc exp的漏洞。或者指刚公布一天的漏洞,大部分通杀。
nday:公布很久,流传很广的漏洞,少数不更新的才能用。相对来说,通杀性不高
通过上面3个问题的反思,一方面能反映出我们发现漏洞不及时,另一方面能反映出我们的安全意识不够,很容易给公司造成很大的经济损失,那我们该怎么解决呢?我也调研了下,咱们来看看别人家的公司都是怎么做的。
大型公司:有专业的安全人员或安全部门,专门来处理漏洞发现,漏洞预警。
中型公司:使用漏洞扫描软件来发现的。
小型公司:干脆就没有这个安全意识。
目标
漏洞爆出后第一时间被通知到,由几个人来决定是否处理。处理的话,指定负责人来牵动推动直到完毕。
我们如何做的呢?
明确目标后,咱们就可以行动了,在行动之前我们需要解决这3个问题:
- 从哪里能发现漏洞呢?
华云安,斗象智能安全,漏洞盒子,freebuf
- 怎么进行漏洞预警?
企业微信,钉钉,邮件,短信等等
- 怎么实现呢?
java,python,shell脚本等等
我们最终方案是基于xxl-job+python2实现企业微信漏洞预警。
来跟大家唠唠为啥用python2不用python3吧?
一开始确实用python3写的,当配置到xxl-job上去的时候,发现服务器上python环境是python2的环境,很多人说升级下不就可以了吧。一方面考虑到还要让运维人员配合一下。另一方面当前服务器上还有别人写的python脚本,我们也知道python3和2差很多,就会导致别人脚本不能运行了,这是主要原因。
具体代码实现:
#-*- coding: UTF-8 -*-
import urllib2
import urllib
import json
import time
import datetime
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 爬取华云安漏洞预警
def huayunan():
url = "https://vti.huaun.com/api/warning/queryList"
curTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
befor10Minutes = (datetime.datetime.now() + datetime.timedelta(minutes=-10)).strftime("%Y-%m-%d %H:%M:%S")
params = \
{
"dict": 10,
"total": 0,
"pageSize": 10,
"pageNumber": 1,
"showquery": [
],
"queryfield": [
{
"fieldname": "releaseTime",
"fieldvalue": "'" + befor10Minutes + "' and '" + curTime + "'",
"terms": "between"
}
],
"querytype": "and",
"sort": {
"prop": "releaseTime",
"order": "desc"
}
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE',
'Content-Type': 'application/json;utf-8'
}
respJson = httpPostJson(url, params, headers)
list = respJson["data"]["list"]
for i in range(len(list)):
item = list[i]
level = ""
if item["vulLevel"] == 4:
level = "超危"
elif item["vulLevel"] == 3:
level = "高危"
elif item["vulLevel"] == 2:
level = "中危"
else:
level = "低危"
data = {}
data["name"] = item["name"]
data["level"] = level
data["code"] = item["vulCode"]
data["source"] = item["source"]
data["releaseTime"] = item["releaseTime"]
data["url"] = "https://vti.huaun.com/watchVul?warnId=" + item["id"]
# 发送企微预警
sendBugWarn(data)
# 发送企微预警
def sendBugWarn(data):
params = {}
contentMap = {}
level = ["超危", "高危"]
levelColor = "comment"
if data["level"] in level:
levelColor = "warning"
params["msgtype"] = "markdown"
contentMap["content"] = "漏洞编号: <font color=\"comment\">" + data["code"] + "</font>\n" \
+ "漏洞名称: <font color=\"comment\">" + data["name"] + "</font>\n" \
+ "漏洞等级: <font color=\""+ levelColor +"\">" + data["level"] + "</font>\n" \
+ "批量来源: <font color=\"comment\">" + data["source"] + "</font>\n" \
+ "发布时间: <font color=\"comment\">" + data["releaseTime"] + "</font>\n" \
+ "漏洞详细: <font color=\"comment\">[" + data["url"] + "]("+ data["url"] +")</font>"
params["markdown"] = contentMap
url = "企业微信机器人地址"
headers = {
'Content-Type': 'Content-Type: application/json'
}
req = urllib2.Request(url=url, data=json.dumps(params), headers=headers)
res = urllib2.urlopen(req)
res = res.read().decode()
print("推送结果:" + res)
# http post请求
def httpPostJson(url, params, headers):
print("httpPostJson-请求url:" + url + "\n请求参数:" + json.dumps(params))
req = urllib2.Request(url=url, data=json.dumps(params), headers = headers)
res = urllib2.urlopen(req)
res = res.read().decode()
resJson = json.loads(res, encoding='utf-8')
return resJson
def httpGet(url):
print("httpGet-请求url:" + url)
req = urllib2.Request(url=url)
res = urllib2.urlopen(req)
res = res.read().decode()
print(res)
resJson = json.loads(res, encoding='utf-8')
return resJson
if __name__ == '__main__':
huayunan()
最终效果
漏洞编号: CVE-2022-1162,Huaun-2022-5468
漏洞名称: Gitlab 劫持漏洞
漏洞等级: 超危
批量来源: Gitlab 官方
发布时间: 2022-04-06 18:35:42
漏洞详细: https://vti.huaun.com/watchVul?warnId=81d28ae130a446c28caae299e46ef858
相关推荐
- Spring IoC Container 原理解析
-
IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例...
- SQL注入:程序员亲手打开的潘多拉魔盒,如何彻底封印它?
-
一、现象:当你的数据库开始"说话",灾难就来了场景还原:...
- Java核心知识3:异常机制详解
-
1什么是异常异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到、网络连接失败、空指针、非法参数等。异常是一个事件,它发生在程序运行期间,且中断程序的运行。...
- MyBatis常用工具类三-使用SqlRunner操作数据库
-
MyBatis中提供了一个非常实用的、用于操作数据库的SqlRunner工具类,该类对JDBC做了很好的封装,结合SQL工具类,能够很方便地通过Java代码执行SQL语句并检索SQL执行结果。SqlR...
- 爆肝2W字梳理50道计算机网络必问面试题
-
1.说说HTTP常用的状态码及其含义?思路:这道面试题主要考察候选人,是否掌握HTTP状态码这个基础知识点。...
- SpringBoot整合Vue3实现发送邮箱验证码功能
-
1.效果演示2.思维导图...
- 最全JAVA面试题及答案(200+)
-
Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,Java开发工具包,提供了Java的开发环境和运行环境。JRE:JavaRunti...
- Java程序员找工作翻车现场!你的项目描述踩了这几个坑?
-
Java程序员找工作翻车现场!你的项目描述踩了这几个坑?噼里啪啦敲了三年代码,简历一投石沉大海?兄弟,问题可能出在项目描述上!知道为什么面试官看你的项目像看天书吗?因为你写了三个致命雷区:第一,把项目...
- 2020最新整理JAVA面试题附答案,包含19个模块共208道面试题
-
包含的模块:本文分为十九个模块,分别是:Java基础、容器、多线程、反射、对象拷贝、JavaWeb、异常、网络、设计模式、Spring/SpringMVC、SpringBoot/Spring...
- 底层原理深度解析:equals() 与 == 的 JVM 级运作机制
-
作为Java开发者,你是否曾在集合操作时遇到过对象比较的诡异问题?是否在使用HashMap时发现对象丢失?这些问题往往源于对equals()和==的误解,以及实体类中这两个方法的不当实...
- 雪花算法,什么情况下发生 ID 冲突?
-
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的...
- 50个Java编程技巧,免费送给大家
-
一、语法类技巧1.1.使用三元表达式普通:...
- 如何规划一个合理的JAVA项目工程结构
-
由于阿里Java开发手册对于工程结构的描述仅限于1、2节简单的概述,不能满足多样的实际需求,本文根据多个项目中工程的实践,分享一种较为合理实用的工程结构。工程结构的原则有依据、实用。有依据的含义是指做...
- Java 编程技巧之单元测试用例编写流程
-
温馨提示:本文较长,同学们可收藏后再看:)前言...
- MyBatis核心源码解读:SQL执行流程的奇妙之旅
-
MyBatis核心源码解读:SQL执行流程的奇妙之旅大家好呀!今天咱们要来一场既烧脑又有趣的旅程——探索MyBatis这个强大框架的核心秘密。你知道吗?当你在项目里轻轻松松写一句“select*f...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)