钉钉webhook小笔记

好久没记笔记了,上次记笔记还是在上次

当时还是个菜鸡,现在也是

没事闲搞想 xray使用webhook发送结果到钉钉

因为xray的输出格式是固定的,所以需要一个中间的服务接受再按钉钉/企微格式发送下,这就用到方便的flask了。

先上代码

from flask import Flask, request
import requests
import datetime
import json

app = Flask(__name__)



#钉钉webhook接口
def DingWebhook(message):
    url='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx'
    #need with keyword
    program={
        "markdown": {
            "title":"xray通知",
            "text": message+"xx关键字xx"
        },
        "msgtype": "markdown"
    }
    headers={'Content-Type': 'application/json'}
    f=requests.post(url,data=json.dumps(program),headers=headers)
    print(f.text)



@app.route('/webhook', methods=['POST'])
def xray_webhook():
    data = request.json
    #print("****************************")
    #print(data)
    #print("****************************")
    data_type = data['type']
    vuln = data["data"]
    # 因为还会收到 https://chaitin.github.io/xray/#/webhook/statistic 的数据
    if data_type != "web_vuln":
        return "ok"
    content = """ ## xray 发现了新漏洞\n

url: {url}

插件: {plugin}

payload: {payload}

发现时间: {create_time}

请及时查看和处理
""".format(url=vuln["target"]["url"], payload=vuln['detail']['payload'],plugin=vuln["plugin"],
           create_time=str(datetime.datetime.fromtimestamp(vuln["create_time"] / 1000)))
    print(content)
    DingWebhook(content)
    return 'ok'

if __name__ == '__main__':
    app.run(host='0.0.0.0',port='6655')

 python3运行脚本,扫描时候后边加上一句    --wo http://127.0.0.1:6655/webhook 就ok了

钉钉webhook小笔记_第1张图片

 

有几个地方需要注意

  • 钉钉的md标题是不显示在聊天内容里边的,只显示在聊天窗口,app的状态栏提示等
  • 代码里边的 `xx关键字xx`是钉钉里边设置的,防止被攻击滥用,内容必须包含指定关键字
  • 企微和钉钉的发送大同小异,格式稍微有点区别
  • markdown格式比text清晰、明了

你可能感兴趣的:(笔记,flask,python,后端)