百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

基于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...

取消回复欢迎 发表评论: