From 5c119e97ae97a54ac4337e0fd9bc7a43d44fe6b0 Mon Sep 17 00:00:00 2001 From: dksslq <1578756762@qq.com> Date: Wed, 24 May 2023 19:43:05 +0800 Subject: [PATCH 1/7] Add some spaces --- WebScan/InfoScan.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebScan/InfoScan.go b/WebScan/InfoScan.go index 30c3410..bf71d68 100644 --- a/WebScan/InfoScan.go +++ b/WebScan/InfoScan.go @@ -38,7 +38,7 @@ func InfoCheck(Url string, CheckData *[]CheckDatas) []string { infoname = removeDuplicateElement(infoname) if len(infoname) > 0 { - result := fmt.Sprintf("[+] InfoScan:%-25v %s ", Url, infoname) + result := fmt.Sprintf("[+] InfoScan: %-25v %s ", Url, infoname) common.LogSuccess(result) return infoname } From 7bf79b60af525022fef33033e52782bbcdbbe0da Mon Sep 17 00:00:00 2001 From: dksslq <1578756762@qq.com> Date: Wed, 24 May 2023 19:44:42 +0800 Subject: [PATCH 2/7] Update NetBIOS.go --- Plugins/NetBIOS.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/NetBIOS.go b/Plugins/NetBIOS.go index e9ad936..1a0676b 100644 --- a/Plugins/NetBIOS.go +++ b/Plugins/NetBIOS.go @@ -237,7 +237,7 @@ func (info *NetBiosInfo) String() (output string) { } if text == "" { } else if info.DomainControllers != "" { - output = fmt.Sprintf("[+]DC %-24s", text) + output = fmt.Sprintf("[+] DC:%-24s", text) } else { output = fmt.Sprintf("%-30s", text) } From d151ea2c7f0e15c018e3f4bca185639109dc1360 Mon Sep 17 00:00:00 2001 From: dksslq <1578756762@qq.com> Date: Wed, 24 May 2023 19:49:52 +0800 Subject: [PATCH 3/7] Remove unused space --- Plugins/NetBIOS.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/NetBIOS.go b/Plugins/NetBIOS.go index 1a0676b..22111a7 100644 --- a/Plugins/NetBIOS.go +++ b/Plugins/NetBIOS.go @@ -18,7 +18,7 @@ func NetBIOS(info *common.HostInfo) error { netbios, _ := NetBIOS1(info) output := netbios.String() if len(output) > 0 { - result := fmt.Sprintf("[*] NetBios: %-15s %s ", info.Host, output) + result := fmt.Sprintf("[*] NetBios: %-15s %s", info.Host, output) common.LogSuccess(result) return nil } From f0cb31a6d231e2c2f10db1c7ed69ee5a7cfb4076 Mon Sep 17 00:00:00 2001 From: dksslq <1578756762@qq.com> Date: Wed, 24 May 2023 19:53:17 +0800 Subject: [PATCH 4/7] Remove unused spaces --- common/flag.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/flag.go b/common/flag.go index eaeca0d..d4c771f 100644 --- a/common/flag.go +++ b/common/flag.go @@ -57,8 +57,8 @@ func Flag(Info *HostInfo) { flag.StringVar(&Passfile, "pwdf", "", "password file") flag.StringVar(&PortFile, "portf", "", "Port File") flag.StringVar(&PocPath, "pocpath", "", "poc file path") - flag.StringVar(&RedisFile, "rf", "", "redis file to write sshkey file (as: -rf id_rsa.pub) ") - flag.StringVar(&RedisShell, "rs", "", "redis shell to write cron file (as: -rs 192.168.1.1:6666) ") + flag.StringVar(&RedisFile, "rf", "", "redis file to write sshkey file (as: -rf id_rsa.pub)") + flag.StringVar(&RedisShell, "rs", "", "redis shell to write cron file (as: -rs 192.168.1.1:6666)") flag.BoolVar(&IsWebCan, "nopoc", false, "not to scan web vul") flag.BoolVar(&IsBrute, "nobr", false, "not to Brute password") flag.IntVar(&BruteThread, "br", 1, "Brute threads") From db38dbdcc771ca5ee53090d861ff5095e598e83f Mon Sep 17 00:00:00 2001 From: dksslq <1578756762@qq.com> Date: Wed, 24 May 2023 19:57:25 +0800 Subject: [PATCH 5/7] Add space --- WebScan/lib/eval.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebScan/lib/eval.go b/WebScan/lib/eval.go index 796e70f..33e9616 100644 --- a/WebScan/lib/eval.go +++ b/WebScan/lib/eval.go @@ -627,7 +627,7 @@ func DoRequest(req *http.Request, redirect bool) (*Response, error) { defer oResp.Body.Close() resp, err := ParseResponse(oResp) if err != nil { - common.LogError("[-]ParseResponse error: " + err.Error()) + common.LogError("[-] ParseResponse error: " + err.Error()) //return nil, err } return resp, err From 8a788427b715f8d64edaf44675fa1ffd7833dd01 Mon Sep 17 00:00:00 2001 From: xiaobo Date: Mon, 26 Jun 2023 18:15:09 +0800 Subject: [PATCH 6/7] fix: add field names to struct literal --- Plugins/webtitle.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Plugins/webtitle.go b/Plugins/webtitle.go index 20b1b87..1c78ea0 100644 --- a/Plugins/webtitle.go +++ b/Plugins/webtitle.go @@ -4,10 +4,6 @@ import ( "compress/gzip" "crypto/tls" "fmt" - "github.com/shadow1ng/fscan/WebScan" - "github.com/shadow1ng/fscan/WebScan/lib" - "github.com/shadow1ng/fscan/common" - "golang.org/x/text/encoding/simplifiedchinese" "io" "io/ioutil" "net/http" @@ -16,6 +12,11 @@ import ( "strings" "time" "unicode/utf8" + + "github.com/shadow1ng/fscan/WebScan" + "github.com/shadow1ng/fscan/WebScan/lib" + "github.com/shadow1ng/fscan/common" + "golang.org/x/text/encoding/simplifiedchinese" ) func WebTitle(info *common.HostInfo) error { @@ -140,7 +141,7 @@ func geturl(info *common.HostInfo, flag int, CheckData []WebScan.CheckDatas) (er if !utf8.Valid(body) { body, _ = simplifiedchinese.GBK.NewDecoder().Bytes(body) } - CheckData = append(CheckData, WebScan.CheckDatas{body, fmt.Sprintf("%s", resp.Header)}) + CheckData = append(CheckData, WebScan.CheckDatas{Body: body, Headers: fmt.Sprintf("%s", resp.Header)}) var reurl string if flag != 2 { title = gettitle(body) From 18937e1e4a6dbf9a803f9757761d0a6785a19c64 Mon Sep 17 00:00:00 2001 From: Andrii Ursulenko Date: Tue, 18 Jul 2023 13:43:11 +0300 Subject: [PATCH 7/7] add colored output --- .gitignore | 1 + Plugins/icmp.go | 9 +++++---- Plugins/scanner.go | 7 ++++--- common/log.go | 31 +++++++++++++++++++++---------- go.mod | 5 ++++- go.sum | 11 +++++++++++ 6 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..387c605 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result.txt diff --git a/Plugins/icmp.go b/Plugins/icmp.go index bde11d5..6d0773f 100644 --- a/Plugins/icmp.go +++ b/Plugins/icmp.go @@ -3,6 +3,7 @@ package Plugins import ( "bytes" "fmt" + "github.com/fatih/color" "github.com/shadow1ng/fscan/common" "golang.org/x/net/icmp" "net" @@ -26,11 +27,11 @@ func CheckLive(hostslist []string, Ping bool) []string { for ip := range chanHosts { if _, ok := ExistHosts[ip]; !ok && IsContain(hostslist, ip) { ExistHosts[ip] = struct{}{} - if common.Silent == false { - if Ping == false { - fmt.Printf("(icmp) Target %-15s is alive\n", ip) + if !common.Silent { + if !Ping { + color.Green("(icmp) Target %-15s is alive\n", ip) } else { - fmt.Printf("(ping) Target %-15s is alive\n", ip) + color.Green("(ping) Target %-15s is alive\n", ip) } } AliveHosts = append(AliveHosts, ip) diff --git a/Plugins/scanner.go b/Plugins/scanner.go index 58c2c3a..c877e12 100644 --- a/Plugins/scanner.go +++ b/Plugins/scanner.go @@ -2,6 +2,7 @@ package Plugins import ( "fmt" + "github.com/fatih/color" "github.com/shadow1ng/fscan/WebScan/lib" "github.com/shadow1ng/fscan/common" "reflect" @@ -25,7 +26,7 @@ func Scan(info common.HostInfo) { if len(Hosts) > 0 || len(common.HostPort) > 0 { if common.NoPing == false && len(Hosts) > 0 { Hosts = CheckLive(Hosts, common.Ping) - fmt.Println("[*] Icmp alive hosts len is:", len(Hosts)) + color.Cyan("[*] Icmp alive hosts len is: %d", len(Hosts)) } if common.Scantype == "icmp" { common.LogWG.Wait() @@ -40,7 +41,7 @@ func Scan(info common.HostInfo) { AlivePorts = NoPortScan(Hosts, info.Ports) } else if len(Hosts) > 0 { AlivePorts = PortScan(Hosts, info.Ports, common.Timeout) - fmt.Println("[*] alive ports len is:", len(AlivePorts)) + color.Cyan("[*] alive ports len is: %d", len(AlivePorts)) if common.Scantype == "portscan" { common.LogWG.Wait() return @@ -50,7 +51,7 @@ func Scan(info common.HostInfo) { AlivePorts = append(AlivePorts, common.HostPort...) AlivePorts = common.RemoveDuplicate(AlivePorts) common.HostPort = nil - fmt.Println("[*] AlivePorts len is:", len(AlivePorts)) + color.Cyan("[*] AlivePorts len is:", len(AlivePorts)) } common.GC() var severports []string //severports := []string{"21","22","135"."445","1433","3306","5432","6379","9200","11211","27017"...} diff --git a/common/log.go b/common/log.go index 574dba7..5ce7d70 100644 --- a/common/log.go +++ b/common/log.go @@ -2,6 +2,7 @@ package common import ( "fmt" + "github.com/fatih/color" "os" "strings" "sync" @@ -31,12 +32,18 @@ func LogSuccess(result string) { func SaveLog() { for result := range Results { - if Silent == false || strings.Contains(*result, "[+]") || strings.Contains(*result, "[*]") { - fmt.Println(*result) + if !Silent { + if strings.Contains(*result, "[+]") { + color.Green(*result) + } else if strings.Contains(*result, "[*]") { + color.Cyan(*result) + } } + if IsSave { WriteFile(*result, Outputfile) } + LogWG.Done() } } @@ -48,19 +55,23 @@ func WriteFile(result string, filename string) { fmt.Printf("Open %s error, %v\n", filename, err) return } - _, err = fl.Write(text) - fl.Close() - if err != nil { + + defer func() { + _ = fl.Close() + }() + + if _, err := fl.Write(text); err != nil { fmt.Printf("Write %s error, %v\n", filename, err) } } func LogError(errinfo interface{}) { - if WaitTime == 0 { - fmt.Printf("已完成 %v/%v %v \n", End, Num, errinfo) - } else if (time.Now().Unix()-LogSucTime) > WaitTime && (time.Now().Unix()-LogErrTime) > WaitTime { - fmt.Printf("已完成 %v/%v %v \n", End, Num, errinfo) - LogErrTime = time.Now().Unix() + if WaitTime == 0 || (time.Now().Unix()-LogSucTime) > WaitTime && (time.Now().Unix()-LogErrTime) > WaitTime { + color.Red(fmt.Sprintf("Completed %v/%v %v \n", End, Num, errinfo)) + + if WaitTime != 0 { + LogErrTime = time.Now().Unix() + } } } diff --git a/go.mod b/go.mod index 2aa860c..b876c52 100644 --- a/go.mod +++ b/go.mod @@ -26,6 +26,7 @@ require ( require ( github.com/BurntSushi/toml v0.3.1 // indirect github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect + github.com/fatih/color v1.15.0 // indirect github.com/geoffgarside/ber v1.1.0 // indirect github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect @@ -34,6 +35,8 @@ require ( github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358 // indirect github.com/icodeface/tls v0.0.0-20190904083142-17aec93c60e5 // indirect github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect go.uber.org/atomic v1.5.0 // indirect go.uber.org/multierr v1.3.0 // indirect @@ -41,7 +44,7 @@ require ( go.uber.org/zap v1.14.0 // indirect golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/sys v0.5.0 // indirect + golang.org/x/sys v0.10.0 // indirect golang.org/x/tools v0.1.12 // indirect honnef.co/go/tools v0.0.1-2019.2.3 // indirect ) diff --git a/go.sum b/go.sum index b3ea020..49d8329 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/geoffgarside/ber v1.1.0 h1:qTmFG4jJbwiSzSXoNJeHcOprVzZ8Ulde2Rrrifu5U9w= @@ -156,7 +158,12 @@ github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0 github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -341,8 +348,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=