From 600904b41a39c7401f9ffcc279b6471813c67ed0 Mon Sep 17 00:00:00 2001 From: shadow1ng Date: Fri, 1 Jan 2021 12:26:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9webscan=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plugins/icmp.go | 8 +------ Plugins/redis.go | 8 +++---- WebScan/lib/check.go | 56 ++++++++++++++++---------------------------- common/flag.go | 2 +- 4 files changed, 26 insertions(+), 48 deletions(-) diff --git a/Plugins/icmp.go b/Plugins/icmp.go index d754dca..fe428e2 100644 --- a/Plugins/icmp.go +++ b/Plugins/icmp.go @@ -18,20 +18,17 @@ var AliveHosts []string var SysInfo = GetSys() type SystemInfo struct { - OS string - //ARCH string + OS string HostName string Groupid string Userid string Username string - //UserHomeDir string } func GetSys() SystemInfo { var sysinfo SystemInfo sysinfo.OS = runtime.GOOS - //sysinfo.ARCH = runtime.GOARCH name, err := os.Hostname() if err == nil { sysinfo.HostName = name @@ -40,17 +37,14 @@ func GetSys() SystemInfo { } u, err := user.Current() - //fmt.Println(err,u) if err == nil { sysinfo.Groupid = u.Gid sysinfo.Userid = u.Uid sysinfo.Username = u.Username - //sysinfo.UserHomeDir = u.HomeDir } else { sysinfo.Groupid = "1" sysinfo.Userid = "1" sysinfo.Username = name - //sysinfo.UserHomeDir = u.HomeDir } return sysinfo diff --git a/Plugins/redis.go b/Plugins/redis.go index d1e3352..6ea5c29 100644 --- a/Plugins/redis.go +++ b/Plugins/redis.go @@ -217,10 +217,10 @@ func writecron(conn net.Conn, host string) (flag bool, text string, err error) { } if strings.Contains(text, "OK") { flag = true - } //else {fmt.Println(text)} - } //else {fmt.Println(text)} - } //else {fmt.Println(text)} - } //else {fmt.Println(text)} + } + } + } + } text = strings.TrimSpace(text) if len(text) > 50 { text = text[:50] diff --git a/WebScan/lib/check.go b/WebScan/lib/check.go index cf85ef8..7736f61 100644 --- a/WebScan/lib/check.go +++ b/WebScan/lib/check.go @@ -24,50 +24,34 @@ type Task struct { Poc *Poc } - - -func checkVul(tasks []Task, ticker *time.Ticker) <-chan Task { +func CheckMultiPoc(req *http.Request, Pocs embed.FS, workers int, pocname string) { + tasks := make(chan Task) var wg sync.WaitGroup - results := make(chan Task) - for _, task := range tasks { - wg.Add(1) - go func(task Task) { - defer wg.Done() - <-ticker.C - isVul, err := executePoc(task.Req, task.Poc) - if err != nil { - return + for i := 0; i < workers; i++ { + go func() { + wg.Add(1) + for task := range tasks { + isVul, err := executePoc(task.Req, task.Poc) + if err != nil { + continue + } + if isVul { + result := fmt.Sprintf("%s %s", task.Req.URL, task.Poc.Name) + common.LogSuccess(result) + } } - if isVul { - results <- task - } - }(task) + wg.Done() + }() } - go func() { - wg.Wait() - close(results) - }() - return results -} - - - -func CheckMultiPoc(req *http.Request, Pocs embed.FS, rate int,pocname string) { - rateLimit := time.Second / time.Duration(rate) - ticker := time.NewTicker(rateLimit) - defer ticker.Stop() - var tasks []Task - for _, poc := range LoadMultiPoc(Pocs,pocname) { + for _, poc := range LoadMultiPoc(Pocs, pocname) { task := Task{ Req: req, Poc: poc, } - tasks = append(tasks, task) - } - for result := range checkVul(tasks, ticker) { - result := fmt.Sprintf("%s %s", result.Req.URL, result.Poc.Name) - common.LogSuccess(result) + tasks <- task } + close(tasks) + wg.Wait() } func executePoc(oReq *http.Request, p *Poc) (bool, error) { diff --git a/common/flag.go b/common/flag.go index d7600c5..78e79d3 100644 --- a/common/flag.go +++ b/common/flag.go @@ -23,7 +23,7 @@ func Flag(Info *HostInfo) { flag.StringVar(&Info.Ports, "p", DefaultPorts, "Select a port,for example: 22 | 1-65535 | 22,80,3306") flag.StringVar(&Info.Command, "c", "", "exec command (ssh)") flag.IntVar(&Info.Threads, "t", 200, "Thread nums") - flag.IntVar(&Info.IcmpThreads, "it", 3300, "Icmp Threads nums") + flag.IntVar(&Info.IcmpThreads, "it", 1100, "Icmp Threads nums") flag.BoolVar(&Info.Isping, "np", false, "not to ping") flag.BoolVar(&Info.Ping, "ping", false, "using ping replace icmp") flag.BoolVar(&Info.IsSave, "no", false, "not to save output log")