xray的 webhook如何把它Hook住?^(* ̄(oo) ̄)^

xray webhook

xray可以通过webhook传递扫描信息,官方文档也是一笔带过,可能大多数人都不清楚,或者仅仅知道有这么个东西,但是不知道怎么使用,webhook是xray被动监听模式下的一种输出结构和方式。相比输出Json和txt格式,webhook输出漏洞是实时的,试问谁不想第一时间看到漏洞信息呢。前阵子我通过抓取流量的方式抓到了参数,然后把这个请求解了,开放给大家看下,免得再在解包上浪费精力

go 复制代码
type Webhookpara struct {
	Data interface{} `json:"data"`
	Type string      `json:"type"`
}

// web_vuln模式下的xray结构:
type ExtraParam struct {
	Param map[string]interface{} `json:"param"`
}
type Detail struct {
	Addr     string     `json:"addr"`
	Extra    ExtraParam `json:"extra"`
	Payload  string     `json:"payload"`
	Snapshot [][]string `json:"snapshot"`
}
type Target struct {
	Url string `json:"url"`
}
type VulnData struct {
	CreateTime int64  `json:"create_time"`
	Detail     Detail `json:"detail"`
	Plugin     string `json:"plugin"`
	Target     Target `json:"target"`
}

// web_statistic模式下的xray结构
type StatisticData struct {
	AverageResponseTime     float64 `json:"average_response_time"`
	NumFoundUrls            int     `json:"num_found_urls"`
	NumScannedUrls          int     `json:"num_scanned_urls"`
	NumSentHttpRequests     int     `json:"num_sent_http_requests"`
	RatioFailedHttpRequests float64 `json:"ratio_failed_http_requests"`
	RatioProgress           float64 `json:"ratio_progress"`
}

// 传输类型为statistic的json结构体结构:扫描器状态信息
func StatistictoJSON(a interface{}) StatisticData {
	jsonStr, err1 := json.Marshal(a)
	if err1 != nil {
		fmt.Println("序列化xray web_statistic类型数据失败", err1)
		logging.RuntimeLog.Error(err1)
	}
	var res StatisticData
	if err := json.Unmarshal([]byte(jsonStr), &res); err != nil {
		fmt.Println("反序列化xray web_statistic类型数据失败", err)
		logging.RuntimeLog.Error(err)
	}
	return res

}

// 传输类型为vuln的json结构体结构:详细漏洞信息
func VulntoJSON(a interface{}) VulnData {
	jsonstr, err1 := json.Marshal(a)
	if err1 != nil {
		fmt.Println("序列化xray web_vuln类型数据失败", err1)
		logging.RuntimeLog.Error(err1)
	}
	var res VulnData
	if err := json.Unmarshal([]byte(jsonstr), &res); err != nil {
		fmt.Println("反序列化xray web_vuln类型数据失败", err)
		logging.RuntimeLog.Error(err)
	}
	return res
}

上面是结构及解析,下面是一个基于golang gin使用例子,有的字段时有时无,这种字段我都放弃掉了,如果都要判断代码量会很多,type 的类型有 :"web_statistic" ,"web_vuln","host_vuln" ,"subdomain"等类型,但是被动下只有web_statistic和web_vuln才有意义。

go 复制代码
// XrayWebHook 用于接收xray json请求
func XrayWebHook(c *gin.Context) {
	var req Webhookpara
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(400, gin.H{
			"status": 1,
			"mes":    err.Error(),
		})
		return
	}
	if req.Type == "web_statistic" {
		var r StatisticData
		fmt.Println("xray web_statistic原始数据:", req.Data)
		r = StatistictoJSON(req.Data)
		if r.AverageResponseTime == 0 {
			//为0扫描结束,可以将此状态做进一步处理
	}
	if req.Type == "web_vuln" {
		var r VulnData
		r = VulntoJSON(req.Data)
		fmt.Println("扫描目标:", r.Target.Url)
		fmt.Println("漏洞类型:", r.Plugin)
		fmt.Println("payload:", r.Detail.Payload)
		
	}
	c.JSON(200, gin.H{
		"status": 0,
		"mes":    "successfully",
	})
}
相关推荐
格林威8 小时前
Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·算法·安全·计算机视觉·堡盟相机·baumer相机
K·Herbert9 小时前
OpenClaw 私人电脑部署风险
人工智能·安全·编辑器
枷锁—sha9 小时前
【CTFshow-pwn系列】06_前置基础【pwn 035】详解:利用 SIGSEGV 信号处理机制
java·开发语言·安全·网络安全·信号处理
EverydayJoy^v^9 小时前
RH134学习进程——十一.管理网络安全
学习·安全·web安全
zhengfei6119 小时前
Burp Suite 与AI之间的桥梁。
网络·安全·自动化
大模型玩家七七10 小时前
证据不足 vs 证据冲突:哪个对模型更致命
数据库·人工智能·pytorch·深度学习·安全
星幻元宇VR10 小时前
消防安全教育展厅设备|消防器材装备3D展示系统
安全·3d·虚拟现实
艾莉丝努力练剑10 小时前
【Linux进程控制(三)】实现自主Shell命令行解释器
linux·运维·服务器·c++·人工智能·安全·云原生
asaotomo10 小时前
一款 AI 驱动的新一代安全运维代理 —— DeepSentry(深哨)
运维·人工智能·安全·ai·go
雨季66611 小时前
Flutter 三端应用实战:OpenHarmony “安全文本溢出处理调节器”
开发语言·前端·安全·flutter·交互