Python对接 xray 和微信实现自动告警


Posted in Python onSeptember 17, 2019

Python对接 xray 和微信实现自动告警 

xray 是什么

xray 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器,支持主动、被动多种扫描方式,自备盲打平台、可以灵活定义 POC,功能丰富,调用简单,支持 Windows / macOS / Linux 多种操作系统,可以满足广大安全从业者的自动化 Web 漏洞探测需求。

如何第一时间知道扫出了漏洞

对于安全工程师来说,扫描器发现了漏洞能第一时间给出告警是非常重要的,因为安全工程师使用的是 xray 的基础爬虫模式,爬虫一直在爬也不会一直人工刷新和查看漏洞报告,也有可能是使用的被动代理模式,让测试人员挂扫描器代理然后访问各个业务页面,但是不知道什么时间测试人员才开始和完成测试,也有可能是日志扫描模式,导入日志使用脚本进行 url 扫描,不知道什么时间才能重放完成。

还有很多公司自建了漏洞管理系统、工单系统等等,如果扫描器发现了漏洞可以自动同步这些系统也将会大大解放安全人员。针对这些场景 xray 有一种漏洞输出模式叫 webhook-output ,在发现漏洞的时候,将会向指定的 url post 漏洞数据,demo 的代码就是

import requests
requests.post(webhook, json=vuln_info)

如果我们写一个中间的转换和转发层,就可以很方便的实现下面的功能了

  • 发送邮件、短信告警
  • 发送微信、企业微信、钉钉、slack告警
  • 漏洞信息同步到自己的数据库中
  • 为该漏洞创建一个工单
  • 使用其他的工具去验证漏洞是否存在

……

使用 webhook 做自动推送

本文就借助Server酱 和 企业微信机器人 ,来演示如何实时通知 xray 发现了漏洞。

xray 的 webhook 是什么

对于 xray,webhook 应该是一个 url 地址,也就是我们需要自己搭建一个 web 服务器,接收到 xray 发送的漏洞信息,然后在将它转发,借助于 Python 的 flask 框架,我们很快写了一个 webhook url 的 demo 出来。

from flask import Flask, request
import requests

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def xray_webhook():
  print(request.json)
  return 'ok'

if __name__ == '__main__':
  app.run()

使用 xray webscan --url http://pentester-web.vulnet/sqli/example1.php?name=root --plugins sqldet --webhook-output http://127.0.0.1:5000/webhook 测试,然后发现成功打印出了漏洞信息。

* Serving Flask app "app.py"
 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
{'create_time': 1566836256580, 'detail': {'host': 'pentester-web.vulnet', 'param': {'key': 'name', 'position': 'query', 'value': "root'and'lW'='lql"}, 'payload': "root'and'lW'='lql", 'port': 80, 'request': '', 'request1': 'GET /sqli/example1.php?name=root%27and%274w%27%3D%274w HTTP/1.1rnHost: pentester-web.vulnetrnUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169rnCookie: key=valuernAccept-Encoding: gziprnrn', 'request2': 'GET /sqli/example1.php?name=root%27and%27lW%27%3D%27lql HTTP/1.1rnHost: pentester-web.vulnetrnUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169rnCookie: key=valuernAccept-Encoding: gziprnrn', 'response': '', 'response1': 'HTTP/1.1 200 OKrn...', 'response2': 'HTTP/1.1 200 OKrn...', 'title': "Generic Boolean based case ['string']", 'type': 'boolean_based', 'url': 'http://pentester-web.vulnet/sqli/example1.php?name=root'}, 'plugin': 'sqldet', 'target': {'url': 'http://pentester-web.vulnet/sqli/example1.php', 'params': [{'position': 'query', 'path': ['name']}]}, 'vuln_class': ''}
127.0.0.1 - - [27/Aug/2019 00:17:36] "POST /webhook HTTP/1.1" 200 -

接下来就是解析 xray 的漏洞信息,然后生成对应的页面模板就好了。需要参考  https://chaitin.github.io/xray/#/guide/vuln   的文档。因为推送不适合发送太大的数据量,所以就选择了基础的一些字段。

from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def xray_webhook():
  vuln = request.json
  content = """## xray 发现了新漏洞
url: {url}
插件: {plugin}
漏洞类型: {vuln_class}
发现时间: {create_time}
请及时查看和处理
""".format(url=vuln["target"]["url"], plugin=vuln["plugin"],
      vuln_class=vuln["vuln_class"] or "Default",
      create_time=str(datetime.datetime.fromtimestamp(vuln["create_time"] / 1000)))
  print(content)
  return 'ok'
if __name__ == '__main__':
  app.run()

Server 酱

Server酱是一款程序员和服务器之间的通信软件,也就是从服务器推报警和日志到手机的工具。

开通并使用上它还是很简单的

  • 登入:用 GitHub 账号登录 http://sc.ftqq.com/3.version ,就能获得一个 SECKEY
  • 绑定:扫码关注完成绑定
  • 发消息:往 http://sc.ftqq.com/{SECKEY}.send 发请求,就可以在微信里收到消息啦

我们先用 Python 写一个简单的 demo,以下所有的 SECKEY 的实际值我都使用 {SECKEY} 代替,大家需要修改为自己的值。

import requests
requests.post("https://sc.ftqq.com/{SECKEY}.send", 
       data={"text": "xray vuln alarm", "desp": "test content"})

很简单就收到了消息,将上面 xray 的漏洞信息结合在一起,就是

from flask import Flask, request
import requests
import datetime
import logging
app = Flask(__name__)
def push_ftqq(content):
  resp = requests.post("https://sc.ftqq.com/SCU645T57f2913b7c0fc69372e997031f7cc4e0561b7f85f2b3d.send",
         data={"text": "xray vuln alarm", "desp": content})
  if resp.json()["errno"] != 0:
    raise ValueError("push ftqq failed, %s" % resp.text)
@app.route('/webhook', methods=['POST'])
def xray_webhook():
  vuln = request.json
  content = """## xray 发现了新漏洞
url: {url}
插件: {plugin}
漏洞类型: {vuln_class}
发现时间: {create_time}
请及时查看和处理
""".format(url=vuln["target"]["url"], plugin=vuln["plugin"],
      vuln_class=vuln["vuln_class"] or "Default",
      create_time=str(datetime.datetime.fromtimestamp(vuln["create_time"] / 1000)))
  try:
    push_ftqq(content)
  except Exception as e:
    logging.exception(e)
  return 'ok'
if __name__ == '__main__':
  app.run()

展示效果如图

Python对接 xray 和微信实现自动告警

企业微信群机器人

企业微信群机器人就像一个普通成员一样,可以发言,可以 @ 人,如果我们接入企业微信群做 xray 的漏洞告警,也会大大方便漏洞的第一时间发现。

开通和使用方法

  • 点击群聊右上角,然后找到 ‘群机器人',然后点击'添加'
  • 复制 Webhook 的地址,保存备用

Python对接 xray 和微信实现自动告警

调用的代码也非常简单,我们只需要展示主要的部分就可以了

def push_wechat_group(content):
  resp = requests.post("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=9651234b-f90e-4064-80fd-0a69d6c1d867",
             json={"msgtype": "markdown",
                "markdown": {"content": content}})
  if resp.json()["errno"] != 0:
    raise ValueError("push wechat group failed, %s" % resp.text)

展示效果如图

Python对接 xray 和微信实现自动告警

总结

以上所述是小编给大家介绍的Python对接 xray 和微信实现自动告警,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python学习数据结构实例代码
May 11 Python
python实现基本进制转换的方法
Jul 11 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
Python计算两个矩形重合面积代码实例
Sep 16 #Python
详解Python3 pickle模块用法
Sep 16 #Python
python scipy卷积运算的实现方法
Sep 16 #Python
python 三元运算符使用解析
Sep 16 #Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 #Python
Python循环实现n的全排列功能
Sep 16 #Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 #Python
You might like
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python创建xml的方法
2015/03/10 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python实现趣味图片字符化
2019/04/30 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
python退出循环的方法
2020/06/18 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
应届大学生求职信
2013/12/01 职场文书
计算机操作自荐信
2013/12/07 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
超级礼物观后感
2015/06/15 职场文书
旅游投诉信范文
2015/07/02 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
手写实现JS中的new
2021/11/07 Javascript