修改webscan结构

This commit is contained in:
shadow1ng 2021-01-01 12:26:38 +08:00
parent fbf480b3a8
commit 600904b41a
4 changed files with 26 additions and 48 deletions

View File

@ -18,20 +18,17 @@ var AliveHosts []string
var SysInfo = GetSys() var SysInfo = GetSys()
type SystemInfo struct { type SystemInfo struct {
OS string OS string
//ARCH string
HostName string HostName string
Groupid string Groupid string
Userid string Userid string
Username string Username string
//UserHomeDir string
} }
func GetSys() SystemInfo { func GetSys() SystemInfo {
var sysinfo SystemInfo var sysinfo SystemInfo
sysinfo.OS = runtime.GOOS sysinfo.OS = runtime.GOOS
//sysinfo.ARCH = runtime.GOARCH
name, err := os.Hostname() name, err := os.Hostname()
if err == nil { if err == nil {
sysinfo.HostName = name sysinfo.HostName = name
@ -40,17 +37,14 @@ func GetSys() SystemInfo {
} }
u, err := user.Current() u, err := user.Current()
//fmt.Println(err,u)
if err == nil { if err == nil {
sysinfo.Groupid = u.Gid sysinfo.Groupid = u.Gid
sysinfo.Userid = u.Uid sysinfo.Userid = u.Uid
sysinfo.Username = u.Username sysinfo.Username = u.Username
//sysinfo.UserHomeDir = u.HomeDir
} else { } else {
sysinfo.Groupid = "1" sysinfo.Groupid = "1"
sysinfo.Userid = "1" sysinfo.Userid = "1"
sysinfo.Username = name sysinfo.Username = name
//sysinfo.UserHomeDir = u.HomeDir
} }
return sysinfo return sysinfo

View File

@ -217,10 +217,10 @@ func writecron(conn net.Conn, host string) (flag bool, text string, err error) {
} }
if strings.Contains(text, "OK") { if strings.Contains(text, "OK") {
flag = true flag = true
} //else {fmt.Println(text)} }
} //else {fmt.Println(text)} }
} //else {fmt.Println(text)} }
} //else {fmt.Println(text)} }
text = strings.TrimSpace(text) text = strings.TrimSpace(text)
if len(text) > 50 { if len(text) > 50 {
text = text[:50] text = text[:50]

View File

@ -24,50 +24,34 @@ type Task struct {
Poc *Poc Poc *Poc
} }
func CheckMultiPoc(req *http.Request, Pocs embed.FS, workers int, pocname string) {
tasks := make(chan Task)
func checkVul(tasks []Task, ticker *time.Ticker) <-chan Task {
var wg sync.WaitGroup var wg sync.WaitGroup
results := make(chan Task) for i := 0; i < workers; i++ {
for _, task := range tasks { go func() {
wg.Add(1) wg.Add(1)
go func(task Task) { for task := range tasks {
defer wg.Done() isVul, err := executePoc(task.Req, task.Poc)
<-ticker.C if err != nil {
isVul, err := executePoc(task.Req, task.Poc) continue
if err != nil { }
return if isVul {
result := fmt.Sprintf("%s %s", task.Req.URL, task.Poc.Name)
common.LogSuccess(result)
}
} }
if isVul { wg.Done()
results <- task }()
}
}(task)
} }
go func() { for _, poc := range LoadMultiPoc(Pocs, pocname) {
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) {
task := Task{ task := Task{
Req: req, Req: req,
Poc: poc, Poc: poc,
} }
tasks = append(tasks, task) tasks <- task
}
for result := range checkVul(tasks, ticker) {
result := fmt.Sprintf("%s %s", result.Req.URL, result.Poc.Name)
common.LogSuccess(result)
} }
close(tasks)
wg.Wait()
} }
func executePoc(oReq *http.Request, p *Poc) (bool, error) { func executePoc(oReq *http.Request, p *Poc) (bool, error) {

View File

@ -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.Ports, "p", DefaultPorts, "Select a port,for example: 22 | 1-65535 | 22,80,3306")
flag.StringVar(&Info.Command, "c", "", "exec command (ssh)") flag.StringVar(&Info.Command, "c", "", "exec command (ssh)")
flag.IntVar(&Info.Threads, "t", 200, "Thread nums") 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.Isping, "np", false, "not to ping")
flag.BoolVar(&Info.Ping, "ping", false, "using ping replace icmp") flag.BoolVar(&Info.Ping, "ping", false, "using ping replace icmp")
flag.BoolVar(&Info.IsSave, "no", false, "not to save output log") flag.BoolVar(&Info.IsSave, "no", false, "not to save output log")