MENU

Xray联动Server酱的修修补补

December 30, 2020 • 安全

前言

之前用的cra联动xray进行漏扫,因为没有一个及时的推送手段经常会忘记了这个事,今天部署联动server酱的时候发现前人的项目里有些地方需要改动一下才能继续使用。

感谢

以下修改均基于现有GitHub项目:

Xray_and_crwlergo_in_server

正文

首先我们先来看一下这个项目的整个逻辑,根据里面的使用说明可以看到当配置好该配置的东西后,运行项目中提供的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判断,具体片段如下

mark

可以结合说明来理解这部分,因为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 所有,未经允许不得转载!

Last Modified: February 8, 2021
Leave a Comment

2 Comments
  1. 带头大哥

    最后一段
    .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)))
    对比 项目里面的代码没有什么变化。是不是贴出来的搞错来了呢?

    1. @带头大哥嗷,不是搞错了,这里我的意思是标出需要修改的代码部分,具体format的内容需要修改哪些得看一下自己的xrayhook过来的数据,我修改一下文章内容吧,好像是有点没说清|´・ω・)ノ

开往-友链接力