Skip to content

Commit

Permalink
微调result, 准备将部分代码抽离到公共库
Browse files Browse the repository at this point in the history
  • Loading branch information
M09Ic committed Oct 27, 2022
1 parent ea39d77 commit 393ac88
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 65 deletions.
12 changes: 6 additions & 6 deletions v2/internal/core/output.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ func output(result *Result, outType string) string {

switch outType {
case "color", "c":
out = ColorOutput(result)
out = result.ColorOutput()
case "json", "j":
out = JsonOutput(result)
out = result.JsonOutput()
case "jsonlines", "jl":
out = JsonOutput(result) + "\n"
out = result.JsonOutput() + "\n"
case "full":
out = FullOutput(result)
out = result.FullOutput()
case "csv":
out = CsvOutput(result)
out = result.CsvOutput()
default:
out = ValuesOutput(result, outType)
out = result.ValuesOutput(outType)
}
return out
}
Expand Down
64 changes: 48 additions & 16 deletions v2/pkg/result.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package pkg

import (
"encoding/json"
"fmt"
"github.com/chainreactors/gogo/v2/pkg/fingers"
"github.com/chainreactors/gogo/v2/pkg/utils"
"github.com/chainreactors/logs"
"github.com/chainreactors/parsers"
"net"
"net/http"
Expand Down Expand Up @@ -81,15 +83,14 @@ func (result *Result) AddVulns(vulns []*fingers.Vuln) {
}

func (result *Result) AddFramework(f *fingers.Framework) {
f.FromStr = fingers.FrameFromMap[f.From]
result.Frameworks = append(result.Frameworks, f)
//result.FrameworksMap[f.ToString()] = true
}

func (result *Result) AddFrameworks(f []*fingers.Framework) {
result.Frameworks = append(result.Frameworks, f...)
//for _, framework := range f {
//result.FrameworksMap[framework.ToString()] = true
//}
func (result *Result) AddFrameworks(fs []*fingers.Framework) {
for _, f := range fs {
result.AddFramework(f)
}
}

func (result *Result) AddExtract(extract *fingers.Extracted) {
Expand All @@ -116,13 +117,6 @@ func (result *Result) GetExtractStat() string {
}
}

func (result *Result) NoFramework() bool {
if len(result.Frameworks) == 0 {
return true
}
return false
}

func (result *Result) GuessFramework() {
for _, v := range PortMap.Get(result.Port) {
if TagMap.Get(v) == nil && !utils.SliceContains([]string{"top1", "top2", "top3", "other", "windows"}, v) {
Expand Down Expand Up @@ -226,13 +220,51 @@ func (result *Result) GetTarget() string {
return fmt.Sprintf("%s:%s", result.Ip, result.Port)
}

func (result *Result) NoFramework() bool {
if len(result.Frameworks) == 0 {
return true
}
return false
}

func (result *Result) GetFirstFramework() string {
if !result.NoFramework() {
return result.Frameworks[0].Name
}
return ""
}

func (result *Result) ColorOutput() string {
s := fmt.Sprintf("[+] %s\t%s\t%s\t%s\t%s [%s] %s %s\n", result.GetURL(), result.Midware, result.Language, logs.Blue(result.Frameworks.ToString()), result.Host, logs.Yellow(result.Status), logs.Blue(result.Title), logs.Red(result.Vulns.ToString()))
return s
}

func (result *Result) FullOutput() string {
s := fmt.Sprintf("[+] %s\t%s\t%s\t%s\t%s [%s] %s %s %s\n", result.GetURL(), result.Midware, result.Language, result.Frameworks.ToString(), result.Host, result.Status, result.Title, result.Vulns.ToString(), result.Extracts.ToString())
return s
}

func (result *Result) JsonOutput() string {
jsons, _ := json.Marshal(result)
return string(jsons)
}

func (result *Result) CsvOutput() string {
return fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n", result.Ip, result.Port, result.GetURL(), result.Status, slashComma(result.Title), result.Host, result.Language, slashComma(result.Midware), slashComma(result.Frameworks.ToString()), slashComma(result.Vulns.ToString()), slashComma(result.Extracts.ToString()))
}

func (result *Result) ValuesOutput(outType string) string {
outs := strings.Split(outType, ",")
for i, out := range outs {
outs[i] = result.Get(out)
}
return strings.Join(outs, "\t") + "\n"
}

func slashComma(s string) string {
return strings.Replace(s, ",", "\\,", -1)
}

func (result *Result) AddNTLMInfo(m map[string]string, t string) {
result.Title = m["MsvAvNbDomainName"] + "/" + m["MsvAvNbComputerName"]
result.Host = strings.Trim(m["MsvAvDnsDomainName"], "\x00") + "/" + m["MsvAvDnsComputerName"]
Expand Down Expand Up @@ -272,9 +304,9 @@ func (rs Results) Filter(k, v, op string) Results {
return filtedres
}

func (results Results) GetValues(key string) []string {
values := make([]string, len(results))
for i, result := range results {
func (rs Results) GetValues(key string) []string {
values := make([]string, len(rs))
for i, result := range rs {
//if focus && !result.Frameworks.IsFocus() {
// // 如果需要focus, 则跳过非focus标记的framework
// continue
Expand Down
18 changes: 9 additions & 9 deletions v2/pkg/result_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ type ResultsData struct {
Data Results `json:"data"`
}

func (rd ResultsData) groupByIP() map[string]IPMapResult {
func (rd *ResultsData) groupByIP() map[string]IPMapResult {
pfs := make(map[string]IPMapResult)
//ipfs := make(map[string]ipformat)
for _, result := range rd.Data {
Expand All @@ -96,7 +96,7 @@ func (rd ResultsData) groupByIP() map[string]IPMapResult {
return pfs
}

func (rd ResultsData) groupBySortedIP() (map[string]IPMapResult, []string) {
func (rd *ResultsData) groupBySortedIP() (map[string]IPMapResult, []string) {
pfs := rd.groupByIP()
ips := make([]string, len(pfs))
var i = 0
Expand Down Expand Up @@ -131,7 +131,7 @@ func (rd *ResultsData) Filter(name string) {
rd.Data = results
}

func (rd ResultsData) ToConfig() string {
func (rd *ResultsData) ToConfig() string {
// 输出配置信息
var configstr string
configstr = fmt.Sprintf("Scan Target: %s, Ports: %s, Mod: %s \n", rd.Config.GetTargetName(), rd.Config.Ports, rd.Config.Mod)
Expand All @@ -142,7 +142,7 @@ func (rd ResultsData) ToConfig() string {
return configstr
}

func (rd ResultsData) ToValues(outType string) string {
func (rd *ResultsData) ToValues(outType string) string {
outs := strings.Split(outType, ",")
outvalues := make([][]string, len(outs))
ss := make([]string, len(rd.Data))
Expand All @@ -160,7 +160,7 @@ func (rd ResultsData) ToValues(outType string) string {
return strings.Join(ss, "\n")
}

func (rd ResultsData) ToFormat(isColor bool) string {
func (rd *ResultsData) ToFormat(isColor bool) string {
var s string

pfs, ips := rd.groupBySortedIP()
Expand Down Expand Up @@ -211,7 +211,7 @@ func (rd ResultsData) ToFormat(isColor bool) string {
return s
}

func (rd ResultsData) ToCobaltStrike() string {
func (rd *ResultsData) ToCobaltStrike() string {
var s string
pfs := rd.groupByIP()
for ip, imap := range pfs {
Expand All @@ -231,7 +231,7 @@ func (rd ResultsData) ToCobaltStrike() string {
return s
}

func (rd ResultsData) ToZombie() string {
func (rd *ResultsData) ToZombie() string {
var zms []zombiemeta
for _, r := range rd.Data {
if service, ok := zombiemap[strings.ToLower(r.GetFirstFramework())]; ok {
Expand All @@ -250,11 +250,11 @@ func (rd ResultsData) ToZombie() string {
return string(s)
}

func (rd ResultsData) ToCsv() string {
func (rd *ResultsData) ToCsv() string {
var s strings.Builder
s.WriteString("ip,port,url,status,title,host,language,midware,frame,vuln,extract\n")
for _, r := range rd.Data {
s.WriteString(CsvOutput(r))
s.WriteString(r.CsvOutput())
}
return s.String()
}
Expand Down
34 changes: 0 additions & 34 deletions v2/pkg/utils.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package pkg

import (
"encoding/json"
"fmt"
. "github.com/chainreactors/files"
"github.com/chainreactors/gogo/v2/pkg/utils"
"github.com/chainreactors/ipcs"
"github.com/chainreactors/logs"
"github.com/chainreactors/parsers"
"regexp"
"sort"
"strings"
)

var (
Expand Down Expand Up @@ -57,34 +54,3 @@ func sortIP(ips []string) []string {
})
return ips
}

func ValuesOutput(result *Result, outType string) string {
outs := strings.Split(outType, ",")
for i, out := range outs {
outs[i] = result.Get(out)
}
return strings.Join(outs, "\t") + "\n"
}

func ColorOutput(result *Result) string {
s := fmt.Sprintf("[+] %s\t%s\t%s\t%s\t%s [%s] %s %s\n", result.GetURL(), result.Midware, result.Language, logs.Blue(result.Frameworks.ToString()), result.Host, logs.Yellow(result.Status), logs.Blue(result.Title), logs.Red(result.Vulns.ToString()))
return s
}

func FullOutput(result *Result) string {
s := fmt.Sprintf("[+] %s\t%s\t%s\t%s\t%s [%s] %s %s %s\n", result.GetURL(), result.Midware, result.Language, result.Frameworks.ToString(), result.Host, result.Status, result.Title, result.Vulns.ToString(), result.Extracts.ToString())
return s
}

func JsonOutput(result *Result) string {
jsons, _ := json.Marshal(result)
return string(jsons)
}

func CsvOutput(result *Result) string {
return fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n", result.Ip, result.Port, result.GetURL(), result.Status, slashComma(result.Title), result.Host, result.Language, slashComma(result.Midware), slashComma(result.Frameworks.ToString()), slashComma(result.Vulns.ToString()), slashComma(result.Extracts.ToString()))
}

func slashComma(s string) string {
return strings.Replace(s, ",", "\\,", -1)
}

0 comments on commit 393ac88

Please sign in to comment.