mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
修改webscan结构
This commit is contained in:
parent
fbf480b3a8
commit
600904b41a
@ -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
|
||||||
|
@ -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]
|
||||||
|
@ -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) {
|
||||||
|
@ -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")
|
||||||
|
Loading…
Reference in New Issue
Block a user