mirror of
https://github.com/chainreactors/spray.git
synced 2026-10-29 03:50:47 +00:00
add dicc.txt as default dict
This commit is contained in:
1 parent
042a111d62
commit
b47834e7af
5 files changed
+111
-98
No files matched your search
+17
-16
@@ -269,27 +269,28 @@ func (opt *Option) PrepareRunner() (*Runner, error) {
|
||||
|
||||
// prepare word
|
||||
dicts := make([][]string, len(opt.Dictionaries))
|
||||
for i, f := range opt.Dictionaries {
|
||||
dicts[i], err = loadFileToSlice(f)
|
||||
if opt.ResumeFrom != "" {
|
||||
dictCache[f] = dicts[i]
|
||||
if len(opt.Dictionaries) == 0 {
|
||||
dicts = append(dicts, pkg.LoadDefaultDict())
|
||||
logs.Log.Warn("not set any dictionary, use default dictionary: https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt")
|
||||
} else {
|
||||
for i, f := range opt.Dictionaries {
|
||||
dicts[i], err = loadFileToSlice(f)
|
||||
if opt.ResumeFrom != "" {
|
||||
dictCache[f] = dicts[i]
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logs.Log.Importantf("Loaded %d word from %s", len(dicts[i]), f)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logs.Log.Importantf("Loaded %d word from %s", len(dicts[i]), f)
|
||||
}
|
||||
|
||||
if opt.Word == "" {
|
||||
if len(opt.Dictionaries) == 0 {
|
||||
opt.Word = "/"
|
||||
} else {
|
||||
opt.Word = "{?"
|
||||
for i, _ := range dicts {
|
||||
opt.Word += strconv.Itoa(i)
|
||||
}
|
||||
opt.Word += "}"
|
||||
opt.Word = "{?"
|
||||
for i, _ := range dicts {
|
||||
opt.Word += strconv.Itoa(i)
|
||||
}
|
||||
opt.Word += "}"
|
||||
}
|
||||
|
||||
if opt.Suffixes != nil {
|
||||
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
package pkg
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/chainreactors/gogo/v2/pkg/fingers"
|
||||
"github.com/chainreactors/parsers"
|
||||
"github.com/chainreactors/utils"
|
||||
"github.com/chainreactors/utils/iutils"
|
||||
"github.com/chainreactors/words/mask"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func LoadTemplates() error {
|
||||
var err error
|
||||
// load fingers
|
||||
Fingers, err = fingers.LoadFingers(LoadConfig("http"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, finger := range Fingers {
|
||||
err := finger.Compile(utils.ParsePorts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, f := range Fingers {
|
||||
for _, rule := range f.Rules {
|
||||
if rule.SendDataStr != "" {
|
||||
ActivePath = append(ActivePath, rule.SendDataStr)
|
||||
}
|
||||
if rule.Favicon != nil {
|
||||
for _, mmh3 := range rule.Favicon.Mmh3 {
|
||||
Mmh3Fingers[mmh3] = f.Name
|
||||
}
|
||||
for _, md5 := range rule.Favicon.Md5 {
|
||||
Md5Fingers[md5] = f.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// load rule
|
||||
var data map[string]interface{}
|
||||
err = json.Unmarshal(LoadConfig("spray_rule"), &data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for k, v := range data {
|
||||
Rules[k] = v.(string)
|
||||
}
|
||||
|
||||
// load mask
|
||||
var keywords map[string]interface{}
|
||||
err = json.Unmarshal(LoadConfig("spray_common"), &keywords)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for k, v := range keywords {
|
||||
t := make([]string, len(v.([]interface{})))
|
||||
for i, vv := range v.([]interface{}) {
|
||||
t[i] = iutils.ToString(vv)
|
||||
}
|
||||
mask.SpecialWords[k] = t
|
||||
}
|
||||
|
||||
var extracts []*parsers.Extractor
|
||||
err = json.Unmarshal(LoadConfig("extract"), &extracts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, extract := range extracts {
|
||||
extract.Compile()
|
||||
|
||||
ExtractRegexps[extract.Name] = []*parsers.Extractor{extract}
|
||||
for _, tag := range extract.Tags {
|
||||
if _, ok := ExtractRegexps[tag]; !ok {
|
||||
ExtractRegexps[tag] = []*parsers.Extractor{extract}
|
||||
} else {
|
||||
ExtractRegexps[tag] = append(ExtractRegexps[tag], extract)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func LoadDefaultDict() []string {
|
||||
return strings.Split(strings.TrimSpace(string(LoadConfig("spray_default"))), "\n")
|
||||
}
|
||||
@@ -1,12 +1,9 @@
|
||||
package pkg
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/chainreactors/gogo/v2/pkg/fingers"
|
||||
"github.com/chainreactors/parsers"
|
||||
"github.com/chainreactors/utils"
|
||||
"github.com/chainreactors/utils/iutils"
|
||||
"github.com/chainreactors/words/mask"
|
||||
"math/rand"
|
||||
"net/url"
|
||||
"path"
|
||||
@@ -119,83 +116,6 @@ func RandHost() string {
|
||||
return *(*string)(unsafe.Pointer(&b))
|
||||
}
|
||||
|
||||
func LoadTemplates() error {
|
||||
var err error
|
||||
// load fingers
|
||||
Fingers, err = fingers.LoadFingers(LoadConfig("http"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, finger := range Fingers {
|
||||
err := finger.Compile(utils.ParsePorts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, f := range Fingers {
|
||||
for _, rule := range f.Rules {
|
||||
if rule.SendDataStr != "" {
|
||||
ActivePath = append(ActivePath, rule.SendDataStr)
|
||||
}
|
||||
if rule.Favicon != nil {
|
||||
for _, mmh3 := range rule.Favicon.Mmh3 {
|
||||
Mmh3Fingers[mmh3] = f.Name
|
||||
}
|
||||
for _, md5 := range rule.Favicon.Md5 {
|
||||
Md5Fingers[md5] = f.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// load rule
|
||||
var data map[string]interface{}
|
||||
err = json.Unmarshal(LoadConfig("rule"), &data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for k, v := range data {
|
||||
Rules[k] = v.(string)
|
||||
}
|
||||
|
||||
// load mask
|
||||
var keywords map[string]interface{}
|
||||
err = json.Unmarshal(LoadConfig("mask"), &keywords)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for k, v := range keywords {
|
||||
t := make([]string, len(v.([]interface{})))
|
||||
for i, vv := range v.([]interface{}) {
|
||||
t[i] = iutils.ToString(vv)
|
||||
}
|
||||
mask.SpecialWords[k] = t
|
||||
}
|
||||
|
||||
var extracts []*parsers.Extractor
|
||||
err = json.Unmarshal(LoadConfig("extract"), &extracts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, extract := range extracts {
|
||||
extract.Compile()
|
||||
|
||||
ExtractRegexps[extract.Name] = []*parsers.Extractor{extract}
|
||||
for _, tag := range extract.Tags {
|
||||
if _, ok := ExtractRegexps[tag]; !ok {
|
||||
ExtractRegexps[tag] = []*parsers.Extractor{extract}
|
||||
} else {
|
||||
ExtractRegexps[tag] = append(ExtractRegexps[tag], extract)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FingerDetect(content []byte) parsers.Frameworks {
|
||||
frames := make(parsers.Frameworks)
|
||||
for _, finger := range Fingers {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//go:generate go run templates/templates_gen.go -t templates -o pkg/templates.go -need http,rule,mask,extract
|
||||
//go:generate go run templates/templates_gen.go -t templates -o pkg/templates.go -need spray
|
||||
package main
|
||||
|
||||
import "github.com/chainreactors/spray/cmd"
|
||||
|
||||
+1
-1
Submodule templates updated: 53643d9011...e980f346de.
Reference in new issue
Block a user