spray/pkg/fingerprinthub.go

55 lines
1.1 KiB
Go
Raw Normal View History

2024-02-20 18:25:43 +08:00
package pkg
import (
"github.com/chainreactors/parsers"
"strings"
)
type FingerPrintHub struct {
Name string `json:"name"`
FaviconHash []string `json:"favicon_hash"`
Keyword []string `json:"keyword"`
Path string `json:"path"`
Headers map[string]string `json:"headers"`
}
func FingerPrintHubDetect(header, body string) parsers.Frameworks {
frames := make(parsers.Frameworks)
2024-02-20 19:34:35 +08:00
2024-02-20 18:25:43 +08:00
for _, finger := range FingerPrintHubs {
status := false
2024-02-20 19:34:35 +08:00
2024-02-20 18:25:43 +08:00
for _, key := range finger.Keyword {
if strings.Contains(body, key) {
status = true
} else {
status = false
2024-02-20 19:34:35 +08:00
break
2024-02-20 18:25:43 +08:00
}
}
2024-02-20 19:34:35 +08:00
if !status {
continue
}
2024-02-20 18:25:43 +08:00
for k, v := range finger.Headers {
if v == "*" && strings.Contains(header, k) {
status = true
} else if strings.Contains(header, k) && strings.Contains(header, v) {
status = true
} else {
status = false
2024-02-20 19:34:35 +08:00
break
2024-02-20 18:25:43 +08:00
}
}
2024-02-20 19:34:35 +08:00
2024-02-20 18:25:43 +08:00
if status {
frame := &parsers.Framework{
Name: finger.Name,
From: parsers.FrameFromDefault,
Tags: []string{"fingerprinthub"},
}
frames[frame.Name] = frame
}
}
return frames
}