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将字符串转换成数组的方法
Apr 29 Python
Python制作数据导入导出工具
Jul 31 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python get获取页面cookie代码实例
Sep 12 Python
python实现桌面壁纸切换功能
Jan 21 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
python生成特定分布数的实例
Dec 05 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 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
Terran剧情介绍
2020/03/14 星际争霸
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php实现的验证码文件类实例
2015/06/18 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
javascript 数组排序函数
2009/08/20 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
python实现批量修改文件名代码
2017/09/10 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
Python join()函数原理及使用方法
2020/11/14 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
秋季运动会稿件
2014/01/30 职场文书
大学生村官承诺书
2014/03/28 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
创业计划书之甜品店
2019/09/18 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
golang日志包logger的用法详解
2021/05/05 Golang