前言
之前用的cra联动xray进行漏扫,因为没有一个及时的推送手段经常会忘记了这个事,今天部署联动server酱的时候发现前人的项目里有些地方需要改动一下才能继续使用。
感谢
以下修改均基于现有GitHub项目:
正文
首先我们先来看一下这个项目的整个逻辑,根据里面的使用说明可以看到当配置好该配置的东西后,运行项目中提供的start.sh
便可以开始运行扫描,内容如下
chmod +x crawlergo
chmod +x xray_linux_amd64
nohup python3 -u serverjiang.py > logs/serverjiang.log 2>&1 &
nohup ./xray_linux_amd64 webscan --listen 127.0.0.1:7777 --webhook-output http://127.0.0.1:2333/webhook > logs/xray.log 2>&1 &
nohup python3 -u launcher.py > logs/launcher.log 2>&1 &
其中重要的就是后面三条nohup
,这里出问题的便是第一条serverjiang.py
中出现了运行的问题,进入这个文件看看
整个代码大概的逻辑可以参照xray官方文档中对webhook
和自动告警
的说明,于是也在这部分发现了问题所在,我们可以看到项目中的代码都与官方文档中基本一致,而文档中对xray扫描到漏洞后post过来的json数据会进行一个if判断
,具体片段如下
可以结合说明来理解这部分,因为xray在漏洞扫描时的信息格式有两种,分别为漏洞信息
和web统计信息
,而统计信息是我们不需要知道的信息,所以这里写了一个判断,当webhook发送过来的json数据中含有vuln_class
这个标识的时候才会进入推送部分的代码,而这个标识我们可以看到官方代码中给出的实例,大致上就是当有这个标识时便是漏洞信息,反之则是统计信息。
接下来回到目前的代码,为什么现在会出现问题了呢,可以看到文档中webhook说明部分,现在的xray通过webhook发送的json中,已经没有了这个vuln_class
标识,所以在逻辑上我们这个代码没有进入到推送部分,于是修改判断部分,通过判断数据中是否存在detail
来判断webhook发送的是不是漏洞信息
if "detail" not in vuln:
print("no match")
return "ok"
print("match")
测试已经可以命中漏洞信息,接下来往下看,因为漏洞信息的json结构已经和项目发布时有出入,所以后面的format
部分也要进行相应修改
.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)))
具体修改format里格式化的json参数需要参考自己xray回传回来的hook信息,因为版本不同可能会出现差异,具体情况具体分析,下面是我目前的修改后代码
.format(url=vuln["data"]["target"]["url"], plugin=vuln["data"]["plugin"],
vuln_class=vuln["type"] or "Default",
create_time=str(datetime.datetime.fromtimestamp(vuln["data"]["create_time"] / 1000)))
现在就能对漏洞信息进行正常的推送了
本文作者:Losir 本文链接:Xray联动Server酱的修修补补 - https://ionssource.cn/archives/62/ 版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 Losir 所有,未经允许不得转载!
最后一段
.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)))
对比 项目里面的代码没有什么变化。是不是贴出来的搞错来了呢?
嗷,不是搞错了,这里我的意思是标出需要修改的代码部分,具体format的内容需要修改哪些得看一下自己的xrayhook过来的数据,我修改一下文章内容吧,好像是有点没说清|´・ω・)ノ