xray 是什么
xray 是從長(zhǎng)亭洞鑒核心引擎中提取出的社區(qū)版漏洞掃描神器,支持主動(dòng)、被動(dòng)多種掃描方式,自備盲打平臺(tái)、可以靈活定義 POC,功能豐富,調(diào)用簡(jiǎn)單,支持 Windows / macOS / Linux 多種操作系統(tǒng),可以滿足廣大安全從業(yè)者的自動(dòng)化 Web 漏洞探測(cè)需求。
如何第一時(shí)間知道掃出了漏洞
對(duì)于安全工程師來(lái)說(shuō),掃描器發(fā)現(xiàn)了漏洞能第一時(shí)間給出告警是非常重要的,因?yàn)榘踩こ處熓褂玫氖?xray 的基礎(chǔ)爬蟲模式,爬蟲一直在爬也不會(huì)一直人工刷新和查看漏洞報(bào)告,也有可能是使用的被動(dòng)代理模式,讓測(cè)試人員掛掃描器代理然后訪問(wèn)各個(gè)業(yè)務(wù)頁(yè)面,但是不知道什么時(shí)間測(cè)試人員才開始和完成測(cè)試,也有可能是日志掃描模式,導(dǎo)入日志使用腳本進(jìn)行 url 掃描,不知道什么時(shí)間才能重放完成。
還有很多公司自建了漏洞管理系統(tǒng)、工單系統(tǒng)等等,如果掃描器發(fā)現(xiàn)了漏洞可以自動(dòng)同步這些系統(tǒng)也將會(huì)大大解放安全人員。針對(duì)這些場(chǎng)景 xray 有一種漏洞輸出模式叫
webhook-output
,在發(fā)現(xiàn)漏洞的時(shí)候,將會(huì)向指定的 url post 漏洞數(shù)據(jù),demo 的代碼就是
import requests requests.post(webhook, json=vuln_info)
如果我們寫一個(gè)中間的轉(zhuǎn)換和轉(zhuǎn)發(fā)層,就可以很方便的實(shí)現(xiàn)下面的功能了
- 發(fā)送郵件、短信告警
- 發(fā)送微信、企業(yè)微信、釘釘、slack告警
- 漏洞信息同步到自己的數(shù)據(jù)庫(kù)中
- 為該漏洞創(chuàng)建一個(gè)工單
- 使用其他的工具去驗(yàn)證漏洞是否存在
……
使用 webhook 做自動(dòng)推送
本文就借助Server醬 和 企業(yè)微信機(jī)器人 ,來(lái)演示如何實(shí)時(shí)通知 xray 發(fā)現(xiàn)了漏洞。
xray 的 webhook 是什么
對(duì)于 xray,webhook 應(yīng)該是一個(gè) url 地址,也就是我們需要自己搭建一個(gè) web 服務(wù)器,接收到 xray 發(fā)送的漏洞信息,然后在將它轉(zhuǎn)發(fā),借助于 Python 的 flask 框架,我們很快寫了一個(gè) webhook url 的 demo 出來(lái)。
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
測(cè)試,然后發(fā)現(xiàn)成功打印出了漏洞信息。
* 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 -
接下來(lái)就是解析 xray 的漏洞信息,然后生成對(duì)應(yīng)的頁(yè)面模板就好了。需要參考 ?https://chaitin.github.io/xray/#/guide/vuln? ?的文檔。因?yàn)橥扑筒贿m合發(fā)送太大的數(shù)據(jù)量,所以就選擇了基礎(chǔ)的一些字段。
from flask import Flask, request import requests app = Flask(__name__) @app.route('/webhook', methods=['POST']) def xray_webhook(): vuln = request.json content = """## xray 發(fā)現(xiàn)了新漏洞 url: {url} 插件: {plugin} 漏洞類型: {vuln_class} 發(fā)現(xiàn)時(shí)間: {create_time} 請(qǐng)及時(shí)查看和處理 """.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醬是一款程序員和服務(wù)器之間的通信軟件,也就是從服務(wù)器推報(bào)警和日志到手機(jī)的工具。
開通并使用上它還是很簡(jiǎn)單的
- 登入:用 GitHub 賬號(hào)登錄 http://sc.ftqq.com/3.version ,就能獲得一個(gè) SECKEY
- 綁定:掃碼關(guān)注完成綁定
-
發(fā)消息:往
http://sc.ftqq.com/{SECKEY}.send
發(fā)請(qǐng)求,就可以在微信里收到消息啦
我們先用 Python 寫一個(gè)簡(jiǎn)單的 demo,以下所有的 SECKEY 的實(shí)際值我都使用
{SECKEY}
代替,大家需要修改為自己的值。
import requests requests.post("https://sc.ftqq.com/{SECKEY}.send", data={"text": "xray vuln alarm", "desp": "test content"})
很簡(jiǎn)單就收到了消息,將上面 xray 的漏洞信息結(jié)合在一起,就是
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 發(fā)現(xiàn)了新漏洞 url: {url} 插件: {plugin} 漏洞類型: {vuln_class} 發(fā)現(xiàn)時(shí)間: {create_time} 請(qǐng)及時(shí)查看和處理 """.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()
展示效果如圖
企業(yè)微信群機(jī)器人
企業(yè)微信群機(jī)器人就像一個(gè)普通成員一樣,可以發(fā)言,可以
@
人,如果我們接入企業(yè)微信群做 xray 的漏洞告警,也會(huì)大大方便漏洞的第一時(shí)間發(fā)現(xiàn)。
開通和使用方法
- 點(diǎn)擊群聊右上角,然后找到 ‘群機(jī)器人',然后點(diǎn)擊'添加'
- 復(fù)制 Webhook 的地址,保存?zhèn)溆?
調(diào)用的代碼也非常簡(jiǎn)單,我們只需要展示主要的部分就可以了
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)
展示效果如圖
總結(jié)
以上所述是小編給大家介紹的Python對(duì)接 xray 和微信實(shí)現(xiàn)自動(dòng)告警,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
