微信公众平台对接漏洞资讯附代码

微信公众平台对接漏洞资讯

自定义服务器

1、登录微信公众平台

image-20220324125439309

2、设置与开发-->基本配置

image-20220324125544919

3、启用服务器配置

image-20220324125717311

4、设置token

WECHAT_TOKEN = 'XXXXX'   # token用来可微信公众平台对接 无限制只要与微信公众平台服务器配置处的一致即可

5、配置接口信息

app = Flask(__name__)
@app.route('/wx', methods=['GET', 'POST'])   #/wx是我的路径 可以自己定义

6、判断是否对接成功

def wechat():
    # 获取参数
    signature = request.args.get('signature')
    timestamp = request.args.get('timestamp')
    nonce = request.args.get('nonce')
    # echostr = request.args.get('echostr')

    # 校验参数
    if not all([signature, timestamp, nonce]):  # echostr
        abort(400)
    # 签名加密
    li = [WECHAT_TOKEN, timestamp, nonce]
    # 列表排序重组加密
    li.sort()
    # 拼接字符
    tem_str = "".join(li)
    # sha1加密,以下步骤很重要
    s1 = hashlib.sha1()
    s1.update(tem_str.encode('utf8'))
    sigin = s1.hexdigest()
    # 签名值对比,相同证明请求来自微信
    # 错误返回403页面
    if signature != sigin:
        abort(403)
    else:
        # 正确返回echostr字符串
        # 表示是微信请求
        if request.method == 'GET':
            # 第一次接入服务器
            echostr = request.args.get('echostr')
            if not echostr:
                abort(403)
            else:
                return echostr
        elif request.method == 'POST':
            # 表示微信服务器转发消息到本地服务器
            xml_str = request.data
            # print(xml_str)
            if not xml_str:
                return abort(403)
            # 对xml字符串进行解析
            xml_dict = xmltodict.parse(xml_str)
            xml_dict1 = xml_dict.get('xml')
            # print(xml_dict1)
            # 提取消息类型
            msg_type = xml_dict1.get('MsgType')

            # print(msg_type)

7、读取用户输入的微信消息

            if msg_type == 'text':
                #判断接收到消息是不是文本
                # 这是文本消息
                # 构造返回值,由为微信服务器回复消息
                # 重点:以下参数值一个不能少,一个字母不能错,大小写不能错,键名必须完全一样
                inputdata = xml_dict1.get('Content')
                #获取用户输入的字符
                inputdata = str(inputdata)
                #1⃣以字符串的方式存储

                data = news.getdata(inputdata)
                #调用函数获取redis数据库中的数据并生成URL返回给用户
                resp_dict = {
                    "xml": {
                        'ToUserName': xml_dict1.get('FromUserName'),
                        'FromUserName': xml_dict1.get('ToUserName'),
                        'CreateTime': int(time.time()),
                        'MsgType': 'text',
                        'Content': data,
                    }
                }

8、新用户关注微信回复消息

            elif msg_type == 'event':
                #判断用户操作,如果是关注,就回复data的内容
                data = "感谢小伙伴关注!" + "\n" + "\n" + "点击右下角帮助有惊喜!"

                if 'subscribe' == xml_dict1.get('Event'):
                    resp_dict = {
                        "xml": {
                            'ToUserName': xml_dict1.get('FromUserName'),
                            'FromUserName': xml_dict1.get('ToUserName'),
                            'CreateTime': int(time.time()),
                            'MsgType': 'text',
                            'Content': data
                        }

获取阿里云漏洞库数据到redis

1、连接数据库

connent =  redis.Redis(host='127.0.0.1', port=6379,db=6) 

2、采集CVE和非CVE漏洞(这里偷懒了 页面的话手动输入以下反正只采一次,嫌麻烦的话正则取一下吧!)

    for page in range(1, 2836):     
    		# 采集第一页到2836页,第一次数据采集的时候需要对照漏洞库的页数 手动输入 第一次采集完成 以后就不用了
        url = f'https://avd.aliyun.com/nonvd/list?page={page}'
        #非CVE漏洞库地址https://avd.aliyun.com/nonvd/list?page=
        #CVE漏洞库地址https://avd.aliyun.com/nvd/list?page=

3、这一块的功能就是把采集的数据写入到redis中

   rt = {'编号':number,'漏洞名称':name,'披露日期':date,'漏洞描述':describe,'整改建议':proposal,'等级':level}  
  #键值对 数据来是上面爬的
  	idkey = date + name                
    #redise hash命名  为了方便后面判断 所以这里以时间和漏洞名称组合取名
    connent.hmset(idkey, rt)            
    #hmset写入值

4、数据库示例

image-20220324170534604

从redis取数据用户查询的数据

1、随机取10个字符作为文件名

file_name = './log/' + ''.join(random.sample(string.ascii_letters + string.digits, 10)) + '.xlsx' 

2、redise数据取出来并存入到一个excel文件中

    r = redis.Redis(host='127.0.0.1', port=6379,db=6)   #连接本地redis数据库的第6个DB
    feeds = r.keys("*" + inputdata +"*")    #在redis的hash中 匹配用户输入的字符
    wb = Workbook() #创建工作簿
    ws = wb.active #激活工作表
    ws['A1'] = '漏洞编号'
    ws['B1'] = '披露日期'
    ws['C1'] = 'CVSS评级'
    ws['D1'] = '漏洞名称'
    ws['E1'] = '漏洞描述'
    for key in feeds:
        getdata = r.hmget(key,'编号','漏洞详情','等级','漏洞名称','漏洞描述')
        ws.append([getdata[0].decode('UTF8'), getdata[1].decode('UTF8'), getdata[2].decode('UTF8'),getdata[3].decode('UTF8'),getdata[4].decode('UTF8')])
        wb.save(file_name)

3、文件示例

image-20220324170643013

公众号演示

1、关注回复

image-20220324171241214

2、按照日期查询当天更新的漏洞

image-20220324171444053

image-20220324171628828

3、按照涉及资产查询历史披露漏洞

image-20220324171732483

image-20220324171802175

代码获取

https://wwz.lanzouv.com/iJ3Ev01zan3i

填坑

1、这个东西呀去年年底就已经在搞了,一个人搞起来慢的很,代码写的像狗屎 也在慢慢规范 快了快了

image-20220324171932484

2 个赞

给大哥点赞

1 个赞