专业编程基础技术教程

网站首页 > 基础教程 正文

基于xxl-job+python2实现企业微信漏洞预警

ccvgpt 2025-03-25 11:23:21 基础教程 21 ℃

背景

最近Spring框架曝出的RCE 0day漏洞,大家来跟我一起思考下以下3个问题:

问题1:你是通过什么渠道了解到的?

基于xxl-job+python2实现企业微信漏洞预警

是通过群消息了解到的,还是通过自己看新闻资讯了解到的,亦或是通过公司内部人员/邮件了解到的?

问题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"] = "漏洞编号:  " + data["code"] + "\n" \
                          + "漏洞名称:  " + data["name"] + "\n" \
                          + "漏洞等级:  " + data["level"] + "\n" \
                          + "批量来源:  " + data["source"] + "\n" \
                          + "发布时间:  " + data["releaseTime"] + "\n" \
                          + "漏洞详细:  [" + data["url"] + "]("+ data["url"] +")"
    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

最近发表
标签列表