Skip to content

Commit 9a1036b

Browse files
committed
fix filefuzz处理不当导致cpu持续上升的bug 2022-07-12 09:21:1657588876
1 parent d9d295e commit 9a1036b

File tree

6 files changed

+38
-36
lines changed

6 files changed

+38
-36
lines changed

brute/filefuzz.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
_ "embed"
55
"github.com/antlabs/strsim"
66
"github.com/hktalent/scan4all/pkg"
7+
"log"
8+
"net/url"
79
"regexp"
810
"strings"
911
"time"
@@ -66,13 +68,10 @@ func reqPage(u string) (*page, *pkg.Response, error) {
6668
}
6769
page.title = gettitle(req.Body)
6870
page.locationUrl = req.Location
69-
regs := strings.Split(strings.TrimSpace(fuzzct), "\n")
70-
InitGeneral()
71-
regs = append(regs, ret...)
72-
for _, reg := range regs {
73-
if x0, ok := req.Header["Content-Type"]; ok && 0 < len(x0) {
74-
matched, _ := regexp.Match(reg, []byte(x0[0]))
75-
if matched {
71+
if x0, ok := req.Header["Content-Type"]; ok && 0 < len(x0) {
72+
x0B := []byte(x0[0])
73+
for _, reg := range regs {
74+
if matched, _ := regexp.Match(reg, x0B); matched {
7675
page.isBackUpPage = true
7776
}
7877
}
@@ -91,16 +90,24 @@ var fuzz404 string
9190

9291
//go:embed dicts/page404Content.txt
9392
var page404Content1 string
93+
var regs []string
9494

9595
func init() {
9696
bakSuffix = pkg.GetVal4File("bakSuffix", bakSuffix)
9797
fuzzct = pkg.GetVal4File("fuzzct", fuzzct)
9898
fuzz404 = pkg.GetVal4File("fuzz404", fuzz404)
9999
page404Content1 = pkg.GetVal4File("page404Content1", page404Content1)
100+
InitGeneral()
101+
regs = strings.Split(strings.TrimSpace(fuzzct), "\n")
102+
regs = append(regs, ret...)
100103
}
101104

102105
// 文件fuzz
103106
func FileFuzz(u string, indexStatusCode int, indexContentLength int, indexbody string) ([]string, []string) {
107+
u01, err := url.Parse(u)
108+
if nil == err {
109+
u = u01.Scheme + "://" + u01.Host + "/"
110+
}
104111
var (
105112
path404 = "/file_not_support"
106113
page200CodeList = []int{200, 301, 302}
@@ -153,6 +160,7 @@ func FileFuzz(u string, indexStatusCode int, indexContentLength int, indexbody s
153160
ch <- struct{}{}
154161
//log.Println(u, " ", payload)
155162
go func(payload string) {
163+
log.Println("fuzz: ", u+payload)
156164
if url, req, err := reqPage(u + payload); err == nil {
157165
// 403 by pass
158166
if url.is403 {

main.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package main
22

33
import (
44
"embed"
5+
"fmt"
56
"github.com/hktalent/scan4all/pkg"
67
naaburunner "github.com/hktalent/scan4all/pkg/naabu/v2/pkg/runner"
78
"github.com/projectdiscovery/gologger"
89
"io"
910
"log"
11+
"net/http"
12+
_ "net/http/pprof"
1013
"runtime"
11-
"sync"
1214
)
1315

1416
//go:embed config/*
@@ -18,17 +20,23 @@ func init() {
1820
pkg.Init2(&config)
1921
}
2022

21-
var Wg sync.WaitGroup
22-
2323
func main() {
24-
naaburunner.Wg = &Wg
2524
defer func() {
25+
log.Println("start close cache, StopCPUProfile... ")
2626
pkg.Cache1.Close()
2727
//if "true" == pkg.GetVal("autoRmCache") {
2828
// os.RemoveAll(pkg.GetVal(pkg.CacheName))
2929
//}
3030
}()
3131
options := naaburunner.ParseOptions()
32+
if options.Debug {
33+
// debug 优化时启用///////////////////////
34+
go func() {
35+
fmt.Println("debug info: \nopen http://127.0.0.1:6060/debug/pprof/\n")
36+
http.ListenAndServe(":6060", nil)
37+
}()
38+
//////////////////////////////////////////*/
39+
}
3240
if false == options.Debug && false == options.Verbose {
3341
// disable standard logger (ref: https://github.com/golang/go/issues/19895)
3442
log.SetFlags(0)
@@ -52,5 +60,4 @@ func main() {
5260
if err != nil {
5361
gologger.Fatal().Msgf("naabuRunner.Httpxrun Could not run httpRunner: %s\n", err)
5462
}
55-
Wg.Wait()
5663
}

pkg/hydra/doNmapResult.go

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,15 @@ import (
1010
"os"
1111
"strconv"
1212
"strings"
13-
"sync"
1413
)
1514

1615
// 弱口令检测
17-
func CheckWeakPassword(ip, service string, port int, wg *sync.WaitGroup) {
18-
defer wg.Done()
16+
func CheckWeakPassword(ip, service string, port int) {
1917
// 在弱口令检测范围就开始检测,结果....
2018
service = strings.ToLower(service)
2119
if pkg.Contains(ProtocolList, service) {
2220
//log.Println("start CheckWeakPassword ", ip, ":", port, "(", service, ")")
23-
wg.Add(1)
24-
Start(ip, port, service, wg)
21+
Start(ip, port, service)
2522
}
2623
}
2724

@@ -34,8 +31,7 @@ func GetAttr(att []xmlquery.Attr, name string) string {
3431
return ""
3532
}
3633

37-
func DoParseXml(s string, wg *sync.WaitGroup, bf *bytes.Buffer) {
38-
defer wg.Done()
34+
func DoParseXml(s string, bf *bytes.Buffer) {
3935
doc, err := xmlquery.Parse(strings.NewReader(s))
4036
if err != nil {
4137
log.Println("DoParseXml: ", err)
@@ -54,8 +50,7 @@ func DoParseXml(s string, wg *sync.WaitGroup, bf *bytes.Buffer) {
5450
service := GetAttr(x.SelectElement("service").Attr, "name")
5551
//bf.Write([]byte(fmt.Sprintf("%s:%s\n", ip, szPort)))
5652
bf.Write([]byte(fmt.Sprintf("http://%s:%s\n", ip, szPort)))
57-
wg.Add(1)
58-
go CheckWeakPassword(ip, service, port, wg)
53+
go CheckWeakPassword(ip, service, port)
5954
// 存储结果到其他地方
6055
//x9 := AuthInfo{IPAddr: ip, Port: port, Protocol: service}
6156
if "true" == enableEsSv {
@@ -78,8 +73,7 @@ func DoParseXml(s string, wg *sync.WaitGroup, bf *bytes.Buffer) {
7873
}
7974
}
8075

81-
func DoNmapRst(wg *sync.WaitGroup, bf *bytes.Buffer) {
82-
defer wg.Done()
76+
func DoNmapRst(bf *bytes.Buffer) {
8377
if x1, ok := pkg.TmpFile[pkg.Naabu]; ok {
8478
for _, x := range x1 {
8579
defer func(r *os.File) {
@@ -89,8 +83,7 @@ func DoNmapRst(wg *sync.WaitGroup, bf *bytes.Buffer) {
8983
b, err := ioutil.ReadFile(x.Name())
9084
if nil == err && 0 < len(b) {
9185
//fmt.Println("read nmap xml file ok: ", len(b))
92-
wg.Add(1)
93-
DoParseXml(string(b), wg, bf)
86+
DoParseXml(string(b), bf)
9487
} else {
9588
log.Println("ioutil.ReadFile(x.Name()): ", err)
9689
}

pkg/hydra/mysql/mysql.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import (
1212

1313
func Check(Host, Username, Password string, Port int) (bool, error) {
1414
_ = mysql.SetLogger(log.New(io.Discard, "", log.Ldate|log.Ltime))
15-
dataSourceName := fmt.Sprintf("%v:%v@tcp(%v:%v)/information_schema?charset=utf8&timeout=%v", Username, Password, Host, Port, 5*time.Second)
15+
dataSourceName := fmt.Sprintf("%v:%v@tcp(%v:%v)/information_schema?charset=utf8&timeout=%v", Username, Password, Host, Port, 2*time.Second)
1616
db, err := sql.Open("mysql", dataSourceName)
1717
if err != nil {
1818
return false, err
1919
}
20-
db.SetConnMaxLifetime(5 * time.Second)
20+
db.SetConnMaxLifetime(2 * time.Second)
2121
db.SetMaxIdleConns(0)
2222
defer db.Close()
2323
err = db.Ping()

pkg/hydra/runner.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"github.com/logrusorgru/aurora"
88
"log"
99
"strings"
10-
"sync"
1110
)
1211

1312
func init() {
@@ -27,10 +26,9 @@ func init() {
2726
}
2827

2928
// 密码破解
30-
func Start(IPAddr string, Port int, Protocol string, wg *sync.WaitGroup) {
31-
defer wg.Done()
29+
func Start(IPAddr string, Port int, Protocol string) {
3230
authInfo := NewAuthInfo(IPAddr, Port, Protocol)
33-
crack := NewCracker(authInfo, true, 128)
31+
crack := NewCracker(authInfo, true, 8)
3432
fmt.Printf("\n[hydra]->开始对%v:%v[%v]进行暴力破解,字典长度为:%d\n", IPAddr, Port, Protocol, crack.Length())
3533
go crack.Run()
3634
//爆破结果获取

pkg/naabu/v2/pkg/runner/targets.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"os"
2121
"regexp"
2222
"strings"
23-
"sync"
2423
)
2524

2625
func (r *Runner) Load() error {
@@ -102,8 +101,6 @@ func (r *Runner) DoSsl(target string) []string {
102101
return []string{}
103102
}
104103

105-
var Wg *sync.WaitGroup
106-
107104
// target域名转多个ip处理
108105
func (r *Runner) DoTargets() (bool, error) {
109106
data, err := ioutil.ReadFile(r.targetsFile)
@@ -182,8 +179,7 @@ func (r *Runner) DoTargets() (bool, error) {
182179
}(x99[0])
183180
}
184181
pkg.TmpFile[pkg.Naabu] = []*os.File{tempInput1}
185-
Wg.Add(1)
186-
hydra.DoNmapRst(Wg, &Naabubuffer)
182+
hydra.DoNmapRst(&Naabubuffer)
187183
defer r.Close()
188184
ioutil.WriteFile(r.targetsFile, []byte(""), os.ModePerm)
189185
log.Println("do namp over naabu ")

0 commit comments

Comments
 (0)