mirror of
https://github.com/BishopFox/sliver.git
synced 2026-11-10 01:41:29 -10:00
Compare commits
45
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee9d203d24 | ||
|
|
6489ae7de1 | ||
|
|
c3beb171c2 | ||
|
|
6b43991619 | ||
|
|
c91a2ce822 | ||
|
|
da6c11f259 | ||
|
|
82a9e7fc9a | ||
|
|
e7f03babaa | ||
|
|
0af718beea | ||
|
|
16f96c5add | ||
|
|
84c56f3c4e | ||
|
|
14553f9a5a | ||
|
|
441038a508 | ||
|
|
4bf328edd9 | ||
|
|
f7d5d5f4c6 | ||
|
|
ea764705f1 | ||
|
|
3f00c639dd | ||
|
|
f5c75eba83 | ||
|
|
2a86250fd4 | ||
|
|
c4616ff43c | ||
|
|
c3a28dcf7a | ||
|
|
0417fc16f6 | ||
|
|
901e9fd9e1 | ||
|
|
c5b3250d17 | ||
|
|
9f72364e54 | ||
|
|
b1b6f8186c | ||
|
|
184dde22ad | ||
|
|
0f5262ef87 | ||
|
|
f68932ab3f | ||
|
|
8a669d1d84 | ||
|
|
bb8b7111b7 | ||
|
|
567e51ca46 | ||
|
|
05166e896f | ||
|
|
3cfe6435f3 | ||
|
|
48c65108d6 | ||
|
|
a271932c8a | ||
|
|
90b3c7bca4 | ||
|
|
8c6fe18280 | ||
|
|
97dbae571c | ||
|
|
b5e629c4a6 | ||
|
|
53593be73f | ||
|
|
cf5ae8bd07 | ||
|
|
4d3ac9177a | ||
|
|
92a9bc4da9 | ||
|
|
4b3a9dad8a |
No files matched your search
@@ -3,7 +3,7 @@ name: Release
|
||||
on:
|
||||
push:
|
||||
tags: ["v[1-9]+.[0-9]+.[0-9]+"]
|
||||
branches: [master, goreleaser]
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
linux-windows-build:
|
||||
|
||||
@@ -1,28 +1,27 @@
|
||||
Sliver
|
||||
======
|
||||
# Sliver
|
||||
|
||||
Sliver is an open source cross-platform adversary emulation/red team framework, it can be used by organizations of all sizes to perform security testing. Sliver's implants support C2 over Mutual TLS (mTLS), WireGuard, HTTP(S), and DNS and are dynamically compiled with per-binary asymmetric encryption keys.
|
||||
|
||||
The server and client support MacOS, Windows, and Linux. Implants are supported on MacOS, Windows, and Linux (and possibly every Golang compiler target but we've not tested them all).
|
||||
|
||||
 [](https://goreportcard.com/report/github.com/BishopFox/sliver) [](https://www.gnu.org/licenses/gpl-3.0)
|
||||
[](https://github.com/BishopFox/sliver/actions/workflows/go.yml) [](https://github.com/BishopFox/sliver/actions/workflows/codeql-scanning.yml) [](https://goreportcard.com/report/github.com/BishopFox/sliver) [](https://www.gnu.org/licenses/gpl-3.0)
|
||||
|
||||
### Features
|
||||
|
||||
* Dynamic code generation
|
||||
* Compile-time obfuscation
|
||||
* Multiplayer-mode
|
||||
* Staged and Stageless payloads
|
||||
* [Procedurally generated C2](https://github.com/BishopFox/sliver/wiki/HTTP(S)-C2#under-the-hood) over HTTP(S)
|
||||
* [DNS canary](https://github.com/BishopFox/sliver/wiki/DNS-C2#dns-canaries) blue team detection
|
||||
* [Secure C2](https://github.com/BishopFox/sliver/wiki/Transport-Encryption) over mTLS, WireGuard, HTTP(S), and DNS
|
||||
* Fully scriptable using [JavaScript/TypeScript](https://github.com/moloch--/sliver-script) or [Python](https://github.com/moloch--/sliver-py)
|
||||
* Windows process migration, process injection, user token manipulation, etc.
|
||||
* Let's Encrypt integration
|
||||
* In-memory .NET assembly execution
|
||||
* COFF/BOF in-memory loader
|
||||
* TCP and named pipe pivots
|
||||
* Much more!
|
||||
- Dynamic code generation
|
||||
- Compile-time obfuscation
|
||||
- Multiplayer-mode
|
||||
- Staged and Stageless payloads
|
||||
- [Procedurally generated C2](<https://github.com/BishopFox/sliver/wiki/HTTP(S)-C2#under-the-hood>) over HTTP(S)
|
||||
- [DNS canary](https://github.com/BishopFox/sliver/wiki/DNS-C2#dns-canaries) blue team detection
|
||||
- [Secure C2](https://github.com/BishopFox/sliver/wiki/Transport-Encryption) over mTLS, WireGuard, HTTP(S), and DNS
|
||||
- Fully scriptable using [JavaScript/TypeScript](https://github.com/moloch--/sliver-script) or [Python](https://github.com/moloch--/sliver-py)
|
||||
- Windows process migration, process injection, user token manipulation, etc.
|
||||
- Let's Encrypt integration
|
||||
- In-memory .NET assembly execution
|
||||
- COFF/BOF in-memory loader
|
||||
- TCP and named pipe pivots
|
||||
- Much more!
|
||||
|
||||
### Getting Started
|
||||
|
||||
@@ -47,4 +46,3 @@ Please take a moment and fill out [our survey](https://forms.gle/SwVsHFNh24ChG58
|
||||
### License - GPLv3
|
||||
|
||||
Sliver is licensed under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html), some sub-components may have separate licenses. See their respective subdirectories in this project for details.
|
||||
|
||||
@@ -22,7 +22,6 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
@@ -142,7 +141,7 @@ func LoadAlias(manifestPath string, con *console.SliverConsoleClient) (*AliasMan
|
||||
}
|
||||
|
||||
// parse it
|
||||
data, err := ioutil.ReadFile(manifestPath)
|
||||
data, err := os.ReadFile(manifestPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -303,7 +302,7 @@ func runAliasCommand(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
if strings.ToLower(filepath.Ext(binPath)) == ".dll" {
|
||||
isDLL = true
|
||||
}
|
||||
binData, err := ioutil.ReadFile(binPath)
|
||||
binData, err := os.ReadFile(binPath)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
@@ -311,7 +310,7 @@ func runAliasCommand(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
var outFilePath *os.File
|
||||
if ctx.Flags.Bool("save") {
|
||||
outFile := filepath.Base(fmt.Sprintf("%s_%s*.log", filepath.Base(ctx.Command.Name), filepath.Base(session.GetHostname())))
|
||||
outFilePath, err = ioutil.TempFile("", outFile)
|
||||
outFilePath, err = os.CreateTemp("", outFile)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
|
||||
+87
-27
@@ -43,6 +43,7 @@ import (
|
||||
"github.com/bishopfox/sliver/client/command/beacons"
|
||||
"github.com/bishopfox/sliver/client/command/builders"
|
||||
"github.com/bishopfox/sliver/client/command/completers"
|
||||
"github.com/bishopfox/sliver/client/command/creds"
|
||||
"github.com/bishopfox/sliver/client/command/cursed"
|
||||
"github.com/bishopfox/sliver/client/command/dllhijack"
|
||||
"github.com/bishopfox/sliver/client/command/environment"
|
||||
@@ -423,7 +424,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
LongHelp: help.GetHelpFor([]string{consts.HttpStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("d", "domain", "", "limit responses to specific domain")
|
||||
f.String("w", "website", "", "website name (see websites cmd)")
|
||||
f.String("w", "website", "", "website name (see: websites)")
|
||||
f.String("L", "lhost", "", "interface to bind server to")
|
||||
f.Int("l", "lport", generate.DefaultHTTPLPort, "tcp listen port")
|
||||
f.Bool("D", "disable-otp", false, "disable otp authentication")
|
||||
@@ -448,7 +449,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
LongHelp: help.GetHelpFor([]string{consts.HttpsStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("d", "domain", "", "limit responses to specific domain")
|
||||
f.String("w", "website", "", "website name (see websites cmd)")
|
||||
f.String("w", "website", "", "website name (see: websites)")
|
||||
f.String("L", "lhost", "", "interface to bind server to")
|
||||
f.Int("l", "lport", generate.DefaultHTTPSLPort, "tcp listen port")
|
||||
f.Bool("D", "disable-otp", false, "disable otp authentication")
|
||||
@@ -1355,7 +1356,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
f.String("F", "limit-fileexists", "", "limit execution to hosts with this file in the filesystem")
|
||||
f.String("L", "limit-locale", "", "limit execution to hosts that match this locale")
|
||||
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see `psexec` for more info) and 'shellcode' (windows only)")
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see: `psexec` for more info) and 'shellcode' (windows only)")
|
||||
f.String("s", "save", "", "directory/file to the binary to")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
@@ -1415,7 +1416,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
f.String("F", "limit-fileexists", "", "limit execution to hosts with this file in the filesystem")
|
||||
f.String("L", "limit-locale", "", "limit execution to hosts that match this locale")
|
||||
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see `psexec` for more info) and 'shellcode' (windows only)")
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see: `psexec` for more info) and 'shellcode' (windows only)")
|
||||
f.String("s", "save", "", "directory/file to the binary to")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
@@ -1570,7 +1571,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
f.String("F", "limit-fileexists", "", "limit execution to hosts with this file in the filesystem")
|
||||
f.String("L", "limit-locale", "", "limit execution to hosts that match this locale")
|
||||
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see `psexec` for more info) and 'shellcode' (windows only)")
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see: `psexec` for more info) and 'shellcode' (windows only)")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
@@ -1636,7 +1637,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
f.String("F", "limit-fileexists", "", "limit execution to hosts with this file in the filesystem")
|
||||
f.String("L", "limit-locale", "", "limit execution to hosts that match this locale")
|
||||
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see `psexec` for more info) and 'shellcode' (windows only)")
|
||||
f.String("f", "format", "exe", "Specifies the output formats, valid values are: 'exe', 'shared' (for dynamic libraries), 'service' (see: `psexec` for more info) and 'shellcode' (windows only)")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
@@ -2969,8 +2970,6 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
Help: "Manage the server's loot store",
|
||||
LongHelp: help.GetHelpFor([]string{consts.LootStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("f", "filter", "", "filter based on loot type")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
Run: func(ctx *grumble.Context) error {
|
||||
@@ -2990,7 +2989,6 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
},
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("n", "name", "", "name of this piece of loot")
|
||||
f.String("T", "type", "", "force a specific loot type (file/cred)")
|
||||
f.String("F", "file-type", "", "force a specific file type (binary/text)")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
@@ -3012,7 +3010,6 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
},
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("n", "name", "", "name of this piece of loot")
|
||||
f.String("T", "type", "", "force a specific loot type (file/cred)")
|
||||
f.String("F", "file-type", "", "force a specific file type (binary/text)")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
@@ -3025,23 +3022,6 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
},
|
||||
HelpGroup: consts.GenericHelpGroup,
|
||||
})
|
||||
lootCmd.AddCommand(&grumble.Command{
|
||||
Name: consts.LootCredsStr,
|
||||
Help: "Add credentials to the server's loot store",
|
||||
LongHelp: help.GetHelpFor([]string{consts.LootStr, consts.LootCredsStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("n", "name", "", "name of this piece of loot")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
Run: func(ctx *grumble.Context) error {
|
||||
con.Println()
|
||||
loot.LootAddCredentialCmd(ctx, con)
|
||||
con.Println()
|
||||
return nil
|
||||
},
|
||||
HelpGroup: consts.GenericHelpGroup,
|
||||
})
|
||||
lootCmd.AddCommand(&grumble.Command{
|
||||
Name: consts.RenameStr,
|
||||
Help: "Re-name a piece of existing loot",
|
||||
@@ -3094,6 +3074,83 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
})
|
||||
con.App.AddCommand(lootCmd)
|
||||
|
||||
// [ Credentials ] ------------------------------------------------------------
|
||||
credsCmd := &grumble.Command{
|
||||
Name: consts.CredsStr,
|
||||
Help: "Manage the database of credentials",
|
||||
LongHelp: help.GetHelpFor([]string{consts.CredsStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
Run: func(ctx *grumble.Context) error {
|
||||
con.Println()
|
||||
creds.CredsCmd(ctx, con)
|
||||
con.Println()
|
||||
return nil
|
||||
},
|
||||
HelpGroup: consts.GenericHelpGroup,
|
||||
}
|
||||
credsAddCmd := &grumble.Command{
|
||||
Name: consts.AddStr,
|
||||
Help: "Add a credential to the database",
|
||||
LongHelp: help.GetHelpFor([]string{consts.CredsStr, consts.AddStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("u", "username", "", "username for the credential")
|
||||
f.String("p", "plaintext", "", "plaintext for the credential")
|
||||
f.String("P", "hash", "", "hash of the credential")
|
||||
f.String("H", "hash-type", "", "hash type of the credential (see: creds add --help)")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
Run: func(ctx *grumble.Context) error {
|
||||
con.Println()
|
||||
creds.CredsAddCmd(ctx, con)
|
||||
con.Println()
|
||||
return nil
|
||||
},
|
||||
HelpGroup: consts.GenericHelpGroup,
|
||||
}
|
||||
credsAddCmd.AddCommand(&grumble.Command{
|
||||
Name: consts.FileStr,
|
||||
Help: "Add a credential to the database",
|
||||
LongHelp: help.GetHelpFor([]string{consts.CredsStr, consts.AddStr, consts.FileStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("F", "file-format", creds.HashNewlineFormat, "file format of the credential file (see: creds add file --help)")
|
||||
f.String("H", "hash-type", "", "hash type of the credential (see: creds add --help)")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
Args: func(a *grumble.Args) {
|
||||
a.String("file", "The path of the credential file")
|
||||
},
|
||||
Run: func(ctx *grumble.Context) error {
|
||||
con.Println()
|
||||
creds.CredsAddCmd(ctx, con)
|
||||
con.Println()
|
||||
return nil
|
||||
},
|
||||
HelpGroup: consts.GenericHelpGroup,
|
||||
})
|
||||
credsCmd.AddCommand(credsAddCmd) // </creds add>
|
||||
credsCmd.AddCommand(&grumble.Command{
|
||||
Name: consts.RmStr,
|
||||
Help: "Remove a credential to the database",
|
||||
LongHelp: help.GetHelpFor([]string{consts.CredsStr, consts.RmStr}),
|
||||
Flags: func(f *grumble.Flags) {
|
||||
f.String("i", "id", "", "id of the credential to remove")
|
||||
|
||||
f.Int("t", "timeout", defaultTimeout, "command timeout in seconds")
|
||||
},
|
||||
Run: func(ctx *grumble.Context) error {
|
||||
con.Println()
|
||||
creds.CredsRmCmd(ctx, con)
|
||||
con.Println()
|
||||
return nil
|
||||
},
|
||||
HelpGroup: consts.GenericHelpGroup,
|
||||
})
|
||||
con.App.AddCommand(credsCmd)
|
||||
|
||||
// [ Hosts ] --------------------------------------------------------------
|
||||
hostsCmd := &grumble.Command{
|
||||
Name: consts.HostsStr,
|
||||
@@ -3579,4 +3636,7 @@ func BindCommands(con *console.SliverConsoleClient) {
|
||||
},
|
||||
}
|
||||
con.App.AddCommand(buildersCmd)
|
||||
|
||||
// [ Crackstation ] ------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
package creds
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/desertbit/grumble"
|
||||
)
|
||||
|
||||
const (
|
||||
UserColonHashNewlineFormat = "user:hash" // username:hash\n
|
||||
HashNewlineFormat = "hash" // hash\n
|
||||
CSVFormat = "csv" // username,hash\n
|
||||
)
|
||||
|
||||
// CredsCmd - Add new credentials
|
||||
func CredsAddCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
username := ctx.Flags.String("username")
|
||||
plaintext := ctx.Flags.String("plaintext")
|
||||
hash := ctx.Flags.String("hash")
|
||||
hashType := parseHashType(ctx.Flags.String("hash-type"))
|
||||
if plaintext == "" && hash == "" {
|
||||
con.PrintErrorf("Either a plaintext or a hash must be provided\n")
|
||||
return
|
||||
}
|
||||
if hashType == clientpb.HashType_INVALID {
|
||||
con.PrintErrorf("Invalid hash type '%s'\n", ctx.Flags.String("hash-type"))
|
||||
return
|
||||
}
|
||||
_, err := con.Rpc.CredsAdd(context.Background(), &clientpb.Credentials{
|
||||
Credentials: []*clientpb.Credential{
|
||||
{
|
||||
Username: username,
|
||||
Plaintext: plaintext,
|
||||
Hash: hash,
|
||||
HashType: hashType,
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
creds, err := con.Rpc.Creds(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
PrintCreds(creds.Credentials, con)
|
||||
}
|
||||
|
||||
// CredsCmd - Add new credentials
|
||||
func CredsAddHashFileCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
filePath := ctx.Args.String("file")
|
||||
fileFormat := ctx.Flags.String("file-format")
|
||||
if _, err := os.Stat(filePath); os.IsNotExist(err) {
|
||||
con.PrintErrorf("File '%s' does not exist\n", filePath)
|
||||
return
|
||||
}
|
||||
hashType := parseHashType(ctx.Flags.String("hash-type"))
|
||||
if hashType == clientpb.HashType_INVALID {
|
||||
con.PrintErrorf("Invalid hash type '%s'\n", ctx.Flags.String("hash-type"))
|
||||
return
|
||||
}
|
||||
|
||||
con.PrintInfof("Parsing file '%s' as '%s' format ...\n", filePath, fileFormat)
|
||||
var creds *clientpb.Credentials
|
||||
var err error
|
||||
switch fileFormat {
|
||||
case UserColonHashNewlineFormat:
|
||||
creds, err = parseUserColonHashNewline(filePath, hashType)
|
||||
case HashNewlineFormat:
|
||||
creds, err = parseHashNewline(filePath, hashType)
|
||||
case CSVFormat:
|
||||
creds, err = parseCSV(filePath, hashType)
|
||||
default:
|
||||
con.PrintErrorf("Invalid file format '%s', see 'creds add file --help'\n", fileFormat)
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
con.PrintInfof("Adding %d credential(s) ...\n", len(creds.Credentials))
|
||||
_, err = con.Rpc.CredsAdd(context.Background(), creds)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
creds, err = con.Rpc.Creds(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
PrintCreds(creds.Credentials, con)
|
||||
}
|
||||
|
||||
func parseHashType(raw string) clientpb.HashType {
|
||||
hashInt, err := strconv.Atoi(raw)
|
||||
if err == nil {
|
||||
return clientpb.HashType(hashInt)
|
||||
}
|
||||
return clientpb.HashType_INVALID
|
||||
}
|
||||
|
||||
func parseUserColonHashNewline(filePath string, hashType clientpb.HashType) (*clientpb.Credentials, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
creds := &clientpb.Credentials{}
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
parts := strings.Split(line, ":")
|
||||
if len(parts) != 2 {
|
||||
continue
|
||||
}
|
||||
creds.Credentials = append(creds.Credentials, &clientpb.Credential{
|
||||
Username: parts[0],
|
||||
Hash: parts[1],
|
||||
HashType: hashType,
|
||||
})
|
||||
}
|
||||
return creds, nil
|
||||
}
|
||||
|
||||
func parseHashNewline(filePath string, hashType clientpb.HashType) (*clientpb.Credentials, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
creds := &clientpb.Credentials{}
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
creds.Credentials = append(creds.Credentials, &clientpb.Credential{
|
||||
Hash: line,
|
||||
HashType: hashType,
|
||||
})
|
||||
}
|
||||
return creds, nil
|
||||
}
|
||||
|
||||
func parseCSV(filePath string, hashType clientpb.HashType) (*clientpb.Credentials, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
creds := &clientpb.Credentials{}
|
||||
scanner.Scan() // skip header
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
parts := strings.Split(line, ",")
|
||||
if len(parts) < 2 {
|
||||
continue
|
||||
}
|
||||
creds.Credentials = append(creds.Credentials, &clientpb.Credential{
|
||||
Username: parts[0],
|
||||
Hash: parts[1],
|
||||
HashType: hashType,
|
||||
})
|
||||
}
|
||||
return creds, nil
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package creds
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/bishopfox/sliver/client/command/settings"
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/desertbit/grumble"
|
||||
"github.com/jedib0t/go-pretty/v6/table"
|
||||
)
|
||||
|
||||
// CredsCmd - Manage credentials
|
||||
func CredsCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
creds, err := con.Rpc.Creds(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
if len(creds.Credentials) == 0 {
|
||||
con.PrintInfof("No credentials 🙁\n")
|
||||
return
|
||||
}
|
||||
PrintCreds(creds.Credentials, con)
|
||||
}
|
||||
|
||||
func PrintCreds(creds []*clientpb.Credential, con *console.SliverConsoleClient) {
|
||||
tw := table.NewWriter()
|
||||
tw.SetStyle(settings.GetTableStyle(con))
|
||||
tw.AppendHeader(table.Row{
|
||||
"ID",
|
||||
"Username",
|
||||
"Plaintext",
|
||||
"Hash",
|
||||
"Hash Type",
|
||||
"Cracked",
|
||||
})
|
||||
for _, cred := range creds {
|
||||
tw.AppendRow(table.Row{
|
||||
strings.Split(cred.ID, "-")[0],
|
||||
cred.Username,
|
||||
cred.Plaintext,
|
||||
cred.Hash,
|
||||
cred.HashType,
|
||||
cred.IsCracked,
|
||||
})
|
||||
}
|
||||
con.Printf("%s\n", tw.Render())
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package creds
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/desertbit/grumble"
|
||||
)
|
||||
|
||||
// CredsCmd - Add new credentials
|
||||
func CredsRmCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
id := ctx.Flags.String("id")
|
||||
if id == "" {
|
||||
credential, err := SelectCredential(false, clientpb.HashType_INVALID, con)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
id = credential.ID
|
||||
}
|
||||
_, err := con.Rpc.CredsRm(context.Background(), &clientpb.Credentials{
|
||||
Credentials: []*clientpb.Credential{
|
||||
{
|
||||
ID: id,
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
creds, err := con.Rpc.Creds(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
if len(creds.Credentials) == 0 {
|
||||
con.PrintInfof("No credentials 🙁\n")
|
||||
return
|
||||
}
|
||||
PrintCreds(creds.Credentials, con)
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package creds
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
)
|
||||
|
||||
// SelectCredential - Interactive menu for the user to select a credentials from the database
|
||||
func SelectCredential(plaintext bool, hashType clientpb.HashType, con *console.SliverConsoleClient) (*clientpb.Credential, error) {
|
||||
var creds *clientpb.Credentials
|
||||
var err error
|
||||
if hashType == clientpb.HashType_INVALID {
|
||||
creds, err = con.Rpc.Creds(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
creds, err = con.Rpc.GetCredsByHashType(context.Background(), &clientpb.Credential{HashType: hashType})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if len(creds.Credentials) == 0 {
|
||||
return nil, errors.New("no credentials to select from")
|
||||
}
|
||||
|
||||
// Render selection table
|
||||
buf := bytes.NewBufferString("")
|
||||
table := tabwriter.NewWriter(buf, 0, 2, 2, ' ', 0)
|
||||
for _, cred := range creds.Credentials {
|
||||
if cred.Plaintext == "" {
|
||||
fmt.Fprintf(table, "%s\t%s\t[not cracked]\t\n", strings.Split(cred.ID, "-")[0], cred.HashType)
|
||||
} else {
|
||||
plaintext := cred.Plaintext
|
||||
if len(plaintext) > 12 {
|
||||
plaintext = plaintext[:12] + "..."
|
||||
}
|
||||
fmt.Fprintf(table, "%s\t%s\tplaintext: %s\t\n", strings.Split(cred.ID, "-")[0], cred.HashType, plaintext)
|
||||
}
|
||||
}
|
||||
table.Flush()
|
||||
options := strings.Split(buf.String(), "\n")
|
||||
options = options[:len(options)-1]
|
||||
if len(options) == 0 {
|
||||
return nil, errors.New("no credentials to select from")
|
||||
}
|
||||
|
||||
selected := ""
|
||||
prompt := &survey.Select{
|
||||
Message: "Select a credential:",
|
||||
Options: options,
|
||||
}
|
||||
err = survey.AskOne(prompt, &selected)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for index, value := range options {
|
||||
if value == selected {
|
||||
return creds.Credentials[index], nil
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
@@ -216,7 +216,7 @@ func LootExecute(commandOutput []byte, lootName string, sliverCmdName string, cm
|
||||
lootName = fmt.Sprintf("[%s] %s on %s (%s)", sliverCmdName, shortCommandName, hostName, timeNow)
|
||||
}
|
||||
|
||||
lootMessage := loot.CreateLootMessage(fileName, lootName, clientpb.LootType_LOOT_FILE, clientpb.FileType_TEXT, commandOutput)
|
||||
lootMessage := loot.CreateLootMessage(fileName, lootName, clientpb.FileType_TEXT, commandOutput)
|
||||
loot.SendLootMessage(lootMessage, con)
|
||||
}
|
||||
|
||||
|
||||
+12
-13
@@ -24,7 +24,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"github.com/bishopfox/sliver/client/command/loot"
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/sliverpb"
|
||||
@@ -143,18 +142,18 @@ func tryCredsFromLoot(con *console.SliverConsoleClient) (string, string, []byte)
|
||||
prompt := &survey.Confirm{Message: "No credentials provided, use from loot?"}
|
||||
survey.AskOne(prompt, &confirm, nil)
|
||||
if confirm {
|
||||
cred, err := loot.SelectCredentials(con)
|
||||
if err != nil {
|
||||
con.PrintErrorf("Invalid loot data, will try to use the SSH agent")
|
||||
} else {
|
||||
switch cred.CredentialType {
|
||||
case clientpb.CredentialType_API_KEY:
|
||||
privKey = []byte(cred.Credential.APIKey)
|
||||
case clientpb.CredentialType_USER_PASSWORD:
|
||||
username = cred.Credential.User
|
||||
password = cred.Credential.Password
|
||||
}
|
||||
}
|
||||
// cred, err := loot.SelectCredentials(con)
|
||||
// if err != nil {
|
||||
// con.PrintErrorf("Invalid loot data, will try to use the SSH agent")
|
||||
// } else {
|
||||
// switch cred.CredentialType {
|
||||
// case clientpb.CredentialType_API_KEY:
|
||||
// privKey = []byte(cred.Credential.APIKey)
|
||||
// case clientpb.CredentialType_USER_PASSWORD:
|
||||
// username = cred.Credential.User
|
||||
// password = cred.Credential.Password
|
||||
// }
|
||||
// }
|
||||
}
|
||||
return username, password, privKey
|
||||
}
|
||||
@@ -85,7 +85,6 @@ func PrintCat(download *sliverpb.Download, ctx *grumble.Context, con *console.Sl
|
||||
)
|
||||
saveLoot := ctx.Flags.Bool("loot")
|
||||
lootName := ctx.Flags.String("name")
|
||||
userLootType := ctx.Flags.String("type")
|
||||
userLootFileType := ctx.Flags.String("file-type")
|
||||
if download.Response != nil && download.Response.Err != "" {
|
||||
con.PrintErrorf("%s\n", download.Response.Err)
|
||||
@@ -100,17 +99,9 @@ func PrintCat(download *sliverpb.Download, ctx *grumble.Context, con *console.Sl
|
||||
}
|
||||
|
||||
if saveLoot {
|
||||
lootType, err := loot.ValidateLootType(userLootType)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
// Even if the loot type is bad, we can still print the result to the screen
|
||||
// We will not loot it though
|
||||
lootDownload = false
|
||||
}
|
||||
fileType := loot.ValidateLootFileType(userLootFileType, download.Data)
|
||||
|
||||
if lootDownload {
|
||||
loot.LootDownload(download, lootName, lootType, fileType, ctx, con)
|
||||
loot.LootDownload(download, lootName, fileType, ctx, con)
|
||||
con.Printf("\n")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,14 +130,9 @@ func HandleDownloadResponse(download *sliverpb.Download, ctx *grumble.Context, c
|
||||
|
||||
if saveLoot {
|
||||
lootName := ctx.Flags.String("name")
|
||||
lootType, err := loot.ValidateLootType(ctx.Flags.String("type"))
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
// Hand off to the loot package to take care of looting
|
||||
fileType := loot.ValidateLootFileType(ctx.Flags.String("file-type"), download.Data)
|
||||
loot.LootDownload(download, lootName, lootType, fileType, ctx, con)
|
||||
loot.LootDownload(download, lootName, fileType, ctx, con)
|
||||
} else {
|
||||
fileName := filepath.Base(remotePath)
|
||||
dst, err := filepath.Abs(localPath)
|
||||
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/bishopfox/sliver/client/command/creds"
|
||||
consts "github.com/bishopfox/sliver/client/constants"
|
||||
)
|
||||
|
||||
@@ -95,6 +96,10 @@ var (
|
||||
// Loot
|
||||
consts.LootStr: lootHelp,
|
||||
|
||||
// Creds
|
||||
consts.CredsStr: credsHelp,
|
||||
consts.CredsStr + sep + consts.AddStr: credsAddHelp,
|
||||
consts.CredsStr + sep + consts.AddStr + sep + consts.FileStr: credsAddFileHelp,
|
||||
// Profiles
|
||||
consts.ProfilesStr + sep + consts.NewStr: newProfileHelp,
|
||||
consts.ProfilesStr + sep + consts.GenerateStr: generateProfileHelp,
|
||||
@@ -579,18 +584,11 @@ ssh -l ubuntu ec2-instance ps aux
|
||||
lootHelp = `[[.Bold]]Command:[[.Normal]] loot
|
||||
[[.Bold]]About:[[.Normal]] Store and share loot between operators.
|
||||
|
||||
A piece of loot can be one of two loot types: a file or a credential.
|
||||
A piece of loot is a file, that can be one of two loot types: text or binary.
|
||||
|
||||
[[.Bold]]File Loot[[.Normal]]
|
||||
A file can be binary or text, Sliver will attempt to detect the type of file automatically or you can specify
|
||||
a file type with --file-type. You can add local files as loot using the "local" sub-command, or you can add
|
||||
files from a session using the "remote" sub-command.
|
||||
|
||||
[[.Bold]]Credential Loot[[.Normal]]
|
||||
Credential loot can be a user/password combination, an API key, or a file. You can add user/password and API
|
||||
keys using the "creds" sub-command. To add credential files use either the "local" or "remote" sub-commands
|
||||
with a "--type cred" flag (note the distinction between loot type --type, and file type --file-type). You can
|
||||
additionally specify a --file-type (binary or text) as you would normally.
|
||||
Sliver will attempt to detect the type of file automatically or you can specify a file type with
|
||||
--file-type. You can add local files as loot using the "local" sub-command, or you can add files
|
||||
from a session using the "remote" sub-command.
|
||||
|
||||
[[.Bold]]Examples:[[.Normal]]
|
||||
|
||||
@@ -600,12 +598,6 @@ loot local ./foo.txt
|
||||
# Adding a remote file from the active session:
|
||||
loot remote C:/foo.txt
|
||||
|
||||
# Adding a remote file as a credential from the active session:
|
||||
loot remote --type cred id_rsa
|
||||
|
||||
# Display only credentials:
|
||||
loot --filter creds
|
||||
|
||||
# Display the contents of a piece of loot:
|
||||
loot fetch
|
||||
`
|
||||
@@ -712,6 +704,501 @@ More information: https://github.com/mandatoryprogrammer/CursedChrome
|
||||
External builders allow the Sliver server offload implant builds onto external machines.
|
||||
For more information: https://github.com/BishopFox/sliver/wiki/External-Builders
|
||||
`
|
||||
|
||||
credsHelp = `[[.Bold]]Command:[[.Normal]] creds
|
||||
[[.Bold]]About:[[.Normal]] Manage credentials database.
|
||||
`
|
||||
|
||||
credsAddHelp = `[[.Bold]]Command:[[.Normal]] creds add
|
||||
[[.Bold]]About:[[.Normal]] Add a credential to the database
|
||||
|
||||
[[.Bold]]Hash Types:[[.Normal]]
|
||||
Sliver uses the same hash identifiers as Hashcat (use the #):
|
||||
|
||||
# | Name | Category
|
||||
======+============================================================+======================================
|
||||
900 | MD4 | Raw Hash
|
||||
0 | MD5 | Raw Hash
|
||||
100 | SHA1 | Raw Hash
|
||||
1300 | SHA2-224 | Raw Hash
|
||||
1400 | SHA2-256 | Raw Hash
|
||||
10800 | SHA2-384 | Raw Hash
|
||||
1700 | SHA2-512 | Raw Hash
|
||||
17300 | SHA3-224 | Raw Hash
|
||||
17400 | SHA3-256 | Raw Hash
|
||||
17500 | SHA3-384 | Raw Hash
|
||||
17600 | SHA3-512 | Raw Hash
|
||||
6000 | RIPEMD-160 | Raw Hash
|
||||
600 | BLAKE2b-512 | Raw Hash
|
||||
11700 | GOST R 34.11-2012 (Streebog) 256-bit, big-endian | Raw Hash
|
||||
11800 | GOST R 34.11-2012 (Streebog) 512-bit, big-endian | Raw Hash
|
||||
6900 | GOST R 34.11-94 | Raw Hash
|
||||
17010 | GPG (AES-128/AES-256 (SHA-1($pass))) | Raw Hash
|
||||
5100 | Half MD5 | Raw Hash
|
||||
17700 | Keccak-224 | Raw Hash
|
||||
17800 | Keccak-256 | Raw Hash
|
||||
17900 | Keccak-384 | Raw Hash
|
||||
18000 | Keccak-512 | Raw Hash
|
||||
6100 | Whirlpool | Raw Hash
|
||||
10100 | SipHash | Raw Hash
|
||||
70 | md5(utf16le($pass)) | Raw Hash
|
||||
170 | sha1(utf16le($pass)) | Raw Hash
|
||||
1470 | sha256(utf16le($pass)) | Raw Hash
|
||||
10870 | sha384(utf16le($pass)) | Raw Hash
|
||||
1770 | sha512(utf16le($pass)) | Raw Hash
|
||||
610 | BLAKE2b-512($pass.$salt) | Raw Hash salted and/or iterated
|
||||
620 | BLAKE2b-512($salt.$pass) | Raw Hash salted and/or iterated
|
||||
10 | md5($pass.$salt) | Raw Hash salted and/or iterated
|
||||
20 | md5($salt.$pass) | Raw Hash salted and/or iterated
|
||||
3800 | md5($salt.$pass.$salt) | Raw Hash salted and/or iterated
|
||||
3710 | md5($salt.md5($pass)) | Raw Hash salted and/or iterated
|
||||
4110 | md5($salt.md5($pass.$salt)) | Raw Hash salted and/or iterated
|
||||
4010 | md5($salt.md5($salt.$pass)) | Raw Hash salted and/or iterated
|
||||
21300 | md5($salt.sha1($salt.$pass)) | Raw Hash salted and/or iterated
|
||||
40 | md5($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
2600 | md5(md5($pass)) | Raw Hash salted and/or iterated
|
||||
3910 | md5(md5($pass).md5($salt)) | Raw Hash salted and/or iterated
|
||||
3500 | md5(md5(md5($pass))) | Raw Hash salted and/or iterated
|
||||
4400 | md5(sha1($pass)) | Raw Hash salted and/or iterated
|
||||
4410 | md5(sha1($pass).$salt) | Raw Hash salted and/or iterated
|
||||
20900 | md5(sha1($pass).md5($pass).sha1($pass)) | Raw Hash salted and/or iterated
|
||||
21200 | md5(sha1($salt).md5($pass)) | Raw Hash salted and/or iterated
|
||||
4300 | md5(strtoupper(md5($pass))) | Raw Hash salted and/or iterated
|
||||
30 | md5(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
110 | sha1($pass.$salt) | Raw Hash salted and/or iterated
|
||||
120 | sha1($salt.$pass) | Raw Hash salted and/or iterated
|
||||
4900 | sha1($salt.$pass.$salt) | Raw Hash salted and/or iterated
|
||||
4520 | sha1($salt.sha1($pass)) | Raw Hash salted and/or iterated
|
||||
24300 | sha1($salt.sha1($pass.$salt)) | Raw Hash salted and/or iterated
|
||||
140 | sha1($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
19300 | sha1($salt1.$pass.$salt2) | Raw Hash salted and/or iterated
|
||||
14400 | sha1(CX) | Raw Hash salted and/or iterated
|
||||
4700 | sha1(md5($pass)) | Raw Hash salted and/or iterated
|
||||
4710 | sha1(md5($pass).$salt) | Raw Hash salted and/or iterated
|
||||
21100 | sha1(md5($pass.$salt)) | Raw Hash salted and/or iterated
|
||||
18500 | sha1(md5(md5($pass))) | Raw Hash salted and/or iterated
|
||||
4500 | sha1(sha1($pass)) | Raw Hash salted and/or iterated
|
||||
4510 | sha1(sha1($pass).$salt) | Raw Hash salted and/or iterated
|
||||
5000 | sha1(sha1($salt.$pass.$salt)) | Raw Hash salted and/or iterated
|
||||
130 | sha1(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
1410 | sha256($pass.$salt) | Raw Hash salted and/or iterated
|
||||
1420 | sha256($salt.$pass) | Raw Hash salted and/or iterated
|
||||
22300 | sha256($salt.$pass.$salt) | Raw Hash salted and/or iterated
|
||||
20720 | sha256($salt.sha256($pass)) | Raw Hash salted and/or iterated
|
||||
21420 | sha256($salt.sha256_bin($pass)) | Raw Hash salted and/or iterated
|
||||
1440 | sha256($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
20800 | sha256(md5($pass)) | Raw Hash salted and/or iterated
|
||||
20710 | sha256(sha256($pass).$salt) | Raw Hash salted and/or iterated
|
||||
21400 | sha256(sha256_bin($pass)) | Raw Hash salted and/or iterated
|
||||
1430 | sha256(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
10810 | sha384($pass.$salt) | Raw Hash salted and/or iterated
|
||||
10820 | sha384($salt.$pass) | Raw Hash salted and/or iterated
|
||||
10840 | sha384($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
10830 | sha384(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
1710 | sha512($pass.$salt) | Raw Hash salted and/or iterated
|
||||
1720 | sha512($salt.$pass) | Raw Hash salted and/or iterated
|
||||
1740 | sha512($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
1730 | sha512(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
50 | HMAC-MD5 (key = $pass) | Raw Hash authenticated
|
||||
60 | HMAC-MD5 (key = $salt) | Raw Hash authenticated
|
||||
150 | HMAC-SHA1 (key = $pass) | Raw Hash authenticated
|
||||
160 | HMAC-SHA1 (key = $salt) | Raw Hash authenticated
|
||||
1450 | HMAC-SHA256 (key = $pass) | Raw Hash authenticated
|
||||
1460 | HMAC-SHA256 (key = $salt) | Raw Hash authenticated
|
||||
1750 | HMAC-SHA512 (key = $pass) | Raw Hash authenticated
|
||||
1760 | HMAC-SHA512 (key = $salt) | Raw Hash authenticated
|
||||
11750 | HMAC-Streebog-256 (key = $pass), big-endian | Raw Hash authenticated
|
||||
11760 | HMAC-Streebog-256 (key = $salt), big-endian | Raw Hash authenticated
|
||||
11850 | HMAC-Streebog-512 (key = $pass), big-endian | Raw Hash authenticated
|
||||
11860 | HMAC-Streebog-512 (key = $salt), big-endian | Raw Hash authenticated
|
||||
28700 | Amazon AWS4-HMAC-SHA256 | Raw Hash authenticated
|
||||
11500 | CRC32 | Raw Checksum
|
||||
27900 | CRC32C | Raw Checksum
|
||||
28000 | CRC64Jones | Raw Checksum
|
||||
18700 | Java Object hashCode() | Raw Checksum
|
||||
25700 | MurmurHash | Raw Checksum
|
||||
27800 | MurmurHash3 | Raw Checksum
|
||||
14100 | 3DES (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
14000 | DES (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
26401 | AES-128-ECB NOKDF (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
26402 | AES-192-ECB NOKDF (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
26403 | AES-256-ECB NOKDF (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
15400 | ChaCha20 | Raw Cipher, Known-plaintext attack
|
||||
14500 | Linux Kernel Crypto API (2.4) | Raw Cipher, Known-plaintext attack
|
||||
14900 | Skip32 (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
11900 | PBKDF2-HMAC-MD5 | Generic KDF
|
||||
12000 | PBKDF2-HMAC-SHA1 | Generic KDF
|
||||
10900 | PBKDF2-HMAC-SHA256 | Generic KDF
|
||||
12100 | PBKDF2-HMAC-SHA512 | Generic KDF
|
||||
8900 | scrypt | Generic KDF
|
||||
400 | phpass | Generic KDF
|
||||
16100 | TACACS+ | Network Protocol
|
||||
11400 | SIP digest authentication (MD5) | Network Protocol
|
||||
5300 | IKE-PSK MD5 | Network Protocol
|
||||
5400 | IKE-PSK SHA1 | Network Protocol
|
||||
25100 | SNMPv3 HMAC-MD5-96 | Network Protocol
|
||||
25000 | SNMPv3 HMAC-MD5-96/HMAC-SHA1-96 | Network Protocol
|
||||
25200 | SNMPv3 HMAC-SHA1-96 | Network Protocol
|
||||
26700 | SNMPv3 HMAC-SHA224-128 | Network Protocol
|
||||
26800 | SNMPv3 HMAC-SHA256-192 | Network Protocol
|
||||
26900 | SNMPv3 HMAC-SHA384-256 | Network Protocol
|
||||
27300 | SNMPv3 HMAC-SHA512-384 | Network Protocol
|
||||
2500 | WPA-EAPOL-PBKDF2 | Network Protocol
|
||||
2501 | WPA-EAPOL-PMK | Network Protocol
|
||||
22000 | WPA-PBKDF2-PMKID+EAPOL | Network Protocol
|
||||
22001 | WPA-PMK-PMKID+EAPOL | Network Protocol
|
||||
16800 | WPA-PMKID-PBKDF2 | Network Protocol
|
||||
16801 | WPA-PMKID-PMK | Network Protocol
|
||||
7300 | IPMI2 RAKP HMAC-SHA1 | Network Protocol
|
||||
10200 | CRAM-MD5 | Network Protocol
|
||||
16500 | JWT (JSON Web Token) | Network Protocol
|
||||
29200 | Radmin3 | Network Protocol
|
||||
19600 | Kerberos 5, etype 17, TGS-REP | Network Protocol
|
||||
19800 | Kerberos 5, etype 17, Pre-Auth | Network Protocol
|
||||
28800 | Kerberos 5, etype 17, DB | Network Protocol
|
||||
19700 | Kerberos 5, etype 18, TGS-REP | Network Protocol
|
||||
19900 | Kerberos 5, etype 18, Pre-Auth | Network Protocol
|
||||
28900 | Kerberos 5, etype 18, DB | Network Protocol
|
||||
7500 | Kerberos 5, etype 23, AS-REQ Pre-Auth | Network Protocol
|
||||
13100 | Kerberos 5, etype 23, TGS-REP | Network Protocol
|
||||
18200 | Kerberos 5, etype 23, AS-REP | Network Protocol
|
||||
5500 | NetNTLMv1 / NetNTLMv1+ESS | Network Protocol
|
||||
27000 | NetNTLMv1 / NetNTLMv1+ESS (NT) | Network Protocol
|
||||
5600 | NetNTLMv2 | Network Protocol
|
||||
27100 | NetNTLMv2 (NT) | Network Protocol
|
||||
29100 | Flask Session Cookie ($salt.$salt.$pass) | Network Protocol
|
||||
4800 | iSCSI CHAP authentication, MD5(CHAP) | Network Protocol
|
||||
8500 | RACF | Operating System
|
||||
6300 | AIX {smd5} | Operating System
|
||||
6700 | AIX {ssha1} | Operating System
|
||||
6400 | AIX {ssha256} | Operating System
|
||||
6500 | AIX {ssha512} | Operating System
|
||||
3000 | LM | Operating System
|
||||
19000 | QNX /etc/shadow (MD5) | Operating System
|
||||
19100 | QNX /etc/shadow (SHA256) | Operating System
|
||||
19200 | QNX /etc/shadow (SHA512) | Operating System
|
||||
15300 | DPAPI masterkey file v1 (context 1 and 2) | Operating System
|
||||
15310 | DPAPI masterkey file v1 (context 3) | Operating System
|
||||
15900 | DPAPI masterkey file v2 (context 1 and 2) | Operating System
|
||||
15910 | DPAPI masterkey file v2 (context 3) | Operating System
|
||||
7200 | GRUB 2 | Operating System
|
||||
12800 | MS-AzureSync PBKDF2-HMAC-SHA256 | Operating System
|
||||
12400 | BSDi Crypt, Extended DES | Operating System
|
||||
1000 | NTLM | Operating System
|
||||
9900 | Radmin2 | Operating System
|
||||
5800 | Samsung Android Password/PIN | Operating System
|
||||
28100 | Windows Hello PIN/Password | Operating System
|
||||
13800 | Windows Phone 8+ PIN/password | Operating System
|
||||
2410 | Cisco-ASA MD5 | Operating System
|
||||
9200 | Cisco-IOS $8$ (PBKDF2-SHA256) | Operating System
|
||||
9300 | Cisco-IOS $9$ (scrypt) | Operating System
|
||||
5700 | Cisco-IOS type 4 (SHA256) | Operating System
|
||||
2400 | Cisco-PIX MD5 | Operating System
|
||||
8100 | Citrix NetScaler (SHA1) | Operating System
|
||||
22200 | Citrix NetScaler (SHA512) | Operating System
|
||||
1100 | Domain Cached Credentials (DCC), MS Cache | Operating System
|
||||
2100 | Domain Cached Credentials 2 (DCC2), MS Cache 2 | Operating System
|
||||
7000 | FortiGate (FortiOS) | Operating System
|
||||
26300 | FortiGate256 (FortiOS256) | Operating System
|
||||
125 | ArubaOS | Operating System
|
||||
501 | Juniper IVE | Operating System
|
||||
22 | Juniper NetScreen/SSG (ScreenOS) | Operating System
|
||||
15100 | Juniper/NetBSD sha1crypt | Operating System
|
||||
26500 | iPhone passcode (UID key + System Keybag) | Operating System
|
||||
122 | macOS v10.4, macOS v10.5, macOS v10.6 | Operating System
|
||||
1722 | macOS v10.7 | Operating System
|
||||
7100 | macOS v10.8+ (PBKDF2-SHA512) | Operating System
|
||||
3200 | bcrypt $2*$, Blowfish (Unix) | Operating System
|
||||
500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) | Operating System
|
||||
1500 | descrypt, DES (Unix), Traditional DES | Operating System
|
||||
29000 | sha1($salt.sha1(utf16le($username).':'.utf16le($pass))) | Operating System
|
||||
7400 | sha256crypt $5$, SHA256 (Unix) | Operating System
|
||||
1800 | sha512crypt $6$, SHA512 (Unix) | Operating System
|
||||
24600 | SQLCipher | Database Server
|
||||
131 | MSSQL (2000) | Database Server
|
||||
132 | MSSQL (2005) | Database Server
|
||||
1731 | MSSQL (2012, 2014) | Database Server
|
||||
24100 | MongoDB ServerKey SCRAM-SHA-1 | Database Server
|
||||
24200 | MongoDB ServerKey SCRAM-SHA-256 | Database Server
|
||||
12 | PostgreSQL | Database Server
|
||||
11100 | PostgreSQL CRAM (MD5) | Database Server
|
||||
28600 | PostgreSQL SCRAM-SHA-256 | Database Server
|
||||
3100 | Oracle H: Type (Oracle 7+) | Database Server
|
||||
112 | Oracle S: Type (Oracle 11+) | Database Server
|
||||
12300 | Oracle T: Type (Oracle 12+) | Database Server
|
||||
7401 | MySQL $A$ (sha256crypt) | Database Server
|
||||
11200 | MySQL CRAM (SHA1) | Database Server
|
||||
200 | MySQL323 | Database Server
|
||||
300 | MySQL4.1/MySQL5 | Database Server
|
||||
8000 | Sybase ASE | Database Server
|
||||
8300 | DNSSEC (NSEC3) | FTP, HTTP, SMTP, LDAP Server
|
||||
25900 | KNX IP Secure - Device Authentication Code | FTP, HTTP, SMTP, LDAP Server
|
||||
16400 | CRAM-MD5 Dovecot | FTP, HTTP, SMTP, LDAP Server
|
||||
1411 | SSHA-256(Base64), LDAP {SSHA256} | FTP, HTTP, SMTP, LDAP Server
|
||||
1711 | SSHA-512(Base64), LDAP {SSHA512} | FTP, HTTP, SMTP, LDAP Server
|
||||
24900 | Dahua Authentication MD5 | FTP, HTTP, SMTP, LDAP Server
|
||||
10901 | RedHat 389-DS LDAP (PBKDF2-HMAC-SHA256) | FTP, HTTP, SMTP, LDAP Server
|
||||
15000 | FileZilla Server >= 0.9.55 | FTP, HTTP, SMTP, LDAP Server
|
||||
12600 | ColdFusion 10+ | FTP, HTTP, SMTP, LDAP Server
|
||||
1600 | Apache $apr1$ MD5, md5apr1, MD5 (APR) | FTP, HTTP, SMTP, LDAP Server
|
||||
141 | Episerver 6.x < .NET 4 | FTP, HTTP, SMTP, LDAP Server
|
||||
1441 | Episerver 6.x >= .NET 4 | FTP, HTTP, SMTP, LDAP Server
|
||||
1421 | hMailServer | FTP, HTTP, SMTP, LDAP Server
|
||||
101 | nsldap, SHA-1(Base64), Netscape LDAP SHA | FTP, HTTP, SMTP, LDAP Server
|
||||
111 | nsldaps, SSHA-1(Base64), Netscape LDAP SSHA | FTP, HTTP, SMTP, LDAP Server
|
||||
7700 | SAP CODVN B (BCODE) | Enterprise Application Software (EAS)
|
||||
7701 | SAP CODVN B (BCODE) from RFC_READ_TABLE | Enterprise Application Software (EAS)
|
||||
7800 | SAP CODVN F/G (PASSCODE) | Enterprise Application Software (EAS)
|
||||
7801 | SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE | Enterprise Application Software (EAS)
|
||||
10300 | SAP CODVN H (PWDSALTEDHASH) iSSHA-1 | Enterprise Application Software (EAS)
|
||||
133 | PeopleSoft | Enterprise Application Software (EAS)
|
||||
13500 | PeopleSoft PS_TOKEN | Enterprise Application Software (EAS)
|
||||
21500 | SolarWinds Orion | Enterprise Application Software (EAS)
|
||||
21501 | SolarWinds Orion v2 | Enterprise Application Software (EAS)
|
||||
24 | SolarWinds Serv-U | Enterprise Application Software (EAS)
|
||||
8600 | Lotus Notes/Domino 5 | Enterprise Application Software (EAS)
|
||||
8700 | Lotus Notes/Domino 6 | Enterprise Application Software (EAS)
|
||||
9100 | Lotus Notes/Domino 8 | Enterprise Application Software (EAS)
|
||||
26200 | OpenEdge Progress Encode | Enterprise Application Software (EAS)
|
||||
20600 | Oracle Transportation Management (SHA256) | Enterprise Application Software (EAS)
|
||||
4711 | Huawei sha1(md5($pass).$salt) | Enterprise Application Software (EAS)
|
||||
20711 | AuthMe sha256 | Enterprise Application Software (EAS)
|
||||
22400 | AES Crypt (SHA256) | Full-Disk Encryption (FDE)
|
||||
27400 | VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC) | Full-Disk Encryption (FDE)
|
||||
14600 | LUKS v1 (legacy) | Full-Disk Encryption (FDE)
|
||||
29541 | LUKS v1 RIPEMD-160 + AES | Full-Disk Encryption (FDE)
|
||||
29542 | LUKS v1 RIPEMD-160 + Serpent | Full-Disk Encryption (FDE)
|
||||
29543 | LUKS v1 RIPEMD-160 + Twofish | Full-Disk Encryption (FDE)
|
||||
29511 | LUKS v1 SHA-1 + AES | Full-Disk Encryption (FDE)
|
||||
29512 | LUKS v1 SHA-1 + Serpent | Full-Disk Encryption (FDE)
|
||||
29513 | LUKS v1 SHA-1 + Twofish | Full-Disk Encryption (FDE)
|
||||
29521 | LUKS v1 SHA-256 + AES | Full-Disk Encryption (FDE)
|
||||
29522 | LUKS v1 SHA-256 + Serpent | Full-Disk Encryption (FDE)
|
||||
29523 | LUKS v1 SHA-256 + Twofish | Full-Disk Encryption (FDE)
|
||||
29531 | LUKS v1 SHA-512 + AES | Full-Disk Encryption (FDE)
|
||||
29532 | LUKS v1 SHA-512 + Serpent | Full-Disk Encryption (FDE)
|
||||
29533 | LUKS v1 SHA-512 + Twofish | Full-Disk Encryption (FDE)
|
||||
13711 | VeraCrypt RIPEMD160 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13712 | VeraCrypt RIPEMD160 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13713 | VeraCrypt RIPEMD160 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13741 | VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13742 | VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13743 | VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29411 | VeraCrypt RIPEMD160 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29412 | VeraCrypt RIPEMD160 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29413 | VeraCrypt RIPEMD160 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29441 | VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29442 | VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29443 | VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
13751 | VeraCrypt SHA256 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13752 | VeraCrypt SHA256 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13753 | VeraCrypt SHA256 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13761 | VeraCrypt SHA256 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13762 | VeraCrypt SHA256 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13763 | VeraCrypt SHA256 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29451 | VeraCrypt SHA256 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29452 | VeraCrypt SHA256 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29453 | VeraCrypt SHA256 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29461 | VeraCrypt SHA256 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29462 | VeraCrypt SHA256 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29463 | VeraCrypt SHA256 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
13721 | VeraCrypt SHA512 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13722 | VeraCrypt SHA512 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13723 | VeraCrypt SHA512 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29421 | VeraCrypt SHA512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29422 | VeraCrypt SHA512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29423 | VeraCrypt SHA512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
13771 | VeraCrypt Streebog-512 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13772 | VeraCrypt Streebog-512 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13773 | VeraCrypt Streebog-512 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13781 | VeraCrypt Streebog-512 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13782 | VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13783 | VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29471 | VeraCrypt Streebog-512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29472 | VeraCrypt Streebog-512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29473 | VeraCrypt Streebog-512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29481 | VeraCrypt Streebog-512 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29482 | VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29483 | VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
13731 | VeraCrypt Whirlpool + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13732 | VeraCrypt Whirlpool + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13733 | VeraCrypt Whirlpool + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29431 | VeraCrypt Whirlpool + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29432 | VeraCrypt Whirlpool + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29433 | VeraCrypt Whirlpool + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
23900 | BestCrypt v3 Volume Encryption | Full-Disk Encryption (FDE)
|
||||
16700 | FileVault 2 | Full-Disk Encryption (FDE)
|
||||
27500 | VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS) | Full-Disk Encryption (FDE)
|
||||
27600 | VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS) | Full-Disk Encryption (FDE)
|
||||
20011 | DiskCryptor SHA512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
20012 | DiskCryptor SHA512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
20013 | DiskCryptor SHA512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
22100 | BitLocker | Full-Disk Encryption (FDE)
|
||||
12900 | Android FDE (Samsung DEK) | Full-Disk Encryption (FDE)
|
||||
8800 | Android FDE <= 4.3 | Full-Disk Encryption (FDE)
|
||||
18300 | Apple File System (APFS) | Full-Disk Encryption (FDE)
|
||||
6211 | TrueCrypt RIPEMD160 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6212 | TrueCrypt RIPEMD160 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6213 | TrueCrypt RIPEMD160 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6241 | TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
6242 | TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
6243 | TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29311 | TrueCrypt RIPEMD160 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29312 | TrueCrypt RIPEMD160 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29313 | TrueCrypt RIPEMD160 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29341 | TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29342 | TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29343 | TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
6221 | TrueCrypt SHA512 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6222 | TrueCrypt SHA512 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6223 | TrueCrypt SHA512 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29321 | TrueCrypt SHA512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29322 | TrueCrypt SHA512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29323 | TrueCrypt SHA512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
6231 | TrueCrypt Whirlpool + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6232 | TrueCrypt Whirlpool + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6233 | TrueCrypt Whirlpool + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29331 | TrueCrypt Whirlpool + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29332 | TrueCrypt Whirlpool + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29333 | TrueCrypt Whirlpool + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
12200 | eCryptfs | Full-Disk Encryption (FDE)
|
||||
10400 | PDF 1.1 - 1.3 (Acrobat 2 - 4) | Document
|
||||
10410 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1 | Document
|
||||
10420 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2 | Document
|
||||
10500 | PDF 1.4 - 1.6 (Acrobat 5 - 8) | Document
|
||||
25400 | PDF 1.4 - 1.6 (Acrobat 5 - 8) - user and owner pass | Document
|
||||
10600 | PDF 1.7 Level 3 (Acrobat 9) | Document
|
||||
10700 | PDF 1.7 Level 8 (Acrobat 10 - 11) | Document
|
||||
9400 | MS Office 2007 | Document
|
||||
9500 | MS Office 2010 | Document
|
||||
9600 | MS Office 2013 | Document
|
||||
25300 | MS Office 2016 - SheetProtection | Document
|
||||
9700 | MS Office <= 2003 $0/$1, MD5 + RC4 | Document
|
||||
9710 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #1 | Document
|
||||
9720 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #2 | Document
|
||||
9810 | MS Office <= 2003 $3, SHA1 + RC4, collider #1 | Document
|
||||
9820 | MS Office <= 2003 $3, SHA1 + RC4, collider #2 | Document
|
||||
9800 | MS Office <= 2003 $3/$4, SHA1 + RC4 | Document
|
||||
18400 | Open Document Format (ODF) 1.2 (SHA-256, AES) | Document
|
||||
18600 | Open Document Format (ODF) 1.1 (SHA-1, Blowfish) | Document
|
||||
16200 | Apple Secure Notes | Document
|
||||
23300 | Apple iWork | Document
|
||||
6600 | 1Password, agilekeychain | Password Manager
|
||||
8200 | 1Password, cloudkeychain | Password Manager
|
||||
9000 | Password Safe v2 | Password Manager
|
||||
5200 | Password Safe v3 | Password Manager
|
||||
6800 | LastPass + LastPass sniffed | Password Manager
|
||||
13400 | KeePass 1 (AES/Twofish) and KeePass 2 (AES) | Password Manager
|
||||
29700 | KeePass 1 (AES/Twofish) and KeePass 2 (AES) - keyfile only | Password Manager
|
||||
23400 | Bitwarden | Password Manager
|
||||
16900 | Ansible Vault | Password Manager
|
||||
26000 | Mozilla key3.db | Password Manager
|
||||
26100 | Mozilla key4.db | Password Manager
|
||||
23100 | Apple Keychain | Password Manager
|
||||
11600 | 7-Zip | Archive
|
||||
12500 | RAR3-hp | Archive
|
||||
23700 | RAR3-p (Uncompressed) | Archive
|
||||
13000 | RAR5 | Archive
|
||||
17220 | PKZIP (Compressed Multi-File) | Archive
|
||||
17200 | PKZIP (Compressed) | Archive
|
||||
17225 | PKZIP (Mixed Multi-File) | Archive
|
||||
17230 | PKZIP (Mixed Multi-File Checksum-Only) | Archive
|
||||
17210 | PKZIP (Uncompressed) | Archive
|
||||
20500 | PKZIP Master Key | Archive
|
||||
20510 | PKZIP Master Key (6 byte optimization) | Archive
|
||||
23001 | SecureZIP AES-128 | Archive
|
||||
23002 | SecureZIP AES-192 | Archive
|
||||
23003 | SecureZIP AES-256 | Archive
|
||||
13600 | WinZip | Archive
|
||||
18900 | Android Backup | Archive
|
||||
24700 | Stuffit5 | Archive
|
||||
13200 | AxCrypt 1 | Archive
|
||||
13300 | AxCrypt 1 in-memory SHA1 | Archive
|
||||
23500 | AxCrypt 2 AES-128 | Archive
|
||||
23600 | AxCrypt 2 AES-256 | Archive
|
||||
14700 | iTunes backup < 10.0 | Archive
|
||||
14800 | iTunes backup >= 10.0 | Archive
|
||||
8400 | WBB3 (Woltlab Burning Board) | Forums, CMS, E-Commerce
|
||||
2612 | PHPS | Forums, CMS, E-Commerce
|
||||
121 | SMF (Simple Machines Forum) > v1.1 | Forums, CMS, E-Commerce
|
||||
3711 | MediaWiki B type | Forums, CMS, E-Commerce
|
||||
4521 | Redmine | Forums, CMS, E-Commerce
|
||||
24800 | Umbraco HMAC-SHA1 | Forums, CMS, E-Commerce
|
||||
11 | Joomla < 2.5.18 | Forums, CMS, E-Commerce
|
||||
13900 | OpenCart | Forums, CMS, E-Commerce
|
||||
11000 | PrestaShop | Forums, CMS, E-Commerce
|
||||
16000 | Tripcode | Forums, CMS, E-Commerce
|
||||
7900 | Drupal7 | Forums, CMS, E-Commerce
|
||||
4522 | PunBB | Forums, CMS, E-Commerce
|
||||
2811 | MyBB 1.2+, IPB2+ (Invision Power Board) | Forums, CMS, E-Commerce
|
||||
2611 | vBulletin < v3.8.5 | Forums, CMS, E-Commerce
|
||||
2711 | vBulletin >= v3.8.5 | Forums, CMS, E-Commerce
|
||||
25600 | bcrypt(md5($pass)) / bcryptmd5 | Forums, CMS, E-Commerce
|
||||
25800 | bcrypt(sha1($pass)) / bcryptsha1 | Forums, CMS, E-Commerce
|
||||
28400 | bcrypt(sha512($pass)) / bcryptsha512 | Forums, CMS, E-Commerce
|
||||
21 | osCommerce, xt:Commerce | Forums, CMS, E-Commerce
|
||||
18100 | TOTP (HMAC-SHA1) | One-Time Password
|
||||
2000 | STDOUT | Plaintext
|
||||
99999 | Plaintext | Plaintext
|
||||
21600 | Web2py pbkdf2-sha512 | Framework
|
||||
10000 | Django (PBKDF2-SHA256) | Framework
|
||||
124 | Django (SHA-1) | Framework
|
||||
12001 | Atlassian (PBKDF2-HMAC-SHA1) | Framework
|
||||
19500 | Ruby on Rails Restful-Authentication | Framework
|
||||
27200 | Ruby on Rails Restful Auth (one round, no sitekey) | Framework
|
||||
30000 | Python Werkzeug MD5 (HMAC-MD5 (key = $salt)) | Framework
|
||||
30120 | Python Werkzeug SHA256 (HMAC-SHA256 (key = $salt)) | Framework
|
||||
20200 | Python passlib pbkdf2-sha512 | Framework
|
||||
20300 | Python passlib pbkdf2-sha256 | Framework
|
||||
20400 | Python passlib pbkdf2-sha1 | Framework
|
||||
24410 | PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES) | Private Key
|
||||
24420 | PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES) | Private Key
|
||||
15500 | JKS Java Key Store Private Keys (SHA1) | Private Key
|
||||
22911 | RSA/DSA/EC/OpenSSH Private Keys ($0$) | Private Key
|
||||
22921 | RSA/DSA/EC/OpenSSH Private Keys ($6$) | Private Key
|
||||
22931 | RSA/DSA/EC/OpenSSH Private Keys ($1, $3$) | Private Key
|
||||
22941 | RSA/DSA/EC/OpenSSH Private Keys ($4$) | Private Key
|
||||
22951 | RSA/DSA/EC/OpenSSH Private Keys ($5$) | Private Key
|
||||
23200 | XMPP SCRAM PBKDF2-SHA1 | Instant Messaging Service
|
||||
28300 | Teamspeak 3 (channel hash) | Instant Messaging Service
|
||||
22600 | Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1) | Instant Messaging Service
|
||||
24500 | Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512) | Instant Messaging Service
|
||||
22301 | Telegram Mobile App Passcode (SHA256) | Instant Messaging Service
|
||||
23 | Skype | Instant Messaging Service
|
||||
29600 | Terra Station Wallet (AES256-CBC(PBKDF2($pass))) | Cryptocurrency Wallet
|
||||
26600 | MetaMask Wallet | Cryptocurrency Wallet
|
||||
21000 | BitShares v0.x - sha512(sha512_bin(pass)) | Cryptocurrency Wallet
|
||||
28501 | Bitcoin WIF private key (P2PKH), compressed | Cryptocurrency Wallet
|
||||
28502 | Bitcoin WIF private key (P2PKH), uncompressed | Cryptocurrency Wallet
|
||||
28503 | Bitcoin WIF private key (P2WPKH, Bech32), compressed | Cryptocurrency Wallet
|
||||
28504 | Bitcoin WIF private key (P2WPKH, Bech32), uncompressed | Cryptocurrency Wallet
|
||||
28505 | Bitcoin WIF private key (P2SH(P2WPKH)), compressed | Cryptocurrency Wallet
|
||||
28506 | Bitcoin WIF private key (P2SH(P2WPKH)), uncompressed | Cryptocurrency Wallet
|
||||
11300 | Bitcoin/Litecoin wallet.dat | Cryptocurrency Wallet
|
||||
16600 | Electrum Wallet (Salt-Type 1-3) | Cryptocurrency Wallet
|
||||
21700 | Electrum Wallet (Salt-Type 4) | Cryptocurrency Wallet
|
||||
21800 | Electrum Wallet (Salt-Type 5) | Cryptocurrency Wallet
|
||||
12700 | Blockchain, My Wallet | Cryptocurrency Wallet
|
||||
15200 | Blockchain, My Wallet, V2 | Cryptocurrency Wallet
|
||||
18800 | Blockchain, My Wallet, Second Password (SHA256) | Cryptocurrency Wallet
|
||||
25500 | Stargazer Stellar Wallet XLM | Cryptocurrency Wallet
|
||||
16300 | Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256 | Cryptocurrency Wallet
|
||||
15600 | Ethereum Wallet, PBKDF2-HMAC-SHA256 | Cryptocurrency Wallet
|
||||
15700 | Ethereum Wallet, SCRYPT | Cryptocurrency Wallet
|
||||
22500 | MultiBit Classic .key (MD5) | Cryptocurrency Wallet
|
||||
27700 | MultiBit Classic .wallet (scrypt) | Cryptocurrency Wallet
|
||||
22700 | MultiBit HD (scrypt) | Cryptocurrency Wallet
|
||||
28200 | Exodus Desktop Wallet (scrypt) | Cryptocurrency Wallet
|
||||
`
|
||||
|
||||
credsAddFileHelp = fmt.Sprintf(`[[.Bold]]Command:[[.Normal]] creds add file
|
||||
[[.Bold]]About:[[.Normal]] Add a file containing credentials to the database.
|
||||
|
||||
[[.Bold]]File Formats:[[.Normal]]
|
||||
% 10s - One hash per line.
|
||||
% 10s - A file containing lines of 'username:hash' pairs.
|
||||
% 10s - A CSV file containing 'username,hash' pairs (additional columns ignored).
|
||||
`, creds.HashNewlineFormat, creds.UserColonHashNewlineFormat, creds.CSVFormat)
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
package loot
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2021 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/desertbit/grumble"
|
||||
)
|
||||
|
||||
// LootAddCredentialCmd - Add a credential type loot
|
||||
func LootAddCredentialCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
prompt := &survey.Select{
|
||||
Message: "Choose a credential type:",
|
||||
Options: []string{
|
||||
clientpb.CredentialType_API_KEY.String(),
|
||||
clientpb.CredentialType_USER_PASSWORD.String(),
|
||||
},
|
||||
}
|
||||
credType := ""
|
||||
survey.AskOne(prompt, &credType, survey.WithValidator(survey.Required))
|
||||
name := ctx.Flags.String("name")
|
||||
if name == "" {
|
||||
namePrompt := &survey.Input{Message: "Credential Name: "}
|
||||
con.Println()
|
||||
survey.AskOne(namePrompt, &name)
|
||||
con.Println()
|
||||
}
|
||||
|
||||
loot := &clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
Name: name,
|
||||
Credential: &clientpb.Credential{},
|
||||
}
|
||||
|
||||
switch credType {
|
||||
case clientpb.CredentialType_USER_PASSWORD.String():
|
||||
loot.CredentialType = clientpb.CredentialType_USER_PASSWORD
|
||||
for loot.Credential.User == "" {
|
||||
usernamePrompt := &survey.Input{Message: "Username: "}
|
||||
survey.AskOne(usernamePrompt, &loot.Credential.User)
|
||||
if loot.Credential.User == "" {
|
||||
con.Println("Username is required")
|
||||
}
|
||||
}
|
||||
for loot.Credential.Password == "" {
|
||||
passwordPrompt := &survey.Input{Message: "Password: "}
|
||||
survey.AskOne(passwordPrompt, &loot.Credential.Password)
|
||||
if loot.Credential.Password == "" {
|
||||
con.Println("Password is required")
|
||||
}
|
||||
}
|
||||
case clientpb.CredentialType_API_KEY.String():
|
||||
loot.CredentialType = clientpb.CredentialType_API_KEY
|
||||
usernamePrompt := &survey.Input{Message: "API Key: "}
|
||||
survey.AskOne(usernamePrompt, &loot.Credential.APIKey)
|
||||
}
|
||||
|
||||
loot, err := con.Rpc.LootAdd(context.Background(), loot)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
con.PrintInfof("Successfully added loot to server (%s)\n", loot.LootID)
|
||||
}
|
||||
@@ -22,7 +22,6 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/desertbit/grumble"
|
||||
)
|
||||
|
||||
@@ -33,21 +32,12 @@ func LootFetchCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
loot, err = con.Rpc.LootContent(context.Background(), loot)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Handle loot based on its type
|
||||
switch loot.Type {
|
||||
case clientpb.LootType_LOOT_FILE:
|
||||
PrintLootFile(con.App.Stdout(), loot)
|
||||
case clientpb.LootType_LOOT_CREDENTIAL:
|
||||
PrintLootCredential(con.App.Stdout(), loot)
|
||||
}
|
||||
|
||||
PrintLootFile(loot, con)
|
||||
if ctx.Flags.String("save") != "" {
|
||||
savedTo, err := saveLootToDisk(ctx, loot)
|
||||
if err != nil {
|
||||
|
||||
@@ -27,12 +27,11 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/bishopfox/sliver/protobuf/rpcpb"
|
||||
@@ -53,12 +52,7 @@ func AddLootFile(rpc rpcpb.SliverRPCClient, name string, fileName string, data [
|
||||
if len(data) < 1 {
|
||||
return ErrNoLootFileData
|
||||
}
|
||||
var lootType clientpb.LootType
|
||||
if isCredential {
|
||||
lootType = clientpb.LootType_LOOT_CREDENTIAL
|
||||
} else {
|
||||
lootType = clientpb.LootType_LOOT_FILE
|
||||
}
|
||||
|
||||
var lootFileType clientpb.FileType
|
||||
if isText(data) || strings.HasSuffix(fileName, ".txt") {
|
||||
lootFileType = clientpb.FileType_TEXT
|
||||
@@ -67,109 +61,27 @@ func AddLootFile(rpc rpcpb.SliverRPCClient, name string, fileName string, data [
|
||||
}
|
||||
loot := &clientpb.Loot{
|
||||
Name: name,
|
||||
Type: lootType,
|
||||
FileType: lootFileType,
|
||||
File: &commonpb.File{
|
||||
Name: path.Base(fileName),
|
||||
Name: filepath.Base(fileName),
|
||||
Data: data,
|
||||
},
|
||||
}
|
||||
if lootType == clientpb.LootType_LOOT_CREDENTIAL {
|
||||
loot.CredentialType = clientpb.CredentialType_FILE
|
||||
}
|
||||
|
||||
_, err := rpc.LootAdd(context.Background(), loot)
|
||||
return err
|
||||
}
|
||||
|
||||
// AddLootUserPassword - Add user/password as loot
|
||||
func AddLootUserPassword(rpc rpcpb.SliverRPCClient, name string, user string, password string) error {
|
||||
loot := &clientpb.Loot{
|
||||
Name: name,
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
CredentialType: clientpb.CredentialType_USER_PASSWORD,
|
||||
Credential: &clientpb.Credential{
|
||||
User: user,
|
||||
Password: password,
|
||||
},
|
||||
}
|
||||
_, err := rpc.LootAdd(context.Background(), loot)
|
||||
return err
|
||||
}
|
||||
|
||||
// AddLootAPIKey - Add a api key as loot
|
||||
func AddLootAPIKey(rpc rpcpb.SliverRPCClient, name string, apiKey string) error {
|
||||
loot := &clientpb.Loot{
|
||||
Name: name,
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
CredentialType: clientpb.CredentialType_API_KEY,
|
||||
Credential: &clientpb.Credential{
|
||||
APIKey: apiKey,
|
||||
},
|
||||
}
|
||||
_, err := rpc.LootAdd(context.Background(), loot)
|
||||
return err
|
||||
}
|
||||
|
||||
// SelectCredentials - An interactive menu for the user to select a piece of loot
|
||||
func SelectCredentials(con *console.SliverConsoleClient) (*clientpb.Loot, error) {
|
||||
allLoot, err := con.Rpc.LootAllOf(context.Background(), &clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
}
|
||||
|
||||
// Render selection table
|
||||
buf := bytes.NewBufferString("")
|
||||
table := tabwriter.NewWriter(buf, 0, 2, 2, ' ', 0)
|
||||
for _, loot := range allLoot.Loot {
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t\n", loot.Name, loot.CredentialType, loot.LootID)
|
||||
}
|
||||
table.Flush()
|
||||
options := strings.Split(buf.String(), "\n")
|
||||
options = options[:len(options)-1]
|
||||
if len(options) == 0 {
|
||||
return nil, errors.New("no loot to select from")
|
||||
}
|
||||
|
||||
selected := ""
|
||||
prompt := &survey.Select{
|
||||
Message: "Select a piece of credentials:",
|
||||
Options: options,
|
||||
}
|
||||
err = survey.AskOne(prompt, &selected)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for index, value := range options {
|
||||
if value == selected {
|
||||
return allLoot.Loot[index], nil
|
||||
}
|
||||
}
|
||||
return nil, errors.New("loot not found")
|
||||
}
|
||||
|
||||
// SelectLoot - Interactive menu for the user to select a piece loot (all types)
|
||||
func SelectLoot(ctx *grumble.Context, rpc rpcpb.SliverRPCClient) (*clientpb.Loot, error) {
|
||||
|
||||
// Fetch data with optional filter
|
||||
filter := ctx.Flags.String("filter")
|
||||
var allLoot *clientpb.AllLoot
|
||||
var err error
|
||||
if filter == "" {
|
||||
allLoot, err = rpc.LootAll(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
lootType, err := lootTypeFromHumanStr(filter)
|
||||
if err != nil {
|
||||
return nil, ErrInvalidFileType
|
||||
}
|
||||
allLoot, err = rpc.LootAllOf(context.Background(), &clientpb.Loot{Type: lootType})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
allLoot, err = rpc.LootAll(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Render selection table
|
||||
@@ -181,9 +93,9 @@ func SelectLoot(ctx *grumble.Context, rpc rpcpb.SliverRPCClient) (*clientpb.Loot
|
||||
filename = loot.File.Name
|
||||
}
|
||||
if loot.Name == filename {
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t\n", loot.Name, loot.Type, loot.LootID)
|
||||
fmt.Fprintf(table, "%s\t%s\t\n", loot.Name, loot.ID)
|
||||
} else {
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%s\t\n", loot.Name, filename, loot.Type, loot.LootID)
|
||||
fmt.Fprintf(table, "%s\t(File name: %s)\t%s\t\n", loot.Name, filename, loot.ID)
|
||||
}
|
||||
}
|
||||
table.Flush()
|
||||
|
||||
@@ -21,9 +21,9 @@ package loot
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
@@ -44,35 +44,14 @@ func LootAddLocalCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
name = path.Base(localPath)
|
||||
}
|
||||
|
||||
var lootType clientpb.LootType
|
||||
var err error
|
||||
lootTypeStr := ctx.Flags.String("type")
|
||||
if lootTypeStr != "" {
|
||||
lootType, err = lootTypeFromHumanStr(lootTypeStr)
|
||||
if err == ErrInvalidLootType {
|
||||
con.PrintErrorf("Invalid loot type %s\n", lootTypeStr)
|
||||
return
|
||||
}
|
||||
var lootFileType clientpb.FileType
|
||||
if isTextFile(localPath) {
|
||||
lootFileType = clientpb.FileType_TEXT
|
||||
} else {
|
||||
lootType = clientpb.LootType_LOOT_FILE
|
||||
lootFileType = clientpb.FileType_BINARY
|
||||
}
|
||||
|
||||
lootFileTypeStr := ctx.Flags.String("file-type")
|
||||
var lootFileType clientpb.FileType
|
||||
if lootFileTypeStr != "" {
|
||||
lootFileType, err = lootFileTypeFromHumanStr(lootFileTypeStr)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if isTextFile(localPath) {
|
||||
lootFileType = clientpb.FileType_TEXT
|
||||
} else {
|
||||
lootFileType = clientpb.FileType_BINARY
|
||||
}
|
||||
}
|
||||
data, err := ioutil.ReadFile(localPath)
|
||||
data, err := os.ReadFile(localPath)
|
||||
if err != nil {
|
||||
con.PrintErrorf("Failed to read file %s\n", err)
|
||||
return
|
||||
@@ -80,16 +59,12 @@ func LootAddLocalCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
|
||||
loot := &clientpb.Loot{
|
||||
Name: name,
|
||||
Type: lootType,
|
||||
FileType: lootFileType,
|
||||
File: &commonpb.File{
|
||||
Name: path.Base(localPath),
|
||||
Name: filepath.Base(localPath),
|
||||
Data: data,
|
||||
},
|
||||
}
|
||||
if lootType == clientpb.LootType_LOOT_CREDENTIAL {
|
||||
loot.CredentialType = clientpb.CredentialType_FILE
|
||||
}
|
||||
|
||||
ctrl := make(chan bool)
|
||||
con.SpinUntil(fmt.Sprintf("Uploading loot from %s", localPath), ctrl)
|
||||
@@ -100,5 +75,5 @@ func LootAddLocalCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
}
|
||||
|
||||
con.PrintInfof("Successfully added loot to server (%s)\n", loot.LootID)
|
||||
con.PrintInfof("Successfully added loot to server (%s)\n", loot.ID)
|
||||
}
|
||||
+42
-244
@@ -19,113 +19,85 @@ package loot
|
||||
*/
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"github.com/bishopfox/sliver/client/command/settings"
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/bishopfox/sliver/util"
|
||||
"github.com/desertbit/grumble"
|
||||
"github.com/jedib0t/go-pretty/v6/table"
|
||||
)
|
||||
|
||||
// LootCmd - The loot root command
|
||||
func LootCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
filter := ctx.Flags.String("filter")
|
||||
var allLoot *clientpb.AllLoot
|
||||
var err error
|
||||
if filter == "" {
|
||||
allLoot, err = con.Rpc.LootAll(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
con.PrintErrorf("Failed to fetch loot %s\n", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
lootType, err := lootTypeFromHumanStr(filter)
|
||||
if err != nil {
|
||||
con.PrintErrorf("Invalid loot type see --help")
|
||||
return
|
||||
}
|
||||
allLoot, err = con.Rpc.LootAllOf(context.Background(), &clientpb.Loot{Type: lootType})
|
||||
if err != nil {
|
||||
con.PrintErrorf("Failed to fetch loot %s\n", err)
|
||||
return
|
||||
}
|
||||
allLoot, err := con.Rpc.LootAll(context.Background(), &commonpb.Empty{})
|
||||
if err != nil {
|
||||
con.PrintErrorf("Failed to fetch loot %s\n", err)
|
||||
return
|
||||
}
|
||||
if filter == "" {
|
||||
PrintAllLootTable(con.App.Stdout(), allLoot)
|
||||
} else {
|
||||
lootType, _ := lootTypeFromHumanStr(filter)
|
||||
switch lootType {
|
||||
case clientpb.LootType_LOOT_FILE:
|
||||
PrintAllFileLootTable(con.App.Stdout(), allLoot)
|
||||
case clientpb.LootType_LOOT_CREDENTIAL:
|
||||
PrintAllCredentialLootTable(con.App.Stdout(), allLoot)
|
||||
PrintAllFileLootTable(allLoot, con)
|
||||
}
|
||||
|
||||
// PrintAllFileLootTable - Displays a table of all file loot
|
||||
func PrintAllFileLootTable(allLoot *clientpb.AllLoot, con *console.SliverConsoleClient) {
|
||||
if allLoot == nil || len(allLoot.Loot) == 0 {
|
||||
con.PrintInfof("No loot 🙁\n")
|
||||
return
|
||||
}
|
||||
tw := table.NewWriter()
|
||||
tw.SetStyle(settings.GetTableStyle(con))
|
||||
tw.AppendHeader(table.Row{
|
||||
"ID",
|
||||
"Name",
|
||||
"File Name",
|
||||
"Type",
|
||||
"Size",
|
||||
})
|
||||
for _, loot := range allLoot.Loot {
|
||||
if loot.File != nil {
|
||||
tw.AppendRow(table.Row{
|
||||
strings.Split(loot.ID, "-")[0],
|
||||
loot.Name,
|
||||
loot.File.Name,
|
||||
fileTypeToStr(loot.FileType),
|
||||
util.ByteCountBinary(loot.Size),
|
||||
})
|
||||
}
|
||||
}
|
||||
con.Printf("%s\n", tw.Render())
|
||||
}
|
||||
|
||||
// PrintLootFile - Display the contents of a piece of loot
|
||||
func PrintLootFile(stdout io.Writer, loot *clientpb.Loot) {
|
||||
func PrintLootFile(loot *clientpb.Loot, con *console.SliverConsoleClient) {
|
||||
if loot.File == nil {
|
||||
return
|
||||
}
|
||||
fmt.Fprintln(stdout)
|
||||
|
||||
if loot.File.Name != "" {
|
||||
fmt.Fprintf(stdout, "%sFile Name:%s %s\n\n", console.Bold, console.Normal, loot.File.Name)
|
||||
con.PrintInfof("%sFile Name:%s %s\n\n", console.Bold, console.Normal, loot.File.Name)
|
||||
}
|
||||
if loot.File.Data != nil && 0 < len(loot.File.Data) {
|
||||
if loot.FileType == clientpb.FileType_TEXT || isText(loot.File.Data) {
|
||||
fmt.Fprintf(stdout, "%s", string(loot.File.Data))
|
||||
con.Printf("%s\n", string(loot.File.Data))
|
||||
} else {
|
||||
fmt.Fprintf(stdout, "<%d bytes of binary data>\n", len(loot.File.Data))
|
||||
con.PrintInfof("<%d bytes of binary data>\n", len(loot.File.Data))
|
||||
}
|
||||
} else {
|
||||
fmt.Fprintf(stdout, "No file data\n")
|
||||
}
|
||||
}
|
||||
|
||||
func PrintLootCredential(stdout io.Writer, loot *clientpb.Loot) {
|
||||
stdout.Write([]byte("\n"))
|
||||
switch loot.CredentialType {
|
||||
case clientpb.CredentialType_USER_PASSWORD:
|
||||
if loot.Credential != nil {
|
||||
fmt.Fprintf(stdout, "%s User:%s %s\n", console.Bold, console.Normal, loot.Credential.User)
|
||||
fmt.Fprintf(stdout, "%sPassword:%s %s\n", console.Bold, console.Normal, loot.Credential.Password)
|
||||
}
|
||||
if loot.File != nil {
|
||||
PrintLootFile(stdout, loot)
|
||||
}
|
||||
case clientpb.CredentialType_API_KEY:
|
||||
if loot.Credential != nil {
|
||||
fmt.Fprintf(stdout, "%sAPI Key:%s %s\n", console.Bold, console.Normal, loot.Credential.APIKey)
|
||||
}
|
||||
if loot.File != nil {
|
||||
PrintLootFile(stdout, loot)
|
||||
}
|
||||
case clientpb.CredentialType_FILE:
|
||||
if loot.File != nil {
|
||||
PrintLootFile(stdout, loot)
|
||||
}
|
||||
default:
|
||||
fmt.Fprintf(stdout, "%v\n", loot.Credential) // Well, let's give it our best
|
||||
con.PrintInfof("No file data\n")
|
||||
}
|
||||
}
|
||||
|
||||
// Any loot with a "File" can be saved to disk
|
||||
func saveLootToDisk(ctx *grumble.Context, loot *clientpb.Loot) (string, error) {
|
||||
if loot.File == nil {
|
||||
return "", errors.New("Loot does not contain a file")
|
||||
return "", errors.New("loot does not contain a file")
|
||||
}
|
||||
|
||||
saveTo := ctx.Flags.String("save")
|
||||
@@ -144,158 +116,10 @@ func saveLootToDisk(ctx *grumble.Context, loot *clientpb.Loot) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
}
|
||||
err = ioutil.WriteFile(saveTo, loot.File.Data, 0600)
|
||||
err = os.WriteFile(saveTo, loot.File.Data, 0600)
|
||||
return saveTo, err
|
||||
}
|
||||
|
||||
// PrintAllLootTable - Displays a table of all loot
|
||||
func PrintAllLootTable(stdout io.Writer, allLoot *clientpb.AllLoot) {
|
||||
if allLoot == nil || len(allLoot.Loot) == 0 {
|
||||
fmt.Fprintf(stdout, console.Info+"No loot 🙁\n")
|
||||
return
|
||||
}
|
||||
|
||||
outputBuf := bytes.NewBufferString("")
|
||||
table := tabwriter.NewWriter(outputBuf, 0, 2, 2, ' ', 0)
|
||||
|
||||
// Column Headers
|
||||
fmt.Fprintln(table, "Type\tName\tFile Name\tUUID\t")
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%s\t\n",
|
||||
strings.Repeat("=", len("Type")),
|
||||
strings.Repeat("=", len("Name")),
|
||||
strings.Repeat("=", len("File Name")),
|
||||
strings.Repeat("=", len("UUID")),
|
||||
)
|
||||
|
||||
for _, loot := range allLoot.Loot {
|
||||
filename := ""
|
||||
if loot.File != nil {
|
||||
filename = loot.File.Name
|
||||
}
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%s\t\n", lootTypeToStr(loot.Type), loot.Name, filename, loot.LootID)
|
||||
}
|
||||
|
||||
table.Flush()
|
||||
fmt.Fprintf(stdout, outputBuf.String())
|
||||
}
|
||||
|
||||
// PrintAllFileLootTable - Displays a table of all file loot
|
||||
func PrintAllFileLootTable(stdout io.Writer, allLoot *clientpb.AllLoot) {
|
||||
if allLoot == nil || len(allLoot.Loot) == 0 {
|
||||
fmt.Fprintf(stdout, console.Info+"No loot 🙁\n")
|
||||
return
|
||||
}
|
||||
|
||||
outputBuf := bytes.NewBufferString("")
|
||||
table := tabwriter.NewWriter(outputBuf, 0, 2, 2, ' ', 0)
|
||||
|
||||
// Column Headers
|
||||
fmt.Fprintln(table, "Type\tName\tFile Name\tSize\tUUID\t")
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%s\t%s\t\n",
|
||||
strings.Repeat("=", len("Type")),
|
||||
strings.Repeat("=", len("Name")),
|
||||
strings.Repeat("=", len("File Name")),
|
||||
strings.Repeat("=", len("Size")),
|
||||
strings.Repeat("=", len("UUID")),
|
||||
)
|
||||
for _, loot := range allLoot.Loot {
|
||||
if loot.Type != clientpb.LootType_LOOT_FILE {
|
||||
continue
|
||||
}
|
||||
size := 0
|
||||
name := ""
|
||||
if loot.File != nil {
|
||||
name = loot.File.Name
|
||||
size = len(loot.File.Data)
|
||||
}
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%d\t%s\t\n",
|
||||
fileTypeToStr(loot.FileType),
|
||||
loot.Name,
|
||||
name,
|
||||
size,
|
||||
loot.LootID,
|
||||
)
|
||||
}
|
||||
|
||||
table.Flush()
|
||||
fmt.Fprintf(stdout, outputBuf.String())
|
||||
}
|
||||
|
||||
// PrintAllCredentialLootTable - Displays a table of all credential loot
|
||||
func PrintAllCredentialLootTable(stdout io.Writer, allLoot *clientpb.AllLoot) {
|
||||
if allLoot == nil || len(allLoot.Loot) == 0 {
|
||||
fmt.Fprintf(stdout, console.Info+"No loot 🙁\n")
|
||||
return
|
||||
}
|
||||
|
||||
outputBuf := bytes.NewBufferString("")
|
||||
table := tabwriter.NewWriter(outputBuf, 0, 2, 2, ' ', 0)
|
||||
|
||||
// Column Headers
|
||||
fmt.Fprintln(table, "Type\tName\tUser\tPassword\tAPI Key\tFile Name\tUUID\t")
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
|
||||
strings.Repeat("=", len("Type")),
|
||||
strings.Repeat("=", len("Name")),
|
||||
strings.Repeat("=", len("User")),
|
||||
strings.Repeat("=", len("Password")),
|
||||
strings.Repeat("=", len("API Key")),
|
||||
strings.Repeat("=", len("File Name")),
|
||||
strings.Repeat("=", len("UUID")),
|
||||
)
|
||||
for _, loot := range allLoot.Loot {
|
||||
if loot.Type != clientpb.LootType_LOOT_CREDENTIAL {
|
||||
continue
|
||||
}
|
||||
fileName := ""
|
||||
if loot.File != nil {
|
||||
fileName = loot.File.Name
|
||||
}
|
||||
user := ""
|
||||
password := ""
|
||||
apiKey := ""
|
||||
if loot.Credential != nil {
|
||||
user = loot.Credential.User
|
||||
password = loot.Credential.Password
|
||||
apiKey = loot.Credential.APIKey
|
||||
}
|
||||
fmt.Fprintf(table, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
|
||||
credentialTypeToString(loot.CredentialType),
|
||||
loot.Name,
|
||||
user,
|
||||
password,
|
||||
apiKey,
|
||||
fileName,
|
||||
loot.LootID,
|
||||
)
|
||||
}
|
||||
table.Flush()
|
||||
fmt.Fprintf(stdout, outputBuf.String())
|
||||
}
|
||||
|
||||
func lootTypeToStr(value clientpb.LootType) string {
|
||||
switch value {
|
||||
case clientpb.LootType_LOOT_FILE:
|
||||
return "File"
|
||||
case clientpb.LootType_LOOT_CREDENTIAL:
|
||||
return "Credential"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func credentialTypeToString(value clientpb.CredentialType) string {
|
||||
switch value {
|
||||
case clientpb.CredentialType_API_KEY:
|
||||
return "API Key"
|
||||
case clientpb.CredentialType_USER_PASSWORD:
|
||||
return "User/Password"
|
||||
case clientpb.CredentialType_FILE:
|
||||
return "File"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func fileTypeToStr(value clientpb.FileType) string {
|
||||
switch value {
|
||||
case clientpb.FileType_BINARY:
|
||||
@@ -333,32 +157,6 @@ func lootFileTypeFromHumanStr(value string) (clientpb.FileType, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func lootTypeFromHumanStr(value string) (clientpb.LootType, error) {
|
||||
switch strings.ToLower(value) {
|
||||
|
||||
case "c":
|
||||
fallthrough
|
||||
case "cred":
|
||||
fallthrough
|
||||
case "creds":
|
||||
fallthrough
|
||||
case "credentials":
|
||||
fallthrough
|
||||
case "credential":
|
||||
return clientpb.LootType_LOOT_CREDENTIAL, nil
|
||||
|
||||
case "f":
|
||||
fallthrough
|
||||
case "files":
|
||||
fallthrough
|
||||
case "file":
|
||||
return clientpb.LootType_LOOT_FILE, nil
|
||||
|
||||
default:
|
||||
return -1, ErrInvalidLootType
|
||||
}
|
||||
}
|
||||
|
||||
// Taken from: https://cs.opensource.google/go/x/tools/+/refs/tags/v0.1.4:godoc/util/util.go;l=69
|
||||
|
||||
// textExt[x] is true if the extension x indicates a text file, and false otherwise.
|
||||
|
||||
@@ -37,27 +37,6 @@ import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func ValidateLootType(lootTypeInput string) (clientpb.LootType, error) {
|
||||
var lootType clientpb.LootType
|
||||
var err error
|
||||
|
||||
if lootTypeInput != "" {
|
||||
lootType, err = lootTypeFromHumanStr(lootTypeInput)
|
||||
if err != nil {
|
||||
/*
|
||||
If we get an error, that means that this loot type was invalid.
|
||||
We will leave it up to the caller to handle the error (output it
|
||||
to the console for example)
|
||||
*/
|
||||
return lootType, fmt.Errorf("Invalid loot type %s", lootTypeInput)
|
||||
}
|
||||
} else {
|
||||
lootType = clientpb.LootType_LOOT_FILE
|
||||
}
|
||||
|
||||
return lootType, err
|
||||
}
|
||||
|
||||
func ValidateLootFileType(lootFileTypeInput string, data []byte) clientpb.FileType {
|
||||
lootFileType, err := lootFileTypeFromHumanStr(lootFileTypeInput)
|
||||
if lootFileType == -1 || err != nil {
|
||||
@@ -72,8 +51,8 @@ func ValidateLootFileType(lootFileTypeInput string, data []byte) clientpb.FileTy
|
||||
}
|
||||
|
||||
/*
|
||||
Eventually this function needs to be refactored out, but we made the decision to
|
||||
duplicate it for now
|
||||
Eventually this function needs to be refactored out, but we made the decision to
|
||||
duplicate it for now
|
||||
*/
|
||||
func PerformDownload(remotePath string, fileName string, ctx *grumble.Context, con *console.SliverConsoleClient) (*sliverpb.Download, error) {
|
||||
ctrl := make(chan bool)
|
||||
@@ -98,39 +77,32 @@ func PerformDownload(remotePath string, fileName string, ctx *grumble.Context, c
|
||||
}
|
||||
|
||||
if download.Response != nil && download.Response.Err != "" {
|
||||
return nil, fmt.Errorf("%s\n", download.Response.Err)
|
||||
return nil, fmt.Errorf("%s", download.Response.Err)
|
||||
}
|
||||
|
||||
// Decode the downloaded data if required
|
||||
if download.Encoder == "gzip" {
|
||||
download.Data, err = new(encoders.Gzip).Decode(download.Data)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Decoding failed %s", err)
|
||||
return nil, fmt.Errorf("decoding failed %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
return download, nil
|
||||
}
|
||||
|
||||
func CreateLootMessage(fileName string, lootName string, lootType clientpb.LootType, lootFileType clientpb.FileType, data []byte) *clientpb.Loot {
|
||||
func CreateLootMessage(fileName string, lootName string, lootFileType clientpb.FileType, data []byte) *clientpb.Loot {
|
||||
if lootName == "" {
|
||||
lootName = fileName
|
||||
}
|
||||
|
||||
lootMessage := &clientpb.Loot{
|
||||
Name: lootName,
|
||||
Type: lootType,
|
||||
FileType: lootFileType,
|
||||
File: &commonpb.File{
|
||||
Name: fileName,
|
||||
Data: data,
|
||||
},
|
||||
}
|
||||
|
||||
if lootType == clientpb.LootType_LOOT_CREDENTIAL {
|
||||
lootMessage.CredentialType = clientpb.CredentialType_FILE
|
||||
}
|
||||
|
||||
return lootMessage
|
||||
}
|
||||
|
||||
@@ -146,30 +118,29 @@ func SendLootMessage(loot *clientpb.Loot, con *console.SliverConsoleClient) {
|
||||
}
|
||||
|
||||
if loot.Name != loot.File.Name {
|
||||
con.PrintInfof("Successfully looted %s (%s) (ID: %s)\n", loot.File.Name, loot.Name, loot.LootID)
|
||||
con.PrintInfof("Successfully looted %s (%s) (ID: %s)\n", loot.File.Name, loot.Name, loot.ID)
|
||||
} else {
|
||||
con.PrintInfof("Successfully looted %s (ID: %s)\n", loot.Name, loot.LootID)
|
||||
con.PrintInfof("Successfully looted %s (ID: %s)\n", loot.Name, loot.ID)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func LootDownload(download *sliverpb.Download, lootName string, lootType clientpb.LootType, fileType clientpb.FileType, ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
func LootDownload(download *sliverpb.Download, lootName string, fileType clientpb.FileType, ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
// Was the download successful?
|
||||
if download.Response != nil && download.Response.Err != "" {
|
||||
con.PrintErrorf("%s\n", download.Response.Err)
|
||||
return
|
||||
}
|
||||
|
||||
/* Construct everything needed to send the loot to the server
|
||||
If this is a directory, we will process each file individually
|
||||
/*
|
||||
Construct everything needed to send the loot to the server
|
||||
If this is a directory, we will process each file individually
|
||||
*/
|
||||
|
||||
// Let's handle the simple case of a file first
|
||||
if !download.IsDir {
|
||||
// filepath.Base does not deal with backslashes correctly in Windows paths, so we have to standardize the path to forward slashes
|
||||
downloadPath := strings.ReplaceAll(download.Path, "\\", "/")
|
||||
lootMessage := CreateLootMessage(filepath.Base(downloadPath), lootName, lootType, fileType, download.Data)
|
||||
lootMessage := CreateLootMessage(filepath.Base(downloadPath), lootName, fileType, download.Data)
|
||||
SendLootMessage(lootMessage, con)
|
||||
} else {
|
||||
// We have to decompress the gzip file first
|
||||
@@ -219,7 +190,7 @@ func LootDownload(download *sliverpb.Download, lootName string, lootType clientp
|
||||
*/
|
||||
fileData, err := io.ReadAll(tarReader)
|
||||
if err == nil {
|
||||
lootMessage := CreateLootMessage(filepath.Base(entryHeader.Name), lootName, lootType, fileType, fileData)
|
||||
lootMessage := CreateLootMessage(filepath.Base(entryHeader.Name), lootName, fileType, fileData)
|
||||
SendLootMessage(lootMessage, con)
|
||||
}
|
||||
}
|
||||
@@ -236,12 +207,6 @@ func LootAddRemoteCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
fileName := filepath.Base(remotePath)
|
||||
name := ctx.Flags.String("name")
|
||||
|
||||
lootType, err := ValidateLootType(ctx.Flags.String("type"))
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
download, err := PerformDownload(remotePath, fileName, ctx, con)
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
@@ -250,5 +215,5 @@ func LootAddRemoteCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
|
||||
// Determine type based on download buffer
|
||||
lootFileType := ValidateLootFileType(ctx.Flags.String("file-type"), download.Data)
|
||||
LootDownload(download, name, lootType, lootFileType, ctx, con)
|
||||
LootDownload(download, name, lootFileType, ctx, con)
|
||||
}
|
||||
@@ -40,8 +40,8 @@ func LootRenameCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
survey.AskOne(prompt, &newName)
|
||||
|
||||
loot, err = con.Rpc.LootUpdate(context.Background(), &clientpb.Loot{
|
||||
LootID: loot.LootID,
|
||||
Name: newName,
|
||||
ID: loot.ID,
|
||||
Name: newName,
|
||||
})
|
||||
if err != nil {
|
||||
con.PrintErrorf("%s\n", err)
|
||||
|
||||
@@ -144,6 +144,6 @@ func LootProcessDump(dump *sliverpb.ProcessDump, lootName string, hostName strin
|
||||
lootName = dumpFileName
|
||||
}
|
||||
|
||||
lootMessage := loot.CreateLootMessage(dumpFileName, lootName, clientpb.LootType_LOOT_FILE, clientpb.FileType_BINARY, dump.GetData())
|
||||
lootMessage := loot.CreateLootMessage(dumpFileName, lootName, clientpb.FileType_BINARY, dump.GetData())
|
||||
loot.SendLootMessage(lootMessage, con)
|
||||
}
|
||||
@@ -122,7 +122,7 @@ func PrintScreenshot(screenshot *sliverpb.Screenshot, hostname string, ctx *grum
|
||||
var n int
|
||||
n, err = saveToFile.Write(screenshot.Data)
|
||||
if err != nil {
|
||||
con.PrintErrorf("Error writting file: %s\n", err)
|
||||
con.PrintErrorf("Error writing file: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ func LootScreenshot(screenshot *sliverpb.Screenshot, lootName string, hostName s
|
||||
lootName = screenshotFileName
|
||||
}
|
||||
|
||||
lootMessage := loot.CreateLootMessage(screenshotFileName, lootName, clientpb.LootType_LOOT_FILE, clientpb.FileType_BINARY, screenshot.GetData())
|
||||
lootMessage := loot.CreateLootMessage(screenshotFileName, lootName, clientpb.FileType_BINARY, screenshot.GetData())
|
||||
loot.SendLootMessage(lootMessage, con)
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ package sgn
|
||||
import (
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/bishopfox/sliver/client/console"
|
||||
@@ -32,7 +32,7 @@ import (
|
||||
// ShikataGaNaiCmd - Command wrapper for the Shikata Ga Nai shellcode encoder
|
||||
func ShikataGaNaiCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
shellcodeFile := ctx.Args.String("shellcode")
|
||||
rawShellcode, err := ioutil.ReadFile(shellcodeFile)
|
||||
rawShellcode, err := os.ReadFile(shellcodeFile)
|
||||
if err != nil {
|
||||
con.PrintErrorf("Failed to read shellcode file: %s", err)
|
||||
return
|
||||
@@ -72,7 +72,7 @@ func ShikataGaNaiCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
|
||||
outputFile += ".sgn"
|
||||
}
|
||||
|
||||
err = ioutil.WriteFile(outputFile, shellcodeResp.Data, 0644)
|
||||
err = os.WriteFile(outputFile, shellcodeResp.Data, 0644)
|
||||
if err != nil {
|
||||
con.PrintErrorf("Failed to write shellcode file: %s", err)
|
||||
return
|
||||
|
||||
@@ -95,6 +95,13 @@ const (
|
||||
ExternalBuildFailedEvent = "external-build-failed"
|
||||
ExternalBuildCompletedEvent = "external-build-completed"
|
||||
|
||||
// Crackstation Events
|
||||
CrackstationConnected = "crackstation-connected"
|
||||
CrackstationDisconnected = "crackstation-disconnected"
|
||||
|
||||
// Crack Events - Events consumed by crackstations
|
||||
CrackBenchmark = "crack-benchmark"
|
||||
|
||||
// WireGuardNewPeer - New Wireguard peer added
|
||||
WireGuardNewPeer = "wireguard-newpeer"
|
||||
)
|
||||
@@ -144,7 +151,8 @@ const (
|
||||
LootLocalStr = "local"
|
||||
LootRemoteStr = "remote"
|
||||
FetchStr = "fetch"
|
||||
LootCredsStr = "creds"
|
||||
CredsStr = "creds"
|
||||
FileStr = "file"
|
||||
|
||||
RenameStr = "rename"
|
||||
|
||||
|
||||
+1
-1
@@ -156,7 +156,7 @@ echo "-----------------------------------------------------------------"
|
||||
|
||||
echo "curl -L --fail --output $OUTPUT_DIR/linux/$GO_ARCH_1/garble https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_linux"
|
||||
curl -L --fail --output $OUTPUT_DIR/linux/$GO_ARCH_1/garble https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_linux
|
||||
echo "curl -L --fail --output $OUTPUT_DIR/linux/$GO_ARCH_2/garble https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_linux"
|
||||
echo "curl -L --fail --output $OUTPUT_DIR/linux/$GO_ARCH_2/garble https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_linux-$GO_ARCH_2"
|
||||
curl -L --fail --output $OUTPUT_DIR/linux/$GO_ARCH_2/garble https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_linux
|
||||
echo "curl -L --fail --output $OUTPUT_DIR/windows/$GO_ARCH_1/garble.exe https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_windows.exe"
|
||||
curl -L --fail --output $OUTPUT_DIR/windows/$GO_ARCH_1/garble.exe https://github.com/moloch--/garble/releases/download/v$GARBLE_VER/garble_windows.exe
|
||||
|
||||
@@ -35,23 +35,23 @@ require (
|
||||
github.com/shirou/gopsutil/v3 v3.22.9
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/spf13/cobra v1.6.0
|
||||
github.com/stretchr/testify v1.8.0
|
||||
github.com/stretchr/testify v1.8.1
|
||||
github.com/things-go/go-socks5 v0.0.3-0.20210722055343-24af464efe43
|
||||
github.com/yiya1989/sshkrb5 v0.0.0-20201110125252-a1455b75a35e
|
||||
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b
|
||||
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
golang.org/x/text v0.3.8
|
||||
golang.org/x/text v0.4.0
|
||||
golang.zx2c4.com/wireguard v0.0.0-20220316235147-5aff28b14c24
|
||||
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220208144051-fde48d68ee68
|
||||
google.golang.org/grpc v1.42.0-dev.0.20211020220737-f00baa6c3c84
|
||||
google.golang.org/protobuf v1.28.1
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.8
|
||||
gorm.io/driver/mysql v1.4.1
|
||||
gorm.io/driver/postgres v1.4.4
|
||||
gorm.io/driver/sqlite v1.4.2
|
||||
gorm.io/gorm v1.24.0
|
||||
gorm.io/driver/mysql v1.4.3
|
||||
gorm.io/driver/postgres v1.4.5
|
||||
gorm.io/driver/sqlite v1.4.3
|
||||
gorm.io/gorm v1.24.1-0.20221019064659-5dd2bb482755
|
||||
gvisor.dev/gvisor v0.0.0-20220817001344-846276b3dbc5
|
||||
modernc.org/sqlite v1.19.2
|
||||
)
|
||||
@@ -78,6 +78,7 @@ require (
|
||||
github.com/gobwas/ws v1.1.0 // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/google/btree v1.0.1 // indirect
|
||||
github.com/gorilla/websocket v1.4.2 // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/hashicorp/go-uuid v1.0.2 // indirect
|
||||
@@ -107,6 +108,7 @@ require (
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/slack-go/slack v0.11.3 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/thedevsaddam/gojsonq/v2 v2.5.2 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
|
||||
@@ -90,7 +90,6 @@ github.com/desertbit/readline v1.5.1/go.mod h1:pHQgTsCFs9Cpfh5mlSUFi9Xa5kkL4d8L1
|
||||
github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
|
||||
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
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=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
@@ -116,6 +115,7 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU
|
||||
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-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||
github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
|
||||
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
|
||||
github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
|
||||
@@ -150,7 +150,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
|
||||
@@ -163,6 +162,8 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
@@ -285,14 +286,12 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
|
||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
|
||||
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/mdlayher/genetlink v1.2.0/go.mod h1:ra5LDov2KrUCZJiAtEvXXZBxGMInICMXIwshlJ+qRxQ=
|
||||
@@ -345,6 +344,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/slack-go/slack v0.11.3 h1:GN7revxEMax4amCc3El9a+9SGnjmBvSUobs0QnO6ZO8=
|
||||
github.com/slack-go/slack v0.11.3/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw=
|
||||
github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI=
|
||||
github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
@@ -353,6 +354,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
@@ -362,8 +364,9 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0=
|
||||
github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs=
|
||||
github.com/things-go/go-socks5 v0.0.3-0.20210722055343-24af464efe43 h1:+sN63SJGqchSsVyNoeW4GyA0Y+g0LvKOHcaeqs1Rf6M=
|
||||
@@ -472,7 +475,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -483,9 +485,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@@ -511,8 +511,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
@@ -529,7 +529,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
||||
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
@@ -607,182 +606,42 @@ gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gorm.io/driver/mysql v1.4.1 h1:4InA6SOaYtt4yYpV1NF9B2kvUKe9TbvUd1iWrvxnjic=
|
||||
gorm.io/driver/mysql v1.4.1/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c=
|
||||
gorm.io/driver/postgres v1.4.4 h1:zt1fxJ+C+ajparn0SteEnkoPg0BQ6wOWXEQ99bteAmw=
|
||||
gorm.io/driver/postgres v1.4.4/go.mod h1:whNfh5WhhHs96honoLjBAMwJGYEuA3m1hvgUbNXhPCw=
|
||||
gorm.io/driver/sqlite v1.4.2 h1:F6vYJcmR4Cnh0ErLyoY8JSfabBGyR0epIGuhgHJuNws=
|
||||
gorm.io/driver/sqlite v1.4.2/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI=
|
||||
gorm.io/gorm v1.23.7/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
|
||||
gorm.io/driver/mysql v1.4.3 h1:/JhWJhO2v17d8hjApTltKNADm7K7YI2ogkR7avJUL3k=
|
||||
gorm.io/driver/mysql v1.4.3/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c=
|
||||
gorm.io/driver/postgres v1.4.5 h1:mTeXTTtHAgnS9PgmhN2YeUbazYpLhUI1doLnw42XUZc=
|
||||
gorm.io/driver/postgres v1.4.5/go.mod h1:GKNQYSJ14qvWkvPwXljMGehpKrhlDNsqYRr5HnYGncg=
|
||||
gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU=
|
||||
gorm.io/driver/sqlite v1.4.3/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI=
|
||||
gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
|
||||
gorm.io/gorm v1.24.0 h1:j/CoiSm6xpRpmzbFJsQHYj+I8bGYWLXVHeYEyyKlF74=
|
||||
gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA=
|
||||
gorm.io/gorm v1.24.1-0.20221019064659-5dd2bb482755 h1:7AdrbfcvKnzejfqP5g37fdSZOXH/JvaPIzBIHTOqXKk=
|
||||
gorm.io/gorm v1.24.1-0.20221019064659-5dd2bb482755/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA=
|
||||
gvisor.dev/gvisor v0.0.0-20220817001344-846276b3dbc5 h1:cv/zaNV0nr1mJzaeo4S5mHIm5va1W0/9J3/5prlsuRM=
|
||||
gvisor.dev/gvisor v0.0.0-20220817001344-846276b3dbc5/go.mod h1:TIvkJD0sxe8pIob3p6T8IzxXunlp6yfgktvTNp+DGNM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
||||
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||
lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI=
|
||||
lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.20/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.22/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.24 h1:vlCqjhVwX15t1uwlMPpOpNRC7JTjMZ9lT9DYHKQTFuA=
|
||||
modernc.org/cc/v3 v3.35.24/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
|
||||
modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw=
|
||||
modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
|
||||
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
|
||||
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
|
||||
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
|
||||
modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag=
|
||||
modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw=
|
||||
modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ=
|
||||
modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c=
|
||||
modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo=
|
||||
modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg=
|
||||
modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I=
|
||||
modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs=
|
||||
modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8=
|
||||
modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE=
|
||||
modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk=
|
||||
modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w=
|
||||
modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE=
|
||||
modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8=
|
||||
modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc=
|
||||
modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU=
|
||||
modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE=
|
||||
modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk=
|
||||
modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI=
|
||||
modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE=
|
||||
modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg=
|
||||
modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74=
|
||||
modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU=
|
||||
modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU=
|
||||
modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc=
|
||||
modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM=
|
||||
modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ=
|
||||
modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84=
|
||||
modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ=
|
||||
modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY=
|
||||
modernc.org/ccgo/v3 v3.12.84/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
|
||||
modernc.org/ccgo/v3 v3.12.86/go.mod h1:dN7S26DLTgVSni1PVA3KxxHTcykyDurf3OgUzNqTSrU=
|
||||
modernc.org/ccgo/v3 v3.12.90/go.mod h1:obhSc3CdivCRpYZmrvO88TXlW0NvoSVvdh/ccRjJYko=
|
||||
modernc.org/ccgo/v3 v3.12.92/go.mod h1:5yDdN7ti9KWPi5bRVWPl8UNhpEAtCjuEE7ayQnzzqHA=
|
||||
modernc.org/ccgo/v3 v3.13.1/go.mod h1:aBYVOUfIlcSnrsRVU8VRS35y2DIfpgkmVkYZ0tpIXi4=
|
||||
modernc.org/ccgo/v3 v3.15.9/go.mod h1:md59wBwDT2LznX/OTCPoVS6KIsdRgY8xqQwBV+hkTH0=
|
||||
modernc.org/ccgo/v3 v3.15.10/go.mod h1:wQKxoFn0ynxMuCLfFD09c8XPUCc8obfchoVR9Cn0fI8=
|
||||
modernc.org/ccgo/v3 v3.15.12/go.mod h1:VFePOWoCd8uDGRJpq/zfJ29D0EVzMSyID8LCMWYbX6I=
|
||||
modernc.org/ccgo/v3 v3.15.14/go.mod h1:144Sz2iBCKogb9OKwsu7hQEub3EVgOlyI8wMUPGKUXQ=
|
||||
modernc.org/ccgo/v3 v3.15.15/go.mod h1:z5qltXjU4PJl0pE5nhYQCvA9DhPHiWsl5GWl89+NSYE=
|
||||
modernc.org/ccgo/v3 v3.15.16/go.mod h1:XbKRMeMWMdq712Tr5ECgATYMrzJ+g9zAZEj2ktzBe24=
|
||||
modernc.org/ccgo/v3 v3.15.17/go.mod h1:bofnFkpRFf5gLY+mBZIyTW6FEcp26xi2lgOFk2Rlvs0=
|
||||
modernc.org/ccgo/v3 v3.15.18 h1:X5ym656Ye7/ubL+wox0SeF9aRX5od1UDFn1tAbQR+90=
|
||||
modernc.org/ccgo/v3 v3.15.18/go.mod h1:/2lv3WjHyanEr2sAPdGKRC38n6f0werut9BRXUjjX+A=
|
||||
modernc.org/ccgo/v3 v3.16.12 h1:gWAnL87wSqwM6EQ1a+36O9zMFjqx1FBj0p9rA4xbQCY=
|
||||
modernc.org/ccgo/v3 v3.16.12/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g=
|
||||
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
||||
modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
|
||||
modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
||||
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
|
||||
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
||||
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
||||
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
|
||||
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
|
||||
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
|
||||
modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU=
|
||||
modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE=
|
||||
modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso=
|
||||
modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8=
|
||||
modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8=
|
||||
modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I=
|
||||
modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk=
|
||||
modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY=
|
||||
modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE=
|
||||
modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg=
|
||||
modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM=
|
||||
modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg=
|
||||
modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo=
|
||||
modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8=
|
||||
modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ=
|
||||
modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA=
|
||||
modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM=
|
||||
modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg=
|
||||
modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE=
|
||||
modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM=
|
||||
modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU=
|
||||
modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw=
|
||||
modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M=
|
||||
modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18=
|
||||
modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8=
|
||||
modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
|
||||
modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0=
|
||||
modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI=
|
||||
modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE=
|
||||
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
|
||||
modernc.org/libc v1.11.88/go.mod h1:h3oIVe8dxmTcchcFuCcJ4nAWaoiwzKCdv82MM0oiIdQ=
|
||||
modernc.org/libc v1.11.98/go.mod h1:ynK5sbjsU77AP+nn61+k+wxUGRx9rOFcIqWYYMaDZ4c=
|
||||
modernc.org/libc v1.11.101/go.mod h1:wLLYgEiY2D17NbBOEp+mIJJJBGSiy7fLL4ZrGGZ+8jI=
|
||||
modernc.org/libc v1.12.0/go.mod h1:2MH3DaF/gCU8i/UBiVE1VFRos4o523M7zipmwH8SIgQ=
|
||||
modernc.org/libc v1.14.1/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk=
|
||||
modernc.org/libc v1.14.2/go.mod h1:MX1GBLnRLNdvmK9azU9LCxZ5lMyhrbEMK8rG3X/Fe34=
|
||||
modernc.org/libc v1.14.3/go.mod h1:GPIvQVOVPizzlqyRX3l756/3ppsAgg1QgPxjr5Q4agQ=
|
||||
modernc.org/libc v1.14.6/go.mod h1:2PJHINagVxO4QW/5OQdRrvMYo+bm5ClpUFfyXCYl9ak=
|
||||
modernc.org/libc v1.14.7/go.mod h1:f8xfWXW8LW41qb4X5+huVQo5dcfPlq7Cbny2TDheMv0=
|
||||
modernc.org/libc v1.14.8/go.mod h1:9+JCLb1MWSY23smyOpIPbd5ED+rSS/ieiDWUpdyO3mo=
|
||||
modernc.org/libc v1.14.10/go.mod h1:y1MtIWhwpJFpLYm6grAThtuXJKEsY6xkdZmXbRngIdo=
|
||||
modernc.org/libc v1.14.11/go.mod h1:l5/Mz/GrZwOqzwRHA3abgSCnSeJzzTl+Ify0bAwKbAw=
|
||||
modernc.org/libc v1.14.12 h1:pUBZTYoISfbb4pCf4PECENpbvwDBxeKc+/dS9LyOWFM=
|
||||
modernc.org/libc v1.14.12/go.mod h1:fJdoe23MHu2ruPQkFPPqCpToDi5cckzsbmkI6Ez0LqQ=
|
||||
modernc.org/libc v1.20.3 h1:BodaDPuUse7taQchAClMmbE/yZp3T2ZBiwCDFyBLEXw=
|
||||
modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0=
|
||||
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8=
|
||||
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
|
||||
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
|
||||
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
|
||||
modernc.org/memory v1.0.6/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
|
||||
modernc.org/memory v1.0.7 h1:UE3cxTRFa5tfUibAV7Jqq8P7zRY0OlJg+yWVIIaluEE=
|
||||
modernc.org/memory v1.0.7/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
|
||||
modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk=
|
||||
modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
|
||||
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
|
||||
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||
modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
|
||||
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||
modernc.org/sqlite v1.16.0 h1:DdvOGaWN0y+X7t2L7RUD63gcwbVjYZjcBZnA68g44EI=
|
||||
modernc.org/sqlite v1.16.0/go.mod h1:Jwe13ItpESZ+78K5WS6+AjXsUg+JvirsjN3iIDO4C8k=
|
||||
modernc.org/sqlite v1.19.2 h1:1VaNHEe6amuHhelmAOtibvYpAjwLfT4q6cBB2K7ZlQ8=
|
||||
modernc.org/sqlite v1.19.2/go.mod h1:fEgebDYAGTFJj2c/ukKmnaq/0ZQZg0PSYxRa/bHyCDs=
|
||||
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
|
||||
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
||||
modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
|
||||
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
|
||||
modernc.org/tcl v1.11.2 h1:mXpsx3AZqJt83uDiFu9UYQVBjNjaWKGCF1YDSlpCL6Y=
|
||||
modernc.org/tcl v1.11.2/go.mod h1:BRzgpajcGdS2qTxniOx9c/dcxjlbA7p12eJNmiriQYo=
|
||||
modernc.org/tcl v1.15.0 h1:oY+JeD11qVVSgVvodMJsu7Edf8tr5E/7tuhF5cNYz34=
|
||||
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
|
||||
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg=
|
||||
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
modernc.org/z v1.3.2 h1:4GWBVMa48UDC7KQ9tnaggN/yTlXg+CdCX9bhgHPQ9AM=
|
||||
modernc.org/z v1.3.2/go.mod h1:PEU2oK2OEA1CfzDTd+8E908qEXhC9s0MfyKp5LZsd+k=
|
||||
modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE=
|
||||
+2953
-598
File diff suppressed because it is too large.
Load diff
+313
-30
@@ -556,43 +556,18 @@ message WGClientConfig {
|
||||
|
||||
|
||||
// [ Loot ] ----------------------------------------
|
||||
enum LootType {
|
||||
LOOT_FILE = 0;
|
||||
LOOT_CREDENTIAL = 1;
|
||||
}
|
||||
|
||||
enum CredentialType {
|
||||
NO_CREDENTIAL = 0;
|
||||
USER_PASSWORD = 1;
|
||||
API_KEY = 2;
|
||||
FILE = 3;
|
||||
}
|
||||
|
||||
enum FileType {
|
||||
NO_FILE = 0;
|
||||
BINARY = 1;
|
||||
TEXT = 2;
|
||||
}
|
||||
|
||||
message Credential {
|
||||
|
||||
// USER_PASSWORD
|
||||
string User = 2;
|
||||
string Password = 3;
|
||||
|
||||
// API_KEY
|
||||
string APIKey = 4;
|
||||
}
|
||||
|
||||
message Loot {
|
||||
LootType Type = 1;
|
||||
|
||||
string LootID = 2;
|
||||
string Name = 3;
|
||||
|
||||
CredentialType CredentialType = 4;
|
||||
Credential Credential = 5;
|
||||
FileType FileType = 6;
|
||||
string ID = 1;
|
||||
string Name = 2;
|
||||
FileType FileType = 3;
|
||||
string OriginHostUUID = 4;
|
||||
int64 Size = 5;
|
||||
|
||||
commonpb.File File = 9;
|
||||
}
|
||||
@@ -601,6 +576,314 @@ message AllLoot {
|
||||
repeated Loot Loot = 1;
|
||||
}
|
||||
|
||||
message Credential {
|
||||
string ID = 1;
|
||||
string Username = 2;
|
||||
string Plaintext = 3;
|
||||
string Hash = 4;
|
||||
HashType HashType = 5;
|
||||
bool IsCracked = 6;
|
||||
string OriginHostUUID = 7;
|
||||
}
|
||||
|
||||
message Credentials {
|
||||
repeated Credential Credentials = 1;
|
||||
}
|
||||
|
||||
enum HashType {
|
||||
MD5 = 0; // MD5 - zero must come first in an enum
|
||||
|
||||
MD4 = 900; // MD4
|
||||
// MD5
|
||||
SHA1 = 100; // SHA1
|
||||
SHA2_224 = 1300; // SHA2-224
|
||||
SHA2_256 = 1400; // SHA2-256
|
||||
SHA2_384 = 10800; // SHA2-384
|
||||
SHA2_512 = 1700; // SHA2-512
|
||||
SHA3_224 = 17300; // SHA3-224
|
||||
SHA3_256 = 17400; // SHA3-256
|
||||
SHA3_384 = 17500; // SHA3-384
|
||||
SHA3_512 = 17600; // SHA3-512
|
||||
RIPEMD_160 = 6000; // RIPEMD-160
|
||||
BLAKE2B_256 = 600; // BLAKE2b-512
|
||||
GOST_R_32_11_2012_256 = 11700; // GOST R 34.11-2012 (Streebog) 256-bit, big-endian
|
||||
GOST_R_32_11_2012_512 = 11800; // GOST R 34.11-2012 (Streebog) 512-bit, big-endian
|
||||
GOST_R_34_11_94 = 6900; // GOST R 34.11-94
|
||||
GPG = 17010; // GPG (AES-128/AES-256 (SHA-1($pass)))
|
||||
HALF_MD5 = 5100; // Half MD5
|
||||
KECCAK_224 = 17700; // Keccak-224
|
||||
KECCAK_256 = 17800; // Keccak-256
|
||||
KECCAK_384 = 17900; // Keccak-384
|
||||
KECCAK_512 = 18000; // Keccak-512
|
||||
WHIRLPOOL = 6100; // Whirlpool
|
||||
SIPHASH = 10100; // SipHash
|
||||
MD5_UTF16LE = 70; // md5(utf16le($pass))
|
||||
SHA1_UTF16LE = 170; // sha1(utf16le($pass))
|
||||
SHA256_UTF16LE = 1470; // sha256(utf16le($pass))
|
||||
SHA384_UTF16LE = 10870; // sha384(utf16le($pass))
|
||||
SHA512_UTF16LE = 1770; // sha512(utf16le($pass))
|
||||
BLAKE2B_512_PW_SALT = 610; // BLAKE2b-512($pass.$salt)
|
||||
BLAKE2B_512_SALT_PW = 620; // BLAKE2b-512($salt.$pass)
|
||||
MD5_PW_SALT = 10; // md5($pass.$salt)
|
||||
MD5_SALT_PW = 20; // md5($salt.$pass)
|
||||
MD5_SALT_PW_SALT = 3800; // md5($salt.$pass.$salt)
|
||||
MD5_SALT_MD5_PW = 3710; // md5($salt.md5($pass))
|
||||
|
||||
// ... TODO fill in the rest ...
|
||||
|
||||
KERBEROS_17_TGS_REP = 19600; // Kerberos 5, etype 17, TGS-REP
|
||||
KERBEROS_17_PREAUTH = 19800; // Kerberos 5, etype 17, Pre-Auth
|
||||
KERBEROS_17_DB = 28800; // Kerberos 5, etype 17, DB
|
||||
KERBEROS_18_TGS_REP = 19700; // Kerberos 5, etype 18, TGS-REP
|
||||
KERBEROS_18_PREAUTH = 19900; // Kerberos 5, etype 18, Pre-Auth
|
||||
KERBEROS_18_DB = 28900; // Kerberos 5, etype 18, DB
|
||||
KERBEROS_23_SA_REQ_PREAUTH = 7500; // Kerberos 5, etype 23, AS-REQ Pre-Auth
|
||||
KERBEROS_23_TGS_REP = 13100; // Kerberos 5, etype 23, TGS-REP
|
||||
KERBEROS_23_AS_REP = 18200; // Kerberos 5, etype 23, AS-REP
|
||||
NET_NTLM_V1 = 5500; // NetNTLMv1 / NetNTLMv1+ESS
|
||||
NET_NTLM_V1_NT = 27000; // NetNTLMv1 / NetNTLMv1+ESS (NT)
|
||||
NET_NTLM_V2 = 5600; // NetNTLMv2
|
||||
NET_NTLM_V2_NT = 27100; // NetNTLMv2 (NT)
|
||||
|
||||
// ...
|
||||
|
||||
LM = 3000; // LM
|
||||
|
||||
// ...
|
||||
|
||||
NTLM = 1000; // NTLM
|
||||
|
||||
// ...
|
||||
|
||||
DCC = 1100; // Domain Cached Credentials (DCC), MS Cache
|
||||
DCC2 = 2100; // Domain Cached Credentials 2 (DCC2), MS Cache 2
|
||||
|
||||
// ...
|
||||
|
||||
MACOS_10_8 = 7100; // macOS v10.8+ (PBKDF2-SHA512)
|
||||
|
||||
// ...
|
||||
|
||||
INVALID = 9999; // Invalid hash type
|
||||
}
|
||||
|
||||
// [ Crackstation ] ----------------------------------------
|
||||
message Crackstations {
|
||||
repeated Crackstation Crackstations = 1;
|
||||
}
|
||||
|
||||
message Crackstation {
|
||||
string Name = 1;
|
||||
string OperatorName = 2;
|
||||
string GOOS = 3; // The cracker's OS
|
||||
string GOARCH = 4; // The cracker's Arch
|
||||
string HashcatVersion = 5;
|
||||
string HostUUID = 6;
|
||||
|
||||
repeated CUDABackendInfo CUDA = 100;
|
||||
repeated MetalBackendInfo Metal = 101;
|
||||
repeated OpenCLBackendInfo OpenCL = 102;
|
||||
}
|
||||
|
||||
message CUDABackendInfo {
|
||||
string Type = 1;
|
||||
int32 VendorID = 2;
|
||||
string Vendor = 3;
|
||||
string Name = 4;
|
||||
string Version = 5;
|
||||
int32 Processors = 6;
|
||||
int32 Clock = 7;
|
||||
string MemoryTotal = 8;
|
||||
string MemoryFree = 9;
|
||||
|
||||
string CUDAVersion = 10;
|
||||
}
|
||||
|
||||
message OpenCLBackendInfo {
|
||||
string Type = 1;
|
||||
int32 VendorID = 2;
|
||||
string Vendor = 3;
|
||||
string Name = 4;
|
||||
string Version = 5;
|
||||
int32 Processors = 6;
|
||||
int32 Clock = 7;
|
||||
string MemoryTotal = 8;
|
||||
string MemoryFree = 9;
|
||||
|
||||
string OpenCLVersion = 10;
|
||||
string OpenCLDriverVersion = 11;
|
||||
}
|
||||
|
||||
message MetalBackendInfo {
|
||||
string Type = 1;
|
||||
int32 VendorID = 2;
|
||||
string Vendor = 3;
|
||||
string Name = 4;
|
||||
string Version = 5;
|
||||
int32 Processors = 6;
|
||||
int32 Clock = 7;
|
||||
string MemoryTotal = 8;
|
||||
string MemoryFree = 9;
|
||||
|
||||
string MetalVersion = 10;
|
||||
}
|
||||
|
||||
enum CrackAttackMode {
|
||||
STRAIGHT = 0;
|
||||
COMBINATION = 1;
|
||||
BRUTEFORCE = 3;
|
||||
HYBRID_WORDLIST_MASK = 6;
|
||||
HYBRID_MASK_WORDLIST = 7;
|
||||
ASSOCIATION = 9;
|
||||
}
|
||||
|
||||
enum CrackEncoding {
|
||||
INVALID_ENCODING = 0;
|
||||
ISO_8859_15 = 1;
|
||||
UTF_32LE = 2;
|
||||
}
|
||||
|
||||
enum CrackOutfileFormat {
|
||||
INVALID_FORMAT = 0;
|
||||
HASH_SALT = 1; // 1 | hash[:salt]
|
||||
PLAIN = 2; // 2 | plain
|
||||
HEX_PLAIN = 3; // 3 | hex_plain
|
||||
CRACK_POS = 4; // 4 | crack_pos
|
||||
TIMESTAMP_ABSOLUTE = 5; // 5 | timestamp absolute
|
||||
TIMESTAMP_RELATIVE = 6; // 6 | timestamp relative
|
||||
}
|
||||
|
||||
enum CrackWorkloadProfile {
|
||||
INVALID_WORKLOAD_PROFILE = 0;
|
||||
LOW = 1;
|
||||
DEFAULT = 2;
|
||||
HIGH = 3;
|
||||
NIGHTMARE = 4;
|
||||
}
|
||||
|
||||
message CrackTask {
|
||||
CrackAttackMode AttackMode = 1;
|
||||
HashType HashType = 2;
|
||||
repeated string Hashes = 3;
|
||||
// --version
|
||||
// --help
|
||||
bool Quiet = 4;
|
||||
bool HexCharset = 5;
|
||||
bool HexSalt = 6;
|
||||
bool HexWordlist = 7;
|
||||
bool Force = 8;
|
||||
bool DeprecatedCheckDisable = 9;
|
||||
bool Status = 10;
|
||||
bool StatusJSON = 11;
|
||||
uint32 StatusTimer = 12;
|
||||
uint32 StdinTimeoutAbort = 13;
|
||||
bool MachineReadable = 14;
|
||||
bool KeepGuessing = 15;
|
||||
bool SelfTestDisable = 16;
|
||||
bool Loopback = 17;
|
||||
bytes MarkovHcstat2 = 18; // --markov-hcstat2 FILE
|
||||
bool MarkovDisable = 19;
|
||||
bool MarkovClassic = 20;
|
||||
bool MarkovInverse = 21;
|
||||
uint32 MarkovThreshold = 22;
|
||||
uint32 Runtime = 23;
|
||||
string Session = 24; // [a-zA-Z0-9_-]
|
||||
bool Restore = 25;
|
||||
bool RestoreDisable = 26;
|
||||
bytes RestoreFile = 27; // --restore-file-path FILE
|
||||
// --outfile FILE (28)
|
||||
repeated CrackOutfileFormat OutfileFormat = 29;
|
||||
bool OutfileAutohexDisable = 30;
|
||||
uint32 OutfileCheckTimer = 31;
|
||||
bool WordlistAutohexDisable = 32;
|
||||
string Separator = 33; // single char
|
||||
bool Stdout = 34;
|
||||
bool Show = 35;
|
||||
bool Left = 36;
|
||||
bool Username = 37;
|
||||
bool Remove = 38;
|
||||
uint32 RemoveTimer = 39;
|
||||
bool PotfileDisable = 40;
|
||||
bytes Potfile = 41; // --potfile-path FILE
|
||||
CrackEncoding EncodingFrom = 42;
|
||||
CrackEncoding EncodingTo = 43;
|
||||
uint32 DebugMode = 44;
|
||||
// --debug-file FILE (45)
|
||||
// --induction-dir DIR (46)
|
||||
// --outfile-check-dir DIR (47)
|
||||
bool LogfileDisable = 48;
|
||||
uint32 HccapxMessagePair = 49;
|
||||
uint32 NonceErrorCorrections = 50;
|
||||
bytes KeyboardLayoutMapping = 51; // --keyboard-layout-mapping FILE
|
||||
// --truecrypt-keyfiles FILE (52)
|
||||
// --veracrypt-keyfiles FILE (53)
|
||||
// --veracrypt-pim-start PIM (54)
|
||||
// --veracrypt-pim-stop PIM (55)
|
||||
bool Benchmark = 56;
|
||||
bool BenchmarkAll = 57;
|
||||
bool SpeedOnly = 58;
|
||||
bool ProgressOnly = 59;
|
||||
uint32 SegmentSize = 60;
|
||||
uint32 BitmapMin = 61;
|
||||
uint32 BitmapMax = 62;
|
||||
repeated uint32 CPUAffinity = 63;
|
||||
uint32 HookThreads = 64;
|
||||
bool HashInfo = 65;
|
||||
// --example-hashes (66)
|
||||
bool BackendIgnoreCUDA = 67;
|
||||
bool BackendIgnoreHip = 68;
|
||||
bool BackendIgnoreMetal = 69;
|
||||
bool BackendIgnoreOpenCL = 70;
|
||||
bool BackendInfo = 71;
|
||||
repeated uint32 BackendDevices = 72;
|
||||
repeated uint32 OpenCLDeviceTypes = 73;
|
||||
bool OptimizedKernelEnable = 74;
|
||||
bool MultiplyAccelDisabled = 75;
|
||||
CrackWorkloadProfile WorkloadProfile = 76;
|
||||
uint32 KernelAccel = 77;
|
||||
uint32 KernelLoops = 78;
|
||||
uint32 KernelThreads = 79;
|
||||
uint32 BackendVectorWidth = 80;
|
||||
uint32 SpinDamp = 81;
|
||||
bool HwmonDisable = 82;
|
||||
uint32 HwmonTempAbort = 83;
|
||||
uint32 ScryptTMTO = 84;
|
||||
uint64 Skip = 85;
|
||||
uint64 Limit = 86;
|
||||
bool Keyspace = 87;
|
||||
// --rule-left (88)
|
||||
// --rule-right (89)
|
||||
bytes RulesFile = 90; // --rules-file FILE
|
||||
uint32 GenerateRules = 91;
|
||||
uint32 GenerateRulesFunMin = 92;
|
||||
uint32 GenerateRulesFunMax = 93;
|
||||
string GenerateRulesFuncSel = 94;
|
||||
int32 GenerateRulesSeed = 95;
|
||||
string CustomCharset1 = 96;
|
||||
string CustomCharset2 = 97;
|
||||
string CustomCharset3 = 98;
|
||||
string CustomCharset4 = 99;
|
||||
string Identify = 100;
|
||||
bool Increment = 101;
|
||||
uint32 IncrementMin = 102;
|
||||
uint32 IncrementMax = 103;
|
||||
bool SlowCandidates = 104;
|
||||
bool BrainServer = 105;
|
||||
uint32 BrainServerTimer = 106;
|
||||
bool BrainClient = 107;
|
||||
string BrainClientFeatures = 108;
|
||||
string BrainHost = 109;
|
||||
uint32 BrainPort = 110;
|
||||
string BrainPassword = 111;
|
||||
string BrainSession = 112;
|
||||
string BrainSessionWhitelist = 113;
|
||||
|
||||
int64 CrackTaskCreatedAt = 200;
|
||||
int64 CrackTaskStartedAt = 201;
|
||||
int64 CrackTaskFinishedAt = 202;
|
||||
string CrackTaskStatus = 203;
|
||||
}
|
||||
|
||||
// [ Hosts ] ----------------------------------------
|
||||
message IOC {
|
||||
string Path = 1;
|
||||
|
||||
+508
-452
@@ -31,7 +31,7 @@ var file_rpcpb_services_proto_rawDesc = []byte{
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2f, 0x73,
|
||||
0x6c, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x70, 0x62, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x32, 0x8a, 0x3e, 0x0a, 0x09, 0x53, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x52, 0x50, 0x43,
|
||||
0x74, 0x6f, 0x32, 0xaa, 0x42, 0x0a, 0x09, 0x53, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x52, 0x50, 0x43,
|
||||
0x12, 0x30, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0f,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
|
||||
0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69,
|
||||
@@ -131,50 +131,84 @@ var file_rpcpb_services_proto_rawDesc = []byte{
|
||||
0x2e, 0x4c, 0x6f, 0x6f, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x74, 0x41, 0x6c, 0x6c,
|
||||
0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74,
|
||||
0x79, 0x1a, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c,
|
||||
0x4c, 0x6f, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x09, 0x4c, 0x6f, 0x6f, 0x74, 0x41, 0x6c, 0x6c, 0x4f,
|
||||
0x66, 0x12, 0x0e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6f,
|
||||
0x74, 0x1a, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c,
|
||||
0x4c, 0x6f, 0x6f, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x0f, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12,
|
||||
0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x48, 0x6f, 0x73,
|
||||
0x74, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x0e, 0x2e, 0x63, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x63, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x06, 0x48, 0x6f,
|
||||
0x73, 0x74, 0x52, 0x6d, 0x12, 0x0e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e,
|
||||
0x48, 0x6f, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e,
|
||||
0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x09, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x4f, 0x43,
|
||||
0x52, 0x6d, 0x12, 0x0d, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x49, 0x4f,
|
||||
0x43, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70,
|
||||
0x74, 0x79, 0x12, 0x35, 0x0a, 0x08, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x15,
|
||||
0x4c, 0x6f, 0x6f, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x43, 0x72, 0x65, 0x64, 0x73, 0x12, 0x0f, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15,
|
||||
0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e,
|
||||
0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x64, 0x73, 0x41, 0x64,
|
||||
0x64, 0x12, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65,
|
||||
0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||
0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x31, 0x0a, 0x07, 0x43, 0x72, 0x65,
|
||||
0x64, 0x73, 0x52, 0x6d, 0x12, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e,
|
||||
0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x1a, 0x0f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x0b,
|
||||
0x43, 0x72, 0x65, 0x64, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x63, 0x6c,
|
||||
0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61,
|
||||
0x6c, 0x73, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d,
|
||||
0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x42, 0x79,
|
||||
0x49, 0x44, 0x12, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72,
|
||||
0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e,
|
||||
0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x41,
|
||||
0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x73, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68,
|
||||
0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e,
|
||||
0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x15, 0x2e, 0x63, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
|
||||
0x73, 0x12, 0x4a, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78,
|
||||
0x74, 0x43, 0x72, 0x65, 0x64, 0x73, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65,
|
||||
0x12, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x64,
|
||||
0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70,
|
||||
0x62, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x0a,
|
||||
0x05, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70,
|
||||
0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
|
||||
0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x48,
|
||||
0x6f, 0x73, 0x74, 0x12, 0x0e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x48,
|
||||
0x6f, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x48,
|
||||
0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x06, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x6d, 0x12, 0x0e, 0x2e,
|
||||
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x1a, 0x0f, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2b,
|
||||
0x0a, 0x09, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x4f, 0x43, 0x52, 0x6d, 0x12, 0x0d, 0x2e, 0x63, 0x6c,
|
||||
0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x49, 0x4f, 0x43, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x08, 0x47,
|
||||
0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
|
||||
0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12,
|
||||
0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
|
||||
0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62,
|
||||
0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x10, 0x47, 0x65, 0x6e,
|
||||
0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1d, 0x2e,
|
||||
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63,
|
||||
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||
0x49, 0x6d, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a,
|
||||
0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6c, 0x53, 0x61, 0x76, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6d,
|
||||
0x70, 0x6c, 0x61, 0x6e, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x1a, 0x0f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5c, 0x0a, 0x20,
|
||||
0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||
0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||
0x12, 0x17, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x49, 0x6d, 0x70, 0x6c,
|
||||
0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65,
|
||||
0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6d, 0x70,
|
||||
0x6c, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x0f, 0x42, 0x75,
|
||||
0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x11, 0x2e,
|
||||
0x74, 0x65, 0x12, 0x52, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78,
|
||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70,
|
||||
0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
|
||||
0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62,
|
||||
0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6d, 0x70, 0x6c, 0x61, 0x6e, 0x74,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
|
||||
0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x61, 0x76, 0x65, 0x42, 0x75,
|
||||
0x69, 0x6c, 0x64, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45,
|
||||
0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6d, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x42, 0x69,
|
||||
0x6e, 0x61, 0x72, 0x79, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e,
|
||||
0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5c, 0x0a, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
|
||||
0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6c,
|
||||
0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x69, 0x65,
|
||||
0x6e, 0x74, 0x70, 0x62, 0x2e, 0x49, 0x6d, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x78,
|
||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6d, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x0f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65,
|
||||
0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70,
|
||||
0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65,
|
||||
0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x0e,
|
||||
0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x0f,
|
||||
0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a,
|
||||
0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
|
||||
0x12, 0x2f, 0x0a, 0x08, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x0f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e,
|
||||
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
|
||||
0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e,
|
||||
0x74, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x0e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x72,
|
||||
0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62,
|
||||
0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70,
|
||||
0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x0a, 0x08, 0x42, 0x75, 0x69, 0x6c, 0x64,
|
||||
0x65, 0x72, 0x73, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45,
|
||||
0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e,
|
||||
0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x65,
|
||||
0x73, 0x12, 0x41, 0x0a, 0x14, 0x43, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x63, 0x6c, 0x69, 0x65,
|
||||
0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65,
|
||||
0x6e, 0x74, 0x30, 0x01, 0x12, 0x37, 0x0a, 0x13, 0x43, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x74, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x63, 0x6c,
|
||||
0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x0f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a,
|
||||
0x0d, 0x43, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0f,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
|
||||
0x17, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x61, 0x63, 0x6b,
|
||||
0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x65,
|
||||
0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70,
|
||||
0x62, 0x2e, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a,
|
||||
0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72,
|
||||
@@ -548,175 +582,179 @@ var file_rpcpb_services_proto_goTypes = []interface{}{
|
||||
(*clientpb.HTTPListenerReq)(nil), // 10: clientpb.HTTPListenerReq
|
||||
(*clientpb.StagerListenerReq)(nil), // 11: clientpb.StagerListenerReq
|
||||
(*clientpb.Loot)(nil), // 12: clientpb.Loot
|
||||
(*clientpb.Host)(nil), // 13: clientpb.Host
|
||||
(*clientpb.IOC)(nil), // 14: clientpb.IOC
|
||||
(*clientpb.GenerateReq)(nil), // 15: clientpb.GenerateReq
|
||||
(*clientpb.ExternalGenerateReq)(nil), // 16: clientpb.ExternalGenerateReq
|
||||
(*clientpb.ExternalImplantBinary)(nil), // 17: clientpb.ExternalImplantBinary
|
||||
(*clientpb.ImplantConfig)(nil), // 18: clientpb.ImplantConfig
|
||||
(*clientpb.Builder)(nil), // 19: clientpb.Builder
|
||||
(*clientpb.Event)(nil), // 20: clientpb.Event
|
||||
(*clientpb.RegenerateReq)(nil), // 21: clientpb.RegenerateReq
|
||||
(*clientpb.DeleteReq)(nil), // 22: clientpb.DeleteReq
|
||||
(*clientpb.ImplantProfile)(nil), // 23: clientpb.ImplantProfile
|
||||
(*clientpb.MsfStagerReq)(nil), // 24: clientpb.MsfStagerReq
|
||||
(*clientpb.ShellcodeRDIReq)(nil), // 25: clientpb.ShellcodeRDIReq
|
||||
(*clientpb.ShellcodeEncodeReq)(nil), // 26: clientpb.ShellcodeEncodeReq
|
||||
(*clientpb.Website)(nil), // 27: clientpb.Website
|
||||
(*clientpb.WebsiteAddContent)(nil), // 28: clientpb.WebsiteAddContent
|
||||
(*clientpb.WebsiteRemoveContent)(nil), // 29: clientpb.WebsiteRemoveContent
|
||||
(*sliverpb.Ping)(nil), // 30: sliverpb.Ping
|
||||
(*sliverpb.PsReq)(nil), // 31: sliverpb.PsReq
|
||||
(*sliverpb.TerminateReq)(nil), // 32: sliverpb.TerminateReq
|
||||
(*sliverpb.IfconfigReq)(nil), // 33: sliverpb.IfconfigReq
|
||||
(*sliverpb.NetstatReq)(nil), // 34: sliverpb.NetstatReq
|
||||
(*sliverpb.LsReq)(nil), // 35: sliverpb.LsReq
|
||||
(*sliverpb.CdReq)(nil), // 36: sliverpb.CdReq
|
||||
(*sliverpb.PwdReq)(nil), // 37: sliverpb.PwdReq
|
||||
(*sliverpb.MvReq)(nil), // 38: sliverpb.MvReq
|
||||
(*sliverpb.RmReq)(nil), // 39: sliverpb.RmReq
|
||||
(*sliverpb.MkdirReq)(nil), // 40: sliverpb.MkdirReq
|
||||
(*sliverpb.DownloadReq)(nil), // 41: sliverpb.DownloadReq
|
||||
(*sliverpb.UploadReq)(nil), // 42: sliverpb.UploadReq
|
||||
(*sliverpb.ProcessDumpReq)(nil), // 43: sliverpb.ProcessDumpReq
|
||||
(*sliverpb.RunAsReq)(nil), // 44: sliverpb.RunAsReq
|
||||
(*sliverpb.ImpersonateReq)(nil), // 45: sliverpb.ImpersonateReq
|
||||
(*sliverpb.RevToSelfReq)(nil), // 46: sliverpb.RevToSelfReq
|
||||
(*clientpb.GetSystemReq)(nil), // 47: clientpb.GetSystemReq
|
||||
(*sliverpb.TaskReq)(nil), // 48: sliverpb.TaskReq
|
||||
(*clientpb.MSFReq)(nil), // 49: clientpb.MSFReq
|
||||
(*clientpb.MSFRemoteReq)(nil), // 50: clientpb.MSFRemoteReq
|
||||
(*sliverpb.ExecuteAssemblyReq)(nil), // 51: sliverpb.ExecuteAssemblyReq
|
||||
(*clientpb.MigrateReq)(nil), // 52: clientpb.MigrateReq
|
||||
(*sliverpb.ExecuteReq)(nil), // 53: sliverpb.ExecuteReq
|
||||
(*sliverpb.ExecuteWindowsReq)(nil), // 54: sliverpb.ExecuteWindowsReq
|
||||
(*sliverpb.SideloadReq)(nil), // 55: sliverpb.SideloadReq
|
||||
(*sliverpb.InvokeSpawnDllReq)(nil), // 56: sliverpb.InvokeSpawnDllReq
|
||||
(*sliverpb.ScreenshotReq)(nil), // 57: sliverpb.ScreenshotReq
|
||||
(*sliverpb.CurrentTokenOwnerReq)(nil), // 58: sliverpb.CurrentTokenOwnerReq
|
||||
(*sliverpb.PivotStartListenerReq)(nil), // 59: sliverpb.PivotStartListenerReq
|
||||
(*sliverpb.PivotStopListenerReq)(nil), // 60: sliverpb.PivotStopListenerReq
|
||||
(*sliverpb.PivotListenersReq)(nil), // 61: sliverpb.PivotListenersReq
|
||||
(*sliverpb.StartServiceReq)(nil), // 62: sliverpb.StartServiceReq
|
||||
(*sliverpb.StopServiceReq)(nil), // 63: sliverpb.StopServiceReq
|
||||
(*sliverpb.RemoveServiceReq)(nil), // 64: sliverpb.RemoveServiceReq
|
||||
(*sliverpb.MakeTokenReq)(nil), // 65: sliverpb.MakeTokenReq
|
||||
(*sliverpb.EnvReq)(nil), // 66: sliverpb.EnvReq
|
||||
(*sliverpb.SetEnvReq)(nil), // 67: sliverpb.SetEnvReq
|
||||
(*sliverpb.UnsetEnvReq)(nil), // 68: sliverpb.UnsetEnvReq
|
||||
(*sliverpb.BackdoorReq)(nil), // 69: sliverpb.BackdoorReq
|
||||
(*sliverpb.RegistryReadReq)(nil), // 70: sliverpb.RegistryReadReq
|
||||
(*sliverpb.RegistryWriteReq)(nil), // 71: sliverpb.RegistryWriteReq
|
||||
(*sliverpb.RegistryCreateKeyReq)(nil), // 72: sliverpb.RegistryCreateKeyReq
|
||||
(*sliverpb.RegistryDeleteKeyReq)(nil), // 73: sliverpb.RegistryDeleteKeyReq
|
||||
(*sliverpb.RegistrySubKeyListReq)(nil), // 74: sliverpb.RegistrySubKeyListReq
|
||||
(*sliverpb.RegistryListValuesReq)(nil), // 75: sliverpb.RegistryListValuesReq
|
||||
(*sliverpb.SSHCommandReq)(nil), // 76: sliverpb.SSHCommandReq
|
||||
(*clientpb.DllHijackReq)(nil), // 77: clientpb.DllHijackReq
|
||||
(*sliverpb.GetPrivsReq)(nil), // 78: sliverpb.GetPrivsReq
|
||||
(*sliverpb.RportFwdStartListenerReq)(nil), // 79: sliverpb.RportFwdStartListenerReq
|
||||
(*sliverpb.RportFwdListenersReq)(nil), // 80: sliverpb.RportFwdListenersReq
|
||||
(*sliverpb.RportFwdStopListenerReq)(nil), // 81: sliverpb.RportFwdStopListenerReq
|
||||
(*sliverpb.OpenSession)(nil), // 82: sliverpb.OpenSession
|
||||
(*sliverpb.CloseSession)(nil), // 83: sliverpb.CloseSession
|
||||
(*sliverpb.RegisterExtensionReq)(nil), // 84: sliverpb.RegisterExtensionReq
|
||||
(*sliverpb.CallExtensionReq)(nil), // 85: sliverpb.CallExtensionReq
|
||||
(*sliverpb.ListExtensionsReq)(nil), // 86: sliverpb.ListExtensionsReq
|
||||
(*sliverpb.WGPortForwardStartReq)(nil), // 87: sliverpb.WGPortForwardStartReq
|
||||
(*sliverpb.WGPortForwardStopReq)(nil), // 88: sliverpb.WGPortForwardStopReq
|
||||
(*sliverpb.WGSocksStartReq)(nil), // 89: sliverpb.WGSocksStartReq
|
||||
(*sliverpb.WGSocksStopReq)(nil), // 90: sliverpb.WGSocksStopReq
|
||||
(*sliverpb.WGTCPForwardersReq)(nil), // 91: sliverpb.WGTCPForwardersReq
|
||||
(*sliverpb.WGSocksServersReq)(nil), // 92: sliverpb.WGSocksServersReq
|
||||
(*sliverpb.ShellReq)(nil), // 93: sliverpb.ShellReq
|
||||
(*sliverpb.PortfwdReq)(nil), // 94: sliverpb.PortfwdReq
|
||||
(*sliverpb.Socks)(nil), // 95: sliverpb.Socks
|
||||
(*sliverpb.SocksData)(nil), // 96: sliverpb.SocksData
|
||||
(*sliverpb.Tunnel)(nil), // 97: sliverpb.Tunnel
|
||||
(*sliverpb.TunnelData)(nil), // 98: sliverpb.TunnelData
|
||||
(*clientpb.Version)(nil), // 99: clientpb.Version
|
||||
(*clientpb.Operators)(nil), // 100: clientpb.Operators
|
||||
(*sliverpb.Reconfigure)(nil), // 101: sliverpb.Reconfigure
|
||||
(*clientpb.Sessions)(nil), // 102: clientpb.Sessions
|
||||
(*clientpb.Beacons)(nil), // 103: clientpb.Beacons
|
||||
(*clientpb.BeaconTasks)(nil), // 104: clientpb.BeaconTasks
|
||||
(*commonpb.Response)(nil), // 105: commonpb.Response
|
||||
(*clientpb.Jobs)(nil), // 106: clientpb.Jobs
|
||||
(*clientpb.KillJob)(nil), // 107: clientpb.KillJob
|
||||
(*clientpb.MTLSListener)(nil), // 108: clientpb.MTLSListener
|
||||
(*clientpb.WGListener)(nil), // 109: clientpb.WGListener
|
||||
(*clientpb.DNSListener)(nil), // 110: clientpb.DNSListener
|
||||
(*clientpb.HTTPListener)(nil), // 111: clientpb.HTTPListener
|
||||
(*clientpb.StagerListener)(nil), // 112: clientpb.StagerListener
|
||||
(*clientpb.AllLoot)(nil), // 113: clientpb.AllLoot
|
||||
(*clientpb.AllHosts)(nil), // 114: clientpb.AllHosts
|
||||
(*clientpb.Generate)(nil), // 115: clientpb.Generate
|
||||
(*clientpb.ExternalImplantConfig)(nil), // 116: clientpb.ExternalImplantConfig
|
||||
(*clientpb.Builders)(nil), // 117: clientpb.Builders
|
||||
(*clientpb.ImplantBuilds)(nil), // 118: clientpb.ImplantBuilds
|
||||
(*clientpb.Canaries)(nil), // 119: clientpb.Canaries
|
||||
(*clientpb.WGClientConfig)(nil), // 120: clientpb.WGClientConfig
|
||||
(*clientpb.UniqueWGIP)(nil), // 121: clientpb.UniqueWGIP
|
||||
(*clientpb.ImplantProfiles)(nil), // 122: clientpb.ImplantProfiles
|
||||
(*clientpb.MsfStager)(nil), // 123: clientpb.MsfStager
|
||||
(*clientpb.ShellcodeRDI)(nil), // 124: clientpb.ShellcodeRDI
|
||||
(*clientpb.Compiler)(nil), // 125: clientpb.Compiler
|
||||
(*clientpb.ShellcodeEncode)(nil), // 126: clientpb.ShellcodeEncode
|
||||
(*clientpb.ShellcodeEncoderMap)(nil), // 127: clientpb.ShellcodeEncoderMap
|
||||
(*clientpb.Websites)(nil), // 128: clientpb.Websites
|
||||
(*sliverpb.Ps)(nil), // 129: sliverpb.Ps
|
||||
(*sliverpb.Terminate)(nil), // 130: sliverpb.Terminate
|
||||
(*sliverpb.Ifconfig)(nil), // 131: sliverpb.Ifconfig
|
||||
(*sliverpb.Netstat)(nil), // 132: sliverpb.Netstat
|
||||
(*sliverpb.Ls)(nil), // 133: sliverpb.Ls
|
||||
(*sliverpb.Pwd)(nil), // 134: sliverpb.Pwd
|
||||
(*sliverpb.Mv)(nil), // 135: sliverpb.Mv
|
||||
(*sliverpb.Rm)(nil), // 136: sliverpb.Rm
|
||||
(*sliverpb.Mkdir)(nil), // 137: sliverpb.Mkdir
|
||||
(*sliverpb.Download)(nil), // 138: sliverpb.Download
|
||||
(*sliverpb.Upload)(nil), // 139: sliverpb.Upload
|
||||
(*sliverpb.ProcessDump)(nil), // 140: sliverpb.ProcessDump
|
||||
(*sliverpb.RunAs)(nil), // 141: sliverpb.RunAs
|
||||
(*sliverpb.Impersonate)(nil), // 142: sliverpb.Impersonate
|
||||
(*sliverpb.RevToSelf)(nil), // 143: sliverpb.RevToSelf
|
||||
(*sliverpb.GetSystem)(nil), // 144: sliverpb.GetSystem
|
||||
(*sliverpb.Task)(nil), // 145: sliverpb.Task
|
||||
(*sliverpb.ExecuteAssembly)(nil), // 146: sliverpb.ExecuteAssembly
|
||||
(*sliverpb.Migrate)(nil), // 147: sliverpb.Migrate
|
||||
(*sliverpb.Execute)(nil), // 148: sliverpb.Execute
|
||||
(*sliverpb.Sideload)(nil), // 149: sliverpb.Sideload
|
||||
(*sliverpb.SpawnDll)(nil), // 150: sliverpb.SpawnDll
|
||||
(*sliverpb.Screenshot)(nil), // 151: sliverpb.Screenshot
|
||||
(*sliverpb.CurrentTokenOwner)(nil), // 152: sliverpb.CurrentTokenOwner
|
||||
(*sliverpb.PivotListener)(nil), // 153: sliverpb.PivotListener
|
||||
(*sliverpb.PivotListeners)(nil), // 154: sliverpb.PivotListeners
|
||||
(*clientpb.PivotGraph)(nil), // 155: clientpb.PivotGraph
|
||||
(*sliverpb.ServiceInfo)(nil), // 156: sliverpb.ServiceInfo
|
||||
(*sliverpb.MakeToken)(nil), // 157: sliverpb.MakeToken
|
||||
(*sliverpb.EnvInfo)(nil), // 158: sliverpb.EnvInfo
|
||||
(*sliverpb.SetEnv)(nil), // 159: sliverpb.SetEnv
|
||||
(*sliverpb.UnsetEnv)(nil), // 160: sliverpb.UnsetEnv
|
||||
(*sliverpb.Backdoor)(nil), // 161: sliverpb.Backdoor
|
||||
(*sliverpb.RegistryRead)(nil), // 162: sliverpb.RegistryRead
|
||||
(*sliverpb.RegistryWrite)(nil), // 163: sliverpb.RegistryWrite
|
||||
(*sliverpb.RegistryCreateKey)(nil), // 164: sliverpb.RegistryCreateKey
|
||||
(*sliverpb.RegistryDeleteKey)(nil), // 165: sliverpb.RegistryDeleteKey
|
||||
(*sliverpb.RegistrySubKeyList)(nil), // 166: sliverpb.RegistrySubKeyList
|
||||
(*sliverpb.RegistryValuesList)(nil), // 167: sliverpb.RegistryValuesList
|
||||
(*sliverpb.SSHCommand)(nil), // 168: sliverpb.SSHCommand
|
||||
(*clientpb.DllHijack)(nil), // 169: clientpb.DllHijack
|
||||
(*sliverpb.GetPrivs)(nil), // 170: sliverpb.GetPrivs
|
||||
(*sliverpb.RportFwdListener)(nil), // 171: sliverpb.RportFwdListener
|
||||
(*sliverpb.RportFwdListeners)(nil), // 172: sliverpb.RportFwdListeners
|
||||
(*sliverpb.RegisterExtension)(nil), // 173: sliverpb.RegisterExtension
|
||||
(*sliverpb.CallExtension)(nil), // 174: sliverpb.CallExtension
|
||||
(*sliverpb.ListExtensions)(nil), // 175: sliverpb.ListExtensions
|
||||
(*sliverpb.WGPortForward)(nil), // 176: sliverpb.WGPortForward
|
||||
(*sliverpb.WGSocks)(nil), // 177: sliverpb.WGSocks
|
||||
(*sliverpb.WGTCPForwarders)(nil), // 178: sliverpb.WGTCPForwarders
|
||||
(*sliverpb.WGSocksServers)(nil), // 179: sliverpb.WGSocksServers
|
||||
(*sliverpb.Shell)(nil), // 180: sliverpb.Shell
|
||||
(*sliverpb.Portfwd)(nil), // 181: sliverpb.Portfwd
|
||||
(*clientpb.Credentials)(nil), // 13: clientpb.Credentials
|
||||
(*clientpb.Credential)(nil), // 14: clientpb.Credential
|
||||
(*clientpb.Host)(nil), // 15: clientpb.Host
|
||||
(*clientpb.IOC)(nil), // 16: clientpb.IOC
|
||||
(*clientpb.GenerateReq)(nil), // 17: clientpb.GenerateReq
|
||||
(*clientpb.ExternalGenerateReq)(nil), // 18: clientpb.ExternalGenerateReq
|
||||
(*clientpb.ExternalImplantBinary)(nil), // 19: clientpb.ExternalImplantBinary
|
||||
(*clientpb.ImplantConfig)(nil), // 20: clientpb.ImplantConfig
|
||||
(*clientpb.Builder)(nil), // 21: clientpb.Builder
|
||||
(*clientpb.Event)(nil), // 22: clientpb.Event
|
||||
(*clientpb.Crackstation)(nil), // 23: clientpb.Crackstation
|
||||
(*clientpb.RegenerateReq)(nil), // 24: clientpb.RegenerateReq
|
||||
(*clientpb.DeleteReq)(nil), // 25: clientpb.DeleteReq
|
||||
(*clientpb.ImplantProfile)(nil), // 26: clientpb.ImplantProfile
|
||||
(*clientpb.MsfStagerReq)(nil), // 27: clientpb.MsfStagerReq
|
||||
(*clientpb.ShellcodeRDIReq)(nil), // 28: clientpb.ShellcodeRDIReq
|
||||
(*clientpb.ShellcodeEncodeReq)(nil), // 29: clientpb.ShellcodeEncodeReq
|
||||
(*clientpb.Website)(nil), // 30: clientpb.Website
|
||||
(*clientpb.WebsiteAddContent)(nil), // 31: clientpb.WebsiteAddContent
|
||||
(*clientpb.WebsiteRemoveContent)(nil), // 32: clientpb.WebsiteRemoveContent
|
||||
(*sliverpb.Ping)(nil), // 33: sliverpb.Ping
|
||||
(*sliverpb.PsReq)(nil), // 34: sliverpb.PsReq
|
||||
(*sliverpb.TerminateReq)(nil), // 35: sliverpb.TerminateReq
|
||||
(*sliverpb.IfconfigReq)(nil), // 36: sliverpb.IfconfigReq
|
||||
(*sliverpb.NetstatReq)(nil), // 37: sliverpb.NetstatReq
|
||||
(*sliverpb.LsReq)(nil), // 38: sliverpb.LsReq
|
||||
(*sliverpb.CdReq)(nil), // 39: sliverpb.CdReq
|
||||
(*sliverpb.PwdReq)(nil), // 40: sliverpb.PwdReq
|
||||
(*sliverpb.MvReq)(nil), // 41: sliverpb.MvReq
|
||||
(*sliverpb.RmReq)(nil), // 42: sliverpb.RmReq
|
||||
(*sliverpb.MkdirReq)(nil), // 43: sliverpb.MkdirReq
|
||||
(*sliverpb.DownloadReq)(nil), // 44: sliverpb.DownloadReq
|
||||
(*sliverpb.UploadReq)(nil), // 45: sliverpb.UploadReq
|
||||
(*sliverpb.ProcessDumpReq)(nil), // 46: sliverpb.ProcessDumpReq
|
||||
(*sliverpb.RunAsReq)(nil), // 47: sliverpb.RunAsReq
|
||||
(*sliverpb.ImpersonateReq)(nil), // 48: sliverpb.ImpersonateReq
|
||||
(*sliverpb.RevToSelfReq)(nil), // 49: sliverpb.RevToSelfReq
|
||||
(*clientpb.GetSystemReq)(nil), // 50: clientpb.GetSystemReq
|
||||
(*sliverpb.TaskReq)(nil), // 51: sliverpb.TaskReq
|
||||
(*clientpb.MSFReq)(nil), // 52: clientpb.MSFReq
|
||||
(*clientpb.MSFRemoteReq)(nil), // 53: clientpb.MSFRemoteReq
|
||||
(*sliverpb.ExecuteAssemblyReq)(nil), // 54: sliverpb.ExecuteAssemblyReq
|
||||
(*clientpb.MigrateReq)(nil), // 55: clientpb.MigrateReq
|
||||
(*sliverpb.ExecuteReq)(nil), // 56: sliverpb.ExecuteReq
|
||||
(*sliverpb.ExecuteWindowsReq)(nil), // 57: sliverpb.ExecuteWindowsReq
|
||||
(*sliverpb.SideloadReq)(nil), // 58: sliverpb.SideloadReq
|
||||
(*sliverpb.InvokeSpawnDllReq)(nil), // 59: sliverpb.InvokeSpawnDllReq
|
||||
(*sliverpb.ScreenshotReq)(nil), // 60: sliverpb.ScreenshotReq
|
||||
(*sliverpb.CurrentTokenOwnerReq)(nil), // 61: sliverpb.CurrentTokenOwnerReq
|
||||
(*sliverpb.PivotStartListenerReq)(nil), // 62: sliverpb.PivotStartListenerReq
|
||||
(*sliverpb.PivotStopListenerReq)(nil), // 63: sliverpb.PivotStopListenerReq
|
||||
(*sliverpb.PivotListenersReq)(nil), // 64: sliverpb.PivotListenersReq
|
||||
(*sliverpb.StartServiceReq)(nil), // 65: sliverpb.StartServiceReq
|
||||
(*sliverpb.StopServiceReq)(nil), // 66: sliverpb.StopServiceReq
|
||||
(*sliverpb.RemoveServiceReq)(nil), // 67: sliverpb.RemoveServiceReq
|
||||
(*sliverpb.MakeTokenReq)(nil), // 68: sliverpb.MakeTokenReq
|
||||
(*sliverpb.EnvReq)(nil), // 69: sliverpb.EnvReq
|
||||
(*sliverpb.SetEnvReq)(nil), // 70: sliverpb.SetEnvReq
|
||||
(*sliverpb.UnsetEnvReq)(nil), // 71: sliverpb.UnsetEnvReq
|
||||
(*sliverpb.BackdoorReq)(nil), // 72: sliverpb.BackdoorReq
|
||||
(*sliverpb.RegistryReadReq)(nil), // 73: sliverpb.RegistryReadReq
|
||||
(*sliverpb.RegistryWriteReq)(nil), // 74: sliverpb.RegistryWriteReq
|
||||
(*sliverpb.RegistryCreateKeyReq)(nil), // 75: sliverpb.RegistryCreateKeyReq
|
||||
(*sliverpb.RegistryDeleteKeyReq)(nil), // 76: sliverpb.RegistryDeleteKeyReq
|
||||
(*sliverpb.RegistrySubKeyListReq)(nil), // 77: sliverpb.RegistrySubKeyListReq
|
||||
(*sliverpb.RegistryListValuesReq)(nil), // 78: sliverpb.RegistryListValuesReq
|
||||
(*sliverpb.SSHCommandReq)(nil), // 79: sliverpb.SSHCommandReq
|
||||
(*clientpb.DllHijackReq)(nil), // 80: clientpb.DllHijackReq
|
||||
(*sliverpb.GetPrivsReq)(nil), // 81: sliverpb.GetPrivsReq
|
||||
(*sliverpb.RportFwdStartListenerReq)(nil), // 82: sliverpb.RportFwdStartListenerReq
|
||||
(*sliverpb.RportFwdListenersReq)(nil), // 83: sliverpb.RportFwdListenersReq
|
||||
(*sliverpb.RportFwdStopListenerReq)(nil), // 84: sliverpb.RportFwdStopListenerReq
|
||||
(*sliverpb.OpenSession)(nil), // 85: sliverpb.OpenSession
|
||||
(*sliverpb.CloseSession)(nil), // 86: sliverpb.CloseSession
|
||||
(*sliverpb.RegisterExtensionReq)(nil), // 87: sliverpb.RegisterExtensionReq
|
||||
(*sliverpb.CallExtensionReq)(nil), // 88: sliverpb.CallExtensionReq
|
||||
(*sliverpb.ListExtensionsReq)(nil), // 89: sliverpb.ListExtensionsReq
|
||||
(*sliverpb.WGPortForwardStartReq)(nil), // 90: sliverpb.WGPortForwardStartReq
|
||||
(*sliverpb.WGPortForwardStopReq)(nil), // 91: sliverpb.WGPortForwardStopReq
|
||||
(*sliverpb.WGSocksStartReq)(nil), // 92: sliverpb.WGSocksStartReq
|
||||
(*sliverpb.WGSocksStopReq)(nil), // 93: sliverpb.WGSocksStopReq
|
||||
(*sliverpb.WGTCPForwardersReq)(nil), // 94: sliverpb.WGTCPForwardersReq
|
||||
(*sliverpb.WGSocksServersReq)(nil), // 95: sliverpb.WGSocksServersReq
|
||||
(*sliverpb.ShellReq)(nil), // 96: sliverpb.ShellReq
|
||||
(*sliverpb.PortfwdReq)(nil), // 97: sliverpb.PortfwdReq
|
||||
(*sliverpb.Socks)(nil), // 98: sliverpb.Socks
|
||||
(*sliverpb.SocksData)(nil), // 99: sliverpb.SocksData
|
||||
(*sliverpb.Tunnel)(nil), // 100: sliverpb.Tunnel
|
||||
(*sliverpb.TunnelData)(nil), // 101: sliverpb.TunnelData
|
||||
(*clientpb.Version)(nil), // 102: clientpb.Version
|
||||
(*clientpb.Operators)(nil), // 103: clientpb.Operators
|
||||
(*sliverpb.Reconfigure)(nil), // 104: sliverpb.Reconfigure
|
||||
(*clientpb.Sessions)(nil), // 105: clientpb.Sessions
|
||||
(*clientpb.Beacons)(nil), // 106: clientpb.Beacons
|
||||
(*clientpb.BeaconTasks)(nil), // 107: clientpb.BeaconTasks
|
||||
(*commonpb.Response)(nil), // 108: commonpb.Response
|
||||
(*clientpb.Jobs)(nil), // 109: clientpb.Jobs
|
||||
(*clientpb.KillJob)(nil), // 110: clientpb.KillJob
|
||||
(*clientpb.MTLSListener)(nil), // 111: clientpb.MTLSListener
|
||||
(*clientpb.WGListener)(nil), // 112: clientpb.WGListener
|
||||
(*clientpb.DNSListener)(nil), // 113: clientpb.DNSListener
|
||||
(*clientpb.HTTPListener)(nil), // 114: clientpb.HTTPListener
|
||||
(*clientpb.StagerListener)(nil), // 115: clientpb.StagerListener
|
||||
(*clientpb.AllLoot)(nil), // 116: clientpb.AllLoot
|
||||
(*clientpb.AllHosts)(nil), // 117: clientpb.AllHosts
|
||||
(*clientpb.Generate)(nil), // 118: clientpb.Generate
|
||||
(*clientpb.ExternalImplantConfig)(nil), // 119: clientpb.ExternalImplantConfig
|
||||
(*clientpb.Builders)(nil), // 120: clientpb.Builders
|
||||
(*clientpb.Crackstations)(nil), // 121: clientpb.Crackstations
|
||||
(*clientpb.ImplantBuilds)(nil), // 122: clientpb.ImplantBuilds
|
||||
(*clientpb.Canaries)(nil), // 123: clientpb.Canaries
|
||||
(*clientpb.WGClientConfig)(nil), // 124: clientpb.WGClientConfig
|
||||
(*clientpb.UniqueWGIP)(nil), // 125: clientpb.UniqueWGIP
|
||||
(*clientpb.ImplantProfiles)(nil), // 126: clientpb.ImplantProfiles
|
||||
(*clientpb.MsfStager)(nil), // 127: clientpb.MsfStager
|
||||
(*clientpb.ShellcodeRDI)(nil), // 128: clientpb.ShellcodeRDI
|
||||
(*clientpb.Compiler)(nil), // 129: clientpb.Compiler
|
||||
(*clientpb.ShellcodeEncode)(nil), // 130: clientpb.ShellcodeEncode
|
||||
(*clientpb.ShellcodeEncoderMap)(nil), // 131: clientpb.ShellcodeEncoderMap
|
||||
(*clientpb.Websites)(nil), // 132: clientpb.Websites
|
||||
(*sliverpb.Ps)(nil), // 133: sliverpb.Ps
|
||||
(*sliverpb.Terminate)(nil), // 134: sliverpb.Terminate
|
||||
(*sliverpb.Ifconfig)(nil), // 135: sliverpb.Ifconfig
|
||||
(*sliverpb.Netstat)(nil), // 136: sliverpb.Netstat
|
||||
(*sliverpb.Ls)(nil), // 137: sliverpb.Ls
|
||||
(*sliverpb.Pwd)(nil), // 138: sliverpb.Pwd
|
||||
(*sliverpb.Mv)(nil), // 139: sliverpb.Mv
|
||||
(*sliverpb.Rm)(nil), // 140: sliverpb.Rm
|
||||
(*sliverpb.Mkdir)(nil), // 141: sliverpb.Mkdir
|
||||
(*sliverpb.Download)(nil), // 142: sliverpb.Download
|
||||
(*sliverpb.Upload)(nil), // 143: sliverpb.Upload
|
||||
(*sliverpb.ProcessDump)(nil), // 144: sliverpb.ProcessDump
|
||||
(*sliverpb.RunAs)(nil), // 145: sliverpb.RunAs
|
||||
(*sliverpb.Impersonate)(nil), // 146: sliverpb.Impersonate
|
||||
(*sliverpb.RevToSelf)(nil), // 147: sliverpb.RevToSelf
|
||||
(*sliverpb.GetSystem)(nil), // 148: sliverpb.GetSystem
|
||||
(*sliverpb.Task)(nil), // 149: sliverpb.Task
|
||||
(*sliverpb.ExecuteAssembly)(nil), // 150: sliverpb.ExecuteAssembly
|
||||
(*sliverpb.Migrate)(nil), // 151: sliverpb.Migrate
|
||||
(*sliverpb.Execute)(nil), // 152: sliverpb.Execute
|
||||
(*sliverpb.Sideload)(nil), // 153: sliverpb.Sideload
|
||||
(*sliverpb.SpawnDll)(nil), // 154: sliverpb.SpawnDll
|
||||
(*sliverpb.Screenshot)(nil), // 155: sliverpb.Screenshot
|
||||
(*sliverpb.CurrentTokenOwner)(nil), // 156: sliverpb.CurrentTokenOwner
|
||||
(*sliverpb.PivotListener)(nil), // 157: sliverpb.PivotListener
|
||||
(*sliverpb.PivotListeners)(nil), // 158: sliverpb.PivotListeners
|
||||
(*clientpb.PivotGraph)(nil), // 159: clientpb.PivotGraph
|
||||
(*sliverpb.ServiceInfo)(nil), // 160: sliverpb.ServiceInfo
|
||||
(*sliverpb.MakeToken)(nil), // 161: sliverpb.MakeToken
|
||||
(*sliverpb.EnvInfo)(nil), // 162: sliverpb.EnvInfo
|
||||
(*sliverpb.SetEnv)(nil), // 163: sliverpb.SetEnv
|
||||
(*sliverpb.UnsetEnv)(nil), // 164: sliverpb.UnsetEnv
|
||||
(*sliverpb.Backdoor)(nil), // 165: sliverpb.Backdoor
|
||||
(*sliverpb.RegistryRead)(nil), // 166: sliverpb.RegistryRead
|
||||
(*sliverpb.RegistryWrite)(nil), // 167: sliverpb.RegistryWrite
|
||||
(*sliverpb.RegistryCreateKey)(nil), // 168: sliverpb.RegistryCreateKey
|
||||
(*sliverpb.RegistryDeleteKey)(nil), // 169: sliverpb.RegistryDeleteKey
|
||||
(*sliverpb.RegistrySubKeyList)(nil), // 170: sliverpb.RegistrySubKeyList
|
||||
(*sliverpb.RegistryValuesList)(nil), // 171: sliverpb.RegistryValuesList
|
||||
(*sliverpb.SSHCommand)(nil), // 172: sliverpb.SSHCommand
|
||||
(*clientpb.DllHijack)(nil), // 173: clientpb.DllHijack
|
||||
(*sliverpb.GetPrivs)(nil), // 174: sliverpb.GetPrivs
|
||||
(*sliverpb.RportFwdListener)(nil), // 175: sliverpb.RportFwdListener
|
||||
(*sliverpb.RportFwdListeners)(nil), // 176: sliverpb.RportFwdListeners
|
||||
(*sliverpb.RegisterExtension)(nil), // 177: sliverpb.RegisterExtension
|
||||
(*sliverpb.CallExtension)(nil), // 178: sliverpb.CallExtension
|
||||
(*sliverpb.ListExtensions)(nil), // 179: sliverpb.ListExtensions
|
||||
(*sliverpb.WGPortForward)(nil), // 180: sliverpb.WGPortForward
|
||||
(*sliverpb.WGSocks)(nil), // 181: sliverpb.WGSocks
|
||||
(*sliverpb.WGTCPForwarders)(nil), // 182: sliverpb.WGTCPForwarders
|
||||
(*sliverpb.WGSocksServers)(nil), // 183: sliverpb.WGSocksServers
|
||||
(*sliverpb.Shell)(nil), // 184: sliverpb.Shell
|
||||
(*sliverpb.Portfwd)(nil), // 185: sliverpb.Portfwd
|
||||
}
|
||||
var file_rpcpb_services_proto_depIdxs = []int32{
|
||||
0, // 0: rpcpb.SliverRPC.GetVersion:input_type -> commonpb.Empty
|
||||
@@ -747,246 +785,264 @@ var file_rpcpb_services_proto_depIdxs = []int32{
|
||||
12, // 25: rpcpb.SliverRPC.LootUpdate:input_type -> clientpb.Loot
|
||||
12, // 26: rpcpb.SliverRPC.LootContent:input_type -> clientpb.Loot
|
||||
0, // 27: rpcpb.SliverRPC.LootAll:input_type -> commonpb.Empty
|
||||
12, // 28: rpcpb.SliverRPC.LootAllOf:input_type -> clientpb.Loot
|
||||
0, // 29: rpcpb.SliverRPC.Hosts:input_type -> commonpb.Empty
|
||||
13, // 30: rpcpb.SliverRPC.Host:input_type -> clientpb.Host
|
||||
13, // 31: rpcpb.SliverRPC.HostRm:input_type -> clientpb.Host
|
||||
14, // 32: rpcpb.SliverRPC.HostIOCRm:input_type -> clientpb.IOC
|
||||
15, // 33: rpcpb.SliverRPC.Generate:input_type -> clientpb.GenerateReq
|
||||
16, // 34: rpcpb.SliverRPC.GenerateExternal:input_type -> clientpb.ExternalGenerateReq
|
||||
17, // 35: rpcpb.SliverRPC.GenerateExternalSaveBuild:input_type -> clientpb.ExternalImplantBinary
|
||||
18, // 36: rpcpb.SliverRPC.GenerateExternalGetImplantConfig:input_type -> clientpb.ImplantConfig
|
||||
19, // 37: rpcpb.SliverRPC.BuilderRegister:input_type -> clientpb.Builder
|
||||
20, // 38: rpcpb.SliverRPC.BuilderTrigger:input_type -> clientpb.Event
|
||||
0, // 39: rpcpb.SliverRPC.Builders:input_type -> commonpb.Empty
|
||||
21, // 40: rpcpb.SliverRPC.Regenerate:input_type -> clientpb.RegenerateReq
|
||||
0, // 41: rpcpb.SliverRPC.ImplantBuilds:input_type -> commonpb.Empty
|
||||
22, // 42: rpcpb.SliverRPC.DeleteImplantBuild:input_type -> clientpb.DeleteReq
|
||||
0, // 43: rpcpb.SliverRPC.Canaries:input_type -> commonpb.Empty
|
||||
0, // 44: rpcpb.SliverRPC.GenerateWGClientConfig:input_type -> commonpb.Empty
|
||||
0, // 45: rpcpb.SliverRPC.GenerateUniqueIP:input_type -> commonpb.Empty
|
||||
0, // 46: rpcpb.SliverRPC.ImplantProfiles:input_type -> commonpb.Empty
|
||||
22, // 47: rpcpb.SliverRPC.DeleteImplantProfile:input_type -> clientpb.DeleteReq
|
||||
23, // 48: rpcpb.SliverRPC.SaveImplantProfile:input_type -> clientpb.ImplantProfile
|
||||
24, // 49: rpcpb.SliverRPC.MsfStage:input_type -> clientpb.MsfStagerReq
|
||||
25, // 50: rpcpb.SliverRPC.ShellcodeRDI:input_type -> clientpb.ShellcodeRDIReq
|
||||
0, // 51: rpcpb.SliverRPC.GetCompiler:input_type -> commonpb.Empty
|
||||
26, // 52: rpcpb.SliverRPC.ShellcodeEncoder:input_type -> clientpb.ShellcodeEncodeReq
|
||||
0, // 53: rpcpb.SliverRPC.ShellcodeEncoderMap:input_type -> commonpb.Empty
|
||||
0, // 54: rpcpb.SliverRPC.Websites:input_type -> commonpb.Empty
|
||||
27, // 55: rpcpb.SliverRPC.Website:input_type -> clientpb.Website
|
||||
27, // 56: rpcpb.SliverRPC.WebsiteRemove:input_type -> clientpb.Website
|
||||
28, // 57: rpcpb.SliverRPC.WebsiteAddContent:input_type -> clientpb.WebsiteAddContent
|
||||
28, // 58: rpcpb.SliverRPC.WebsiteUpdateContent:input_type -> clientpb.WebsiteAddContent
|
||||
29, // 59: rpcpb.SliverRPC.WebsiteRemoveContent:input_type -> clientpb.WebsiteRemoveContent
|
||||
30, // 60: rpcpb.SliverRPC.Ping:input_type -> sliverpb.Ping
|
||||
31, // 61: rpcpb.SliverRPC.Ps:input_type -> sliverpb.PsReq
|
||||
32, // 62: rpcpb.SliverRPC.Terminate:input_type -> sliverpb.TerminateReq
|
||||
33, // 63: rpcpb.SliverRPC.Ifconfig:input_type -> sliverpb.IfconfigReq
|
||||
34, // 64: rpcpb.SliverRPC.Netstat:input_type -> sliverpb.NetstatReq
|
||||
35, // 65: rpcpb.SliverRPC.Ls:input_type -> sliverpb.LsReq
|
||||
36, // 66: rpcpb.SliverRPC.Cd:input_type -> sliverpb.CdReq
|
||||
37, // 67: rpcpb.SliverRPC.Pwd:input_type -> sliverpb.PwdReq
|
||||
38, // 68: rpcpb.SliverRPC.Mv:input_type -> sliverpb.MvReq
|
||||
39, // 69: rpcpb.SliverRPC.Rm:input_type -> sliverpb.RmReq
|
||||
40, // 70: rpcpb.SliverRPC.Mkdir:input_type -> sliverpb.MkdirReq
|
||||
41, // 71: rpcpb.SliverRPC.Download:input_type -> sliverpb.DownloadReq
|
||||
42, // 72: rpcpb.SliverRPC.Upload:input_type -> sliverpb.UploadReq
|
||||
43, // 73: rpcpb.SliverRPC.ProcessDump:input_type -> sliverpb.ProcessDumpReq
|
||||
44, // 74: rpcpb.SliverRPC.RunAs:input_type -> sliverpb.RunAsReq
|
||||
45, // 75: rpcpb.SliverRPC.Impersonate:input_type -> sliverpb.ImpersonateReq
|
||||
46, // 76: rpcpb.SliverRPC.RevToSelf:input_type -> sliverpb.RevToSelfReq
|
||||
47, // 77: rpcpb.SliverRPC.GetSystem:input_type -> clientpb.GetSystemReq
|
||||
48, // 78: rpcpb.SliverRPC.Task:input_type -> sliverpb.TaskReq
|
||||
49, // 79: rpcpb.SliverRPC.Msf:input_type -> clientpb.MSFReq
|
||||
50, // 80: rpcpb.SliverRPC.MsfRemote:input_type -> clientpb.MSFRemoteReq
|
||||
51, // 81: rpcpb.SliverRPC.ExecuteAssembly:input_type -> sliverpb.ExecuteAssemblyReq
|
||||
52, // 82: rpcpb.SliverRPC.Migrate:input_type -> clientpb.MigrateReq
|
||||
53, // 83: rpcpb.SliverRPC.Execute:input_type -> sliverpb.ExecuteReq
|
||||
54, // 84: rpcpb.SliverRPC.ExecuteWindows:input_type -> sliverpb.ExecuteWindowsReq
|
||||
55, // 85: rpcpb.SliverRPC.Sideload:input_type -> sliverpb.SideloadReq
|
||||
56, // 86: rpcpb.SliverRPC.SpawnDll:input_type -> sliverpb.InvokeSpawnDllReq
|
||||
57, // 87: rpcpb.SliverRPC.Screenshot:input_type -> sliverpb.ScreenshotReq
|
||||
58, // 88: rpcpb.SliverRPC.CurrentTokenOwner:input_type -> sliverpb.CurrentTokenOwnerReq
|
||||
59, // 89: rpcpb.SliverRPC.PivotStartListener:input_type -> sliverpb.PivotStartListenerReq
|
||||
60, // 90: rpcpb.SliverRPC.PivotStopListener:input_type -> sliverpb.PivotStopListenerReq
|
||||
61, // 91: rpcpb.SliverRPC.PivotSessionListeners:input_type -> sliverpb.PivotListenersReq
|
||||
0, // 92: rpcpb.SliverRPC.PivotGraph:input_type -> commonpb.Empty
|
||||
62, // 93: rpcpb.SliverRPC.StartService:input_type -> sliverpb.StartServiceReq
|
||||
63, // 94: rpcpb.SliverRPC.StopService:input_type -> sliverpb.StopServiceReq
|
||||
64, // 95: rpcpb.SliverRPC.RemoveService:input_type -> sliverpb.RemoveServiceReq
|
||||
65, // 96: rpcpb.SliverRPC.MakeToken:input_type -> sliverpb.MakeTokenReq
|
||||
66, // 97: rpcpb.SliverRPC.GetEnv:input_type -> sliverpb.EnvReq
|
||||
67, // 98: rpcpb.SliverRPC.SetEnv:input_type -> sliverpb.SetEnvReq
|
||||
68, // 99: rpcpb.SliverRPC.UnsetEnv:input_type -> sliverpb.UnsetEnvReq
|
||||
69, // 100: rpcpb.SliverRPC.Backdoor:input_type -> sliverpb.BackdoorReq
|
||||
70, // 101: rpcpb.SliverRPC.RegistryRead:input_type -> sliverpb.RegistryReadReq
|
||||
71, // 102: rpcpb.SliverRPC.RegistryWrite:input_type -> sliverpb.RegistryWriteReq
|
||||
72, // 103: rpcpb.SliverRPC.RegistryCreateKey:input_type -> sliverpb.RegistryCreateKeyReq
|
||||
73, // 104: rpcpb.SliverRPC.RegistryDeleteKey:input_type -> sliverpb.RegistryDeleteKeyReq
|
||||
74, // 105: rpcpb.SliverRPC.RegistryListSubKeys:input_type -> sliverpb.RegistrySubKeyListReq
|
||||
75, // 106: rpcpb.SliverRPC.RegistryListValues:input_type -> sliverpb.RegistryListValuesReq
|
||||
76, // 107: rpcpb.SliverRPC.RunSSHCommand:input_type -> sliverpb.SSHCommandReq
|
||||
77, // 108: rpcpb.SliverRPC.HijackDLL:input_type -> clientpb.DllHijackReq
|
||||
78, // 109: rpcpb.SliverRPC.GetPrivs:input_type -> sliverpb.GetPrivsReq
|
||||
79, // 110: rpcpb.SliverRPC.StartRportFwdListener:input_type -> sliverpb.RportFwdStartListenerReq
|
||||
80, // 111: rpcpb.SliverRPC.GetRportFwdListeners:input_type -> sliverpb.RportFwdListenersReq
|
||||
81, // 112: rpcpb.SliverRPC.StopRportFwdListener:input_type -> sliverpb.RportFwdStopListenerReq
|
||||
82, // 113: rpcpb.SliverRPC.OpenSession:input_type -> sliverpb.OpenSession
|
||||
83, // 114: rpcpb.SliverRPC.CloseSession:input_type -> sliverpb.CloseSession
|
||||
84, // 115: rpcpb.SliverRPC.RegisterExtension:input_type -> sliverpb.RegisterExtensionReq
|
||||
85, // 116: rpcpb.SliverRPC.CallExtension:input_type -> sliverpb.CallExtensionReq
|
||||
86, // 117: rpcpb.SliverRPC.ListExtensions:input_type -> sliverpb.ListExtensionsReq
|
||||
87, // 118: rpcpb.SliverRPC.WGStartPortForward:input_type -> sliverpb.WGPortForwardStartReq
|
||||
88, // 119: rpcpb.SliverRPC.WGStopPortForward:input_type -> sliverpb.WGPortForwardStopReq
|
||||
89, // 120: rpcpb.SliverRPC.WGStartSocks:input_type -> sliverpb.WGSocksStartReq
|
||||
90, // 121: rpcpb.SliverRPC.WGStopSocks:input_type -> sliverpb.WGSocksStopReq
|
||||
91, // 122: rpcpb.SliverRPC.WGListForwarders:input_type -> sliverpb.WGTCPForwardersReq
|
||||
92, // 123: rpcpb.SliverRPC.WGListSocksServers:input_type -> sliverpb.WGSocksServersReq
|
||||
93, // 124: rpcpb.SliverRPC.Shell:input_type -> sliverpb.ShellReq
|
||||
94, // 125: rpcpb.SliverRPC.Portfwd:input_type -> sliverpb.PortfwdReq
|
||||
95, // 126: rpcpb.SliverRPC.CreateSocks:input_type -> sliverpb.Socks
|
||||
95, // 127: rpcpb.SliverRPC.CloseSocks:input_type -> sliverpb.Socks
|
||||
96, // 128: rpcpb.SliverRPC.SocksProxy:input_type -> sliverpb.SocksData
|
||||
97, // 129: rpcpb.SliverRPC.CreateTunnel:input_type -> sliverpb.Tunnel
|
||||
97, // 130: rpcpb.SliverRPC.CloseTunnel:input_type -> sliverpb.Tunnel
|
||||
98, // 131: rpcpb.SliverRPC.TunnelData:input_type -> sliverpb.TunnelData
|
||||
0, // 132: rpcpb.SliverRPC.Events:input_type -> commonpb.Empty
|
||||
99, // 133: rpcpb.SliverRPC.GetVersion:output_type -> clientpb.Version
|
||||
100, // 134: rpcpb.SliverRPC.GetOperators:output_type -> clientpb.Operators
|
||||
0, // 135: rpcpb.SliverRPC.Kill:output_type -> commonpb.Empty
|
||||
101, // 136: rpcpb.SliverRPC.Reconfigure:output_type -> sliverpb.Reconfigure
|
||||
0, // 137: rpcpb.SliverRPC.Rename:output_type -> commonpb.Empty
|
||||
102, // 138: rpcpb.SliverRPC.GetSessions:output_type -> clientpb.Sessions
|
||||
103, // 139: rpcpb.SliverRPC.GetBeacons:output_type -> clientpb.Beacons
|
||||
4, // 140: rpcpb.SliverRPC.GetBeacon:output_type -> clientpb.Beacon
|
||||
0, // 141: rpcpb.SliverRPC.RmBeacon:output_type -> commonpb.Empty
|
||||
104, // 142: rpcpb.SliverRPC.GetBeaconTasks:output_type -> clientpb.BeaconTasks
|
||||
5, // 143: rpcpb.SliverRPC.GetBeaconTaskContent:output_type -> clientpb.BeaconTask
|
||||
5, // 144: rpcpb.SliverRPC.CancelBeaconTask:output_type -> clientpb.BeaconTask
|
||||
105, // 145: rpcpb.SliverRPC.MonitorStart:output_type -> commonpb.Response
|
||||
0, // 146: rpcpb.SliverRPC.MonitorStop:output_type -> commonpb.Empty
|
||||
106, // 147: rpcpb.SliverRPC.GetJobs:output_type -> clientpb.Jobs
|
||||
107, // 148: rpcpb.SliverRPC.KillJob:output_type -> clientpb.KillJob
|
||||
108, // 149: rpcpb.SliverRPC.StartMTLSListener:output_type -> clientpb.MTLSListener
|
||||
109, // 150: rpcpb.SliverRPC.StartWGListener:output_type -> clientpb.WGListener
|
||||
110, // 151: rpcpb.SliverRPC.StartDNSListener:output_type -> clientpb.DNSListener
|
||||
111, // 152: rpcpb.SliverRPC.StartHTTPSListener:output_type -> clientpb.HTTPListener
|
||||
111, // 153: rpcpb.SliverRPC.StartHTTPListener:output_type -> clientpb.HTTPListener
|
||||
112, // 154: rpcpb.SliverRPC.StartTCPStagerListener:output_type -> clientpb.StagerListener
|
||||
112, // 155: rpcpb.SliverRPC.StartHTTPStagerListener:output_type -> clientpb.StagerListener
|
||||
12, // 156: rpcpb.SliverRPC.LootAdd:output_type -> clientpb.Loot
|
||||
0, // 157: rpcpb.SliverRPC.LootRm:output_type -> commonpb.Empty
|
||||
12, // 158: rpcpb.SliverRPC.LootUpdate:output_type -> clientpb.Loot
|
||||
12, // 159: rpcpb.SliverRPC.LootContent:output_type -> clientpb.Loot
|
||||
113, // 160: rpcpb.SliverRPC.LootAll:output_type -> clientpb.AllLoot
|
||||
113, // 161: rpcpb.SliverRPC.LootAllOf:output_type -> clientpb.AllLoot
|
||||
114, // 162: rpcpb.SliverRPC.Hosts:output_type -> clientpb.AllHosts
|
||||
13, // 163: rpcpb.SliverRPC.Host:output_type -> clientpb.Host
|
||||
0, // 164: rpcpb.SliverRPC.HostRm:output_type -> commonpb.Empty
|
||||
0, // 165: rpcpb.SliverRPC.HostIOCRm:output_type -> commonpb.Empty
|
||||
115, // 166: rpcpb.SliverRPC.Generate:output_type -> clientpb.Generate
|
||||
116, // 167: rpcpb.SliverRPC.GenerateExternal:output_type -> clientpb.ExternalImplantConfig
|
||||
0, // 168: rpcpb.SliverRPC.GenerateExternalSaveBuild:output_type -> commonpb.Empty
|
||||
116, // 169: rpcpb.SliverRPC.GenerateExternalGetImplantConfig:output_type -> clientpb.ExternalImplantConfig
|
||||
20, // 170: rpcpb.SliverRPC.BuilderRegister:output_type -> clientpb.Event
|
||||
0, // 171: rpcpb.SliverRPC.BuilderTrigger:output_type -> commonpb.Empty
|
||||
117, // 172: rpcpb.SliverRPC.Builders:output_type -> clientpb.Builders
|
||||
115, // 173: rpcpb.SliverRPC.Regenerate:output_type -> clientpb.Generate
|
||||
118, // 174: rpcpb.SliverRPC.ImplantBuilds:output_type -> clientpb.ImplantBuilds
|
||||
0, // 175: rpcpb.SliverRPC.DeleteImplantBuild:output_type -> commonpb.Empty
|
||||
119, // 176: rpcpb.SliverRPC.Canaries:output_type -> clientpb.Canaries
|
||||
120, // 177: rpcpb.SliverRPC.GenerateWGClientConfig:output_type -> clientpb.WGClientConfig
|
||||
121, // 178: rpcpb.SliverRPC.GenerateUniqueIP:output_type -> clientpb.UniqueWGIP
|
||||
122, // 179: rpcpb.SliverRPC.ImplantProfiles:output_type -> clientpb.ImplantProfiles
|
||||
0, // 180: rpcpb.SliverRPC.DeleteImplantProfile:output_type -> commonpb.Empty
|
||||
23, // 181: rpcpb.SliverRPC.SaveImplantProfile:output_type -> clientpb.ImplantProfile
|
||||
123, // 182: rpcpb.SliverRPC.MsfStage:output_type -> clientpb.MsfStager
|
||||
124, // 183: rpcpb.SliverRPC.ShellcodeRDI:output_type -> clientpb.ShellcodeRDI
|
||||
125, // 184: rpcpb.SliverRPC.GetCompiler:output_type -> clientpb.Compiler
|
||||
126, // 185: rpcpb.SliverRPC.ShellcodeEncoder:output_type -> clientpb.ShellcodeEncode
|
||||
127, // 186: rpcpb.SliverRPC.ShellcodeEncoderMap:output_type -> clientpb.ShellcodeEncoderMap
|
||||
128, // 187: rpcpb.SliverRPC.Websites:output_type -> clientpb.Websites
|
||||
27, // 188: rpcpb.SliverRPC.Website:output_type -> clientpb.Website
|
||||
0, // 189: rpcpb.SliverRPC.WebsiteRemove:output_type -> commonpb.Empty
|
||||
27, // 190: rpcpb.SliverRPC.WebsiteAddContent:output_type -> clientpb.Website
|
||||
27, // 191: rpcpb.SliverRPC.WebsiteUpdateContent:output_type -> clientpb.Website
|
||||
27, // 192: rpcpb.SliverRPC.WebsiteRemoveContent:output_type -> clientpb.Website
|
||||
30, // 193: rpcpb.SliverRPC.Ping:output_type -> sliverpb.Ping
|
||||
129, // 194: rpcpb.SliverRPC.Ps:output_type -> sliverpb.Ps
|
||||
130, // 195: rpcpb.SliverRPC.Terminate:output_type -> sliverpb.Terminate
|
||||
131, // 196: rpcpb.SliverRPC.Ifconfig:output_type -> sliverpb.Ifconfig
|
||||
132, // 197: rpcpb.SliverRPC.Netstat:output_type -> sliverpb.Netstat
|
||||
133, // 198: rpcpb.SliverRPC.Ls:output_type -> sliverpb.Ls
|
||||
134, // 199: rpcpb.SliverRPC.Cd:output_type -> sliverpb.Pwd
|
||||
134, // 200: rpcpb.SliverRPC.Pwd:output_type -> sliverpb.Pwd
|
||||
135, // 201: rpcpb.SliverRPC.Mv:output_type -> sliverpb.Mv
|
||||
136, // 202: rpcpb.SliverRPC.Rm:output_type -> sliverpb.Rm
|
||||
137, // 203: rpcpb.SliverRPC.Mkdir:output_type -> sliverpb.Mkdir
|
||||
138, // 204: rpcpb.SliverRPC.Download:output_type -> sliverpb.Download
|
||||
139, // 205: rpcpb.SliverRPC.Upload:output_type -> sliverpb.Upload
|
||||
140, // 206: rpcpb.SliverRPC.ProcessDump:output_type -> sliverpb.ProcessDump
|
||||
141, // 207: rpcpb.SliverRPC.RunAs:output_type -> sliverpb.RunAs
|
||||
142, // 208: rpcpb.SliverRPC.Impersonate:output_type -> sliverpb.Impersonate
|
||||
143, // 209: rpcpb.SliverRPC.RevToSelf:output_type -> sliverpb.RevToSelf
|
||||
144, // 210: rpcpb.SliverRPC.GetSystem:output_type -> sliverpb.GetSystem
|
||||
145, // 211: rpcpb.SliverRPC.Task:output_type -> sliverpb.Task
|
||||
145, // 212: rpcpb.SliverRPC.Msf:output_type -> sliverpb.Task
|
||||
145, // 213: rpcpb.SliverRPC.MsfRemote:output_type -> sliverpb.Task
|
||||
146, // 214: rpcpb.SliverRPC.ExecuteAssembly:output_type -> sliverpb.ExecuteAssembly
|
||||
147, // 215: rpcpb.SliverRPC.Migrate:output_type -> sliverpb.Migrate
|
||||
148, // 216: rpcpb.SliverRPC.Execute:output_type -> sliverpb.Execute
|
||||
148, // 217: rpcpb.SliverRPC.ExecuteWindows:output_type -> sliverpb.Execute
|
||||
149, // 218: rpcpb.SliverRPC.Sideload:output_type -> sliverpb.Sideload
|
||||
150, // 219: rpcpb.SliverRPC.SpawnDll:output_type -> sliverpb.SpawnDll
|
||||
151, // 220: rpcpb.SliverRPC.Screenshot:output_type -> sliverpb.Screenshot
|
||||
152, // 221: rpcpb.SliverRPC.CurrentTokenOwner:output_type -> sliverpb.CurrentTokenOwner
|
||||
153, // 222: rpcpb.SliverRPC.PivotStartListener:output_type -> sliverpb.PivotListener
|
||||
0, // 223: rpcpb.SliverRPC.PivotStopListener:output_type -> commonpb.Empty
|
||||
154, // 224: rpcpb.SliverRPC.PivotSessionListeners:output_type -> sliverpb.PivotListeners
|
||||
155, // 225: rpcpb.SliverRPC.PivotGraph:output_type -> clientpb.PivotGraph
|
||||
156, // 226: rpcpb.SliverRPC.StartService:output_type -> sliverpb.ServiceInfo
|
||||
156, // 227: rpcpb.SliverRPC.StopService:output_type -> sliverpb.ServiceInfo
|
||||
156, // 228: rpcpb.SliverRPC.RemoveService:output_type -> sliverpb.ServiceInfo
|
||||
157, // 229: rpcpb.SliverRPC.MakeToken:output_type -> sliverpb.MakeToken
|
||||
158, // 230: rpcpb.SliverRPC.GetEnv:output_type -> sliverpb.EnvInfo
|
||||
159, // 231: rpcpb.SliverRPC.SetEnv:output_type -> sliverpb.SetEnv
|
||||
160, // 232: rpcpb.SliverRPC.UnsetEnv:output_type -> sliverpb.UnsetEnv
|
||||
161, // 233: rpcpb.SliverRPC.Backdoor:output_type -> sliverpb.Backdoor
|
||||
162, // 234: rpcpb.SliverRPC.RegistryRead:output_type -> sliverpb.RegistryRead
|
||||
163, // 235: rpcpb.SliverRPC.RegistryWrite:output_type -> sliverpb.RegistryWrite
|
||||
164, // 236: rpcpb.SliverRPC.RegistryCreateKey:output_type -> sliverpb.RegistryCreateKey
|
||||
165, // 237: rpcpb.SliverRPC.RegistryDeleteKey:output_type -> sliverpb.RegistryDeleteKey
|
||||
166, // 238: rpcpb.SliverRPC.RegistryListSubKeys:output_type -> sliverpb.RegistrySubKeyList
|
||||
167, // 239: rpcpb.SliverRPC.RegistryListValues:output_type -> sliverpb.RegistryValuesList
|
||||
168, // 240: rpcpb.SliverRPC.RunSSHCommand:output_type -> sliverpb.SSHCommand
|
||||
169, // 241: rpcpb.SliverRPC.HijackDLL:output_type -> clientpb.DllHijack
|
||||
170, // 242: rpcpb.SliverRPC.GetPrivs:output_type -> sliverpb.GetPrivs
|
||||
171, // 243: rpcpb.SliverRPC.StartRportFwdListener:output_type -> sliverpb.RportFwdListener
|
||||
172, // 244: rpcpb.SliverRPC.GetRportFwdListeners:output_type -> sliverpb.RportFwdListeners
|
||||
171, // 245: rpcpb.SliverRPC.StopRportFwdListener:output_type -> sliverpb.RportFwdListener
|
||||
82, // 246: rpcpb.SliverRPC.OpenSession:output_type -> sliverpb.OpenSession
|
||||
0, // 247: rpcpb.SliverRPC.CloseSession:output_type -> commonpb.Empty
|
||||
173, // 248: rpcpb.SliverRPC.RegisterExtension:output_type -> sliverpb.RegisterExtension
|
||||
174, // 249: rpcpb.SliverRPC.CallExtension:output_type -> sliverpb.CallExtension
|
||||
175, // 250: rpcpb.SliverRPC.ListExtensions:output_type -> sliverpb.ListExtensions
|
||||
176, // 251: rpcpb.SliverRPC.WGStartPortForward:output_type -> sliverpb.WGPortForward
|
||||
176, // 252: rpcpb.SliverRPC.WGStopPortForward:output_type -> sliverpb.WGPortForward
|
||||
177, // 253: rpcpb.SliverRPC.WGStartSocks:output_type -> sliverpb.WGSocks
|
||||
177, // 254: rpcpb.SliverRPC.WGStopSocks:output_type -> sliverpb.WGSocks
|
||||
178, // 255: rpcpb.SliverRPC.WGListForwarders:output_type -> sliverpb.WGTCPForwarders
|
||||
179, // 256: rpcpb.SliverRPC.WGListSocksServers:output_type -> sliverpb.WGSocksServers
|
||||
180, // 257: rpcpb.SliverRPC.Shell:output_type -> sliverpb.Shell
|
||||
181, // 258: rpcpb.SliverRPC.Portfwd:output_type -> sliverpb.Portfwd
|
||||
95, // 259: rpcpb.SliverRPC.CreateSocks:output_type -> sliverpb.Socks
|
||||
0, // 260: rpcpb.SliverRPC.CloseSocks:output_type -> commonpb.Empty
|
||||
96, // 261: rpcpb.SliverRPC.SocksProxy:output_type -> sliverpb.SocksData
|
||||
97, // 262: rpcpb.SliverRPC.CreateTunnel:output_type -> sliverpb.Tunnel
|
||||
0, // 263: rpcpb.SliverRPC.CloseTunnel:output_type -> commonpb.Empty
|
||||
98, // 264: rpcpb.SliverRPC.TunnelData:output_type -> sliverpb.TunnelData
|
||||
20, // 265: rpcpb.SliverRPC.Events:output_type -> clientpb.Event
|
||||
133, // [133:266] is the sub-list for method output_type
|
||||
0, // [0:133] is the sub-list for method input_type
|
||||
0, // 28: rpcpb.SliverRPC.Creds:input_type -> commonpb.Empty
|
||||
13, // 29: rpcpb.SliverRPC.CredsAdd:input_type -> clientpb.Credentials
|
||||
13, // 30: rpcpb.SliverRPC.CredsRm:input_type -> clientpb.Credentials
|
||||
13, // 31: rpcpb.SliverRPC.CredsUpdate:input_type -> clientpb.Credentials
|
||||
14, // 32: rpcpb.SliverRPC.GetCredByID:input_type -> clientpb.Credential
|
||||
14, // 33: rpcpb.SliverRPC.GetCredsByHashType:input_type -> clientpb.Credential
|
||||
14, // 34: rpcpb.SliverRPC.GetPlaintextCredsByHashType:input_type -> clientpb.Credential
|
||||
0, // 35: rpcpb.SliverRPC.Hosts:input_type -> commonpb.Empty
|
||||
15, // 36: rpcpb.SliverRPC.Host:input_type -> clientpb.Host
|
||||
15, // 37: rpcpb.SliverRPC.HostRm:input_type -> clientpb.Host
|
||||
16, // 38: rpcpb.SliverRPC.HostIOCRm:input_type -> clientpb.IOC
|
||||
17, // 39: rpcpb.SliverRPC.Generate:input_type -> clientpb.GenerateReq
|
||||
18, // 40: rpcpb.SliverRPC.GenerateExternal:input_type -> clientpb.ExternalGenerateReq
|
||||
19, // 41: rpcpb.SliverRPC.GenerateExternalSaveBuild:input_type -> clientpb.ExternalImplantBinary
|
||||
20, // 42: rpcpb.SliverRPC.GenerateExternalGetImplantConfig:input_type -> clientpb.ImplantConfig
|
||||
21, // 43: rpcpb.SliverRPC.BuilderRegister:input_type -> clientpb.Builder
|
||||
22, // 44: rpcpb.SliverRPC.BuilderTrigger:input_type -> clientpb.Event
|
||||
0, // 45: rpcpb.SliverRPC.Builders:input_type -> commonpb.Empty
|
||||
23, // 46: rpcpb.SliverRPC.CrackstationRegister:input_type -> clientpb.Crackstation
|
||||
22, // 47: rpcpb.SliverRPC.CrackstationTrigger:input_type -> clientpb.Event
|
||||
0, // 48: rpcpb.SliverRPC.Crackstations:input_type -> commonpb.Empty
|
||||
24, // 49: rpcpb.SliverRPC.Regenerate:input_type -> clientpb.RegenerateReq
|
||||
0, // 50: rpcpb.SliverRPC.ImplantBuilds:input_type -> commonpb.Empty
|
||||
25, // 51: rpcpb.SliverRPC.DeleteImplantBuild:input_type -> clientpb.DeleteReq
|
||||
0, // 52: rpcpb.SliverRPC.Canaries:input_type -> commonpb.Empty
|
||||
0, // 53: rpcpb.SliverRPC.GenerateWGClientConfig:input_type -> commonpb.Empty
|
||||
0, // 54: rpcpb.SliverRPC.GenerateUniqueIP:input_type -> commonpb.Empty
|
||||
0, // 55: rpcpb.SliverRPC.ImplantProfiles:input_type -> commonpb.Empty
|
||||
25, // 56: rpcpb.SliverRPC.DeleteImplantProfile:input_type -> clientpb.DeleteReq
|
||||
26, // 57: rpcpb.SliverRPC.SaveImplantProfile:input_type -> clientpb.ImplantProfile
|
||||
27, // 58: rpcpb.SliverRPC.MsfStage:input_type -> clientpb.MsfStagerReq
|
||||
28, // 59: rpcpb.SliverRPC.ShellcodeRDI:input_type -> clientpb.ShellcodeRDIReq
|
||||
0, // 60: rpcpb.SliverRPC.GetCompiler:input_type -> commonpb.Empty
|
||||
29, // 61: rpcpb.SliverRPC.ShellcodeEncoder:input_type -> clientpb.ShellcodeEncodeReq
|
||||
0, // 62: rpcpb.SliverRPC.ShellcodeEncoderMap:input_type -> commonpb.Empty
|
||||
0, // 63: rpcpb.SliverRPC.Websites:input_type -> commonpb.Empty
|
||||
30, // 64: rpcpb.SliverRPC.Website:input_type -> clientpb.Website
|
||||
30, // 65: rpcpb.SliverRPC.WebsiteRemove:input_type -> clientpb.Website
|
||||
31, // 66: rpcpb.SliverRPC.WebsiteAddContent:input_type -> clientpb.WebsiteAddContent
|
||||
31, // 67: rpcpb.SliverRPC.WebsiteUpdateContent:input_type -> clientpb.WebsiteAddContent
|
||||
32, // 68: rpcpb.SliverRPC.WebsiteRemoveContent:input_type -> clientpb.WebsiteRemoveContent
|
||||
33, // 69: rpcpb.SliverRPC.Ping:input_type -> sliverpb.Ping
|
||||
34, // 70: rpcpb.SliverRPC.Ps:input_type -> sliverpb.PsReq
|
||||
35, // 71: rpcpb.SliverRPC.Terminate:input_type -> sliverpb.TerminateReq
|
||||
36, // 72: rpcpb.SliverRPC.Ifconfig:input_type -> sliverpb.IfconfigReq
|
||||
37, // 73: rpcpb.SliverRPC.Netstat:input_type -> sliverpb.NetstatReq
|
||||
38, // 74: rpcpb.SliverRPC.Ls:input_type -> sliverpb.LsReq
|
||||
39, // 75: rpcpb.SliverRPC.Cd:input_type -> sliverpb.CdReq
|
||||
40, // 76: rpcpb.SliverRPC.Pwd:input_type -> sliverpb.PwdReq
|
||||
41, // 77: rpcpb.SliverRPC.Mv:input_type -> sliverpb.MvReq
|
||||
42, // 78: rpcpb.SliverRPC.Rm:input_type -> sliverpb.RmReq
|
||||
43, // 79: rpcpb.SliverRPC.Mkdir:input_type -> sliverpb.MkdirReq
|
||||
44, // 80: rpcpb.SliverRPC.Download:input_type -> sliverpb.DownloadReq
|
||||
45, // 81: rpcpb.SliverRPC.Upload:input_type -> sliverpb.UploadReq
|
||||
46, // 82: rpcpb.SliverRPC.ProcessDump:input_type -> sliverpb.ProcessDumpReq
|
||||
47, // 83: rpcpb.SliverRPC.RunAs:input_type -> sliverpb.RunAsReq
|
||||
48, // 84: rpcpb.SliverRPC.Impersonate:input_type -> sliverpb.ImpersonateReq
|
||||
49, // 85: rpcpb.SliverRPC.RevToSelf:input_type -> sliverpb.RevToSelfReq
|
||||
50, // 86: rpcpb.SliverRPC.GetSystem:input_type -> clientpb.GetSystemReq
|
||||
51, // 87: rpcpb.SliverRPC.Task:input_type -> sliverpb.TaskReq
|
||||
52, // 88: rpcpb.SliverRPC.Msf:input_type -> clientpb.MSFReq
|
||||
53, // 89: rpcpb.SliverRPC.MsfRemote:input_type -> clientpb.MSFRemoteReq
|
||||
54, // 90: rpcpb.SliverRPC.ExecuteAssembly:input_type -> sliverpb.ExecuteAssemblyReq
|
||||
55, // 91: rpcpb.SliverRPC.Migrate:input_type -> clientpb.MigrateReq
|
||||
56, // 92: rpcpb.SliverRPC.Execute:input_type -> sliverpb.ExecuteReq
|
||||
57, // 93: rpcpb.SliverRPC.ExecuteWindows:input_type -> sliverpb.ExecuteWindowsReq
|
||||
58, // 94: rpcpb.SliverRPC.Sideload:input_type -> sliverpb.SideloadReq
|
||||
59, // 95: rpcpb.SliverRPC.SpawnDll:input_type -> sliverpb.InvokeSpawnDllReq
|
||||
60, // 96: rpcpb.SliverRPC.Screenshot:input_type -> sliverpb.ScreenshotReq
|
||||
61, // 97: rpcpb.SliverRPC.CurrentTokenOwner:input_type -> sliverpb.CurrentTokenOwnerReq
|
||||
62, // 98: rpcpb.SliverRPC.PivotStartListener:input_type -> sliverpb.PivotStartListenerReq
|
||||
63, // 99: rpcpb.SliverRPC.PivotStopListener:input_type -> sliverpb.PivotStopListenerReq
|
||||
64, // 100: rpcpb.SliverRPC.PivotSessionListeners:input_type -> sliverpb.PivotListenersReq
|
||||
0, // 101: rpcpb.SliverRPC.PivotGraph:input_type -> commonpb.Empty
|
||||
65, // 102: rpcpb.SliverRPC.StartService:input_type -> sliverpb.StartServiceReq
|
||||
66, // 103: rpcpb.SliverRPC.StopService:input_type -> sliverpb.StopServiceReq
|
||||
67, // 104: rpcpb.SliverRPC.RemoveService:input_type -> sliverpb.RemoveServiceReq
|
||||
68, // 105: rpcpb.SliverRPC.MakeToken:input_type -> sliverpb.MakeTokenReq
|
||||
69, // 106: rpcpb.SliverRPC.GetEnv:input_type -> sliverpb.EnvReq
|
||||
70, // 107: rpcpb.SliverRPC.SetEnv:input_type -> sliverpb.SetEnvReq
|
||||
71, // 108: rpcpb.SliverRPC.UnsetEnv:input_type -> sliverpb.UnsetEnvReq
|
||||
72, // 109: rpcpb.SliverRPC.Backdoor:input_type -> sliverpb.BackdoorReq
|
||||
73, // 110: rpcpb.SliverRPC.RegistryRead:input_type -> sliverpb.RegistryReadReq
|
||||
74, // 111: rpcpb.SliverRPC.RegistryWrite:input_type -> sliverpb.RegistryWriteReq
|
||||
75, // 112: rpcpb.SliverRPC.RegistryCreateKey:input_type -> sliverpb.RegistryCreateKeyReq
|
||||
76, // 113: rpcpb.SliverRPC.RegistryDeleteKey:input_type -> sliverpb.RegistryDeleteKeyReq
|
||||
77, // 114: rpcpb.SliverRPC.RegistryListSubKeys:input_type -> sliverpb.RegistrySubKeyListReq
|
||||
78, // 115: rpcpb.SliverRPC.RegistryListValues:input_type -> sliverpb.RegistryListValuesReq
|
||||
79, // 116: rpcpb.SliverRPC.RunSSHCommand:input_type -> sliverpb.SSHCommandReq
|
||||
80, // 117: rpcpb.SliverRPC.HijackDLL:input_type -> clientpb.DllHijackReq
|
||||
81, // 118: rpcpb.SliverRPC.GetPrivs:input_type -> sliverpb.GetPrivsReq
|
||||
82, // 119: rpcpb.SliverRPC.StartRportFwdListener:input_type -> sliverpb.RportFwdStartListenerReq
|
||||
83, // 120: rpcpb.SliverRPC.GetRportFwdListeners:input_type -> sliverpb.RportFwdListenersReq
|
||||
84, // 121: rpcpb.SliverRPC.StopRportFwdListener:input_type -> sliverpb.RportFwdStopListenerReq
|
||||
85, // 122: rpcpb.SliverRPC.OpenSession:input_type -> sliverpb.OpenSession
|
||||
86, // 123: rpcpb.SliverRPC.CloseSession:input_type -> sliverpb.CloseSession
|
||||
87, // 124: rpcpb.SliverRPC.RegisterExtension:input_type -> sliverpb.RegisterExtensionReq
|
||||
88, // 125: rpcpb.SliverRPC.CallExtension:input_type -> sliverpb.CallExtensionReq
|
||||
89, // 126: rpcpb.SliverRPC.ListExtensions:input_type -> sliverpb.ListExtensionsReq
|
||||
90, // 127: rpcpb.SliverRPC.WGStartPortForward:input_type -> sliverpb.WGPortForwardStartReq
|
||||
91, // 128: rpcpb.SliverRPC.WGStopPortForward:input_type -> sliverpb.WGPortForwardStopReq
|
||||
92, // 129: rpcpb.SliverRPC.WGStartSocks:input_type -> sliverpb.WGSocksStartReq
|
||||
93, // 130: rpcpb.SliverRPC.WGStopSocks:input_type -> sliverpb.WGSocksStopReq
|
||||
94, // 131: rpcpb.SliverRPC.WGListForwarders:input_type -> sliverpb.WGTCPForwardersReq
|
||||
95, // 132: rpcpb.SliverRPC.WGListSocksServers:input_type -> sliverpb.WGSocksServersReq
|
||||
96, // 133: rpcpb.SliverRPC.Shell:input_type -> sliverpb.ShellReq
|
||||
97, // 134: rpcpb.SliverRPC.Portfwd:input_type -> sliverpb.PortfwdReq
|
||||
98, // 135: rpcpb.SliverRPC.CreateSocks:input_type -> sliverpb.Socks
|
||||
98, // 136: rpcpb.SliverRPC.CloseSocks:input_type -> sliverpb.Socks
|
||||
99, // 137: rpcpb.SliverRPC.SocksProxy:input_type -> sliverpb.SocksData
|
||||
100, // 138: rpcpb.SliverRPC.CreateTunnel:input_type -> sliverpb.Tunnel
|
||||
100, // 139: rpcpb.SliverRPC.CloseTunnel:input_type -> sliverpb.Tunnel
|
||||
101, // 140: rpcpb.SliverRPC.TunnelData:input_type -> sliverpb.TunnelData
|
||||
0, // 141: rpcpb.SliverRPC.Events:input_type -> commonpb.Empty
|
||||
102, // 142: rpcpb.SliverRPC.GetVersion:output_type -> clientpb.Version
|
||||
103, // 143: rpcpb.SliverRPC.GetOperators:output_type -> clientpb.Operators
|
||||
0, // 144: rpcpb.SliverRPC.Kill:output_type -> commonpb.Empty
|
||||
104, // 145: rpcpb.SliverRPC.Reconfigure:output_type -> sliverpb.Reconfigure
|
||||
0, // 146: rpcpb.SliverRPC.Rename:output_type -> commonpb.Empty
|
||||
105, // 147: rpcpb.SliverRPC.GetSessions:output_type -> clientpb.Sessions
|
||||
106, // 148: rpcpb.SliverRPC.GetBeacons:output_type -> clientpb.Beacons
|
||||
4, // 149: rpcpb.SliverRPC.GetBeacon:output_type -> clientpb.Beacon
|
||||
0, // 150: rpcpb.SliverRPC.RmBeacon:output_type -> commonpb.Empty
|
||||
107, // 151: rpcpb.SliverRPC.GetBeaconTasks:output_type -> clientpb.BeaconTasks
|
||||
5, // 152: rpcpb.SliverRPC.GetBeaconTaskContent:output_type -> clientpb.BeaconTask
|
||||
5, // 153: rpcpb.SliverRPC.CancelBeaconTask:output_type -> clientpb.BeaconTask
|
||||
108, // 154: rpcpb.SliverRPC.MonitorStart:output_type -> commonpb.Response
|
||||
0, // 155: rpcpb.SliverRPC.MonitorStop:output_type -> commonpb.Empty
|
||||
109, // 156: rpcpb.SliverRPC.GetJobs:output_type -> clientpb.Jobs
|
||||
110, // 157: rpcpb.SliverRPC.KillJob:output_type -> clientpb.KillJob
|
||||
111, // 158: rpcpb.SliverRPC.StartMTLSListener:output_type -> clientpb.MTLSListener
|
||||
112, // 159: rpcpb.SliverRPC.StartWGListener:output_type -> clientpb.WGListener
|
||||
113, // 160: rpcpb.SliverRPC.StartDNSListener:output_type -> clientpb.DNSListener
|
||||
114, // 161: rpcpb.SliverRPC.StartHTTPSListener:output_type -> clientpb.HTTPListener
|
||||
114, // 162: rpcpb.SliverRPC.StartHTTPListener:output_type -> clientpb.HTTPListener
|
||||
115, // 163: rpcpb.SliverRPC.StartTCPStagerListener:output_type -> clientpb.StagerListener
|
||||
115, // 164: rpcpb.SliverRPC.StartHTTPStagerListener:output_type -> clientpb.StagerListener
|
||||
12, // 165: rpcpb.SliverRPC.LootAdd:output_type -> clientpb.Loot
|
||||
0, // 166: rpcpb.SliverRPC.LootRm:output_type -> commonpb.Empty
|
||||
12, // 167: rpcpb.SliverRPC.LootUpdate:output_type -> clientpb.Loot
|
||||
12, // 168: rpcpb.SliverRPC.LootContent:output_type -> clientpb.Loot
|
||||
116, // 169: rpcpb.SliverRPC.LootAll:output_type -> clientpb.AllLoot
|
||||
13, // 170: rpcpb.SliverRPC.Creds:output_type -> clientpb.Credentials
|
||||
0, // 171: rpcpb.SliverRPC.CredsAdd:output_type -> commonpb.Empty
|
||||
0, // 172: rpcpb.SliverRPC.CredsRm:output_type -> commonpb.Empty
|
||||
0, // 173: rpcpb.SliverRPC.CredsUpdate:output_type -> commonpb.Empty
|
||||
14, // 174: rpcpb.SliverRPC.GetCredByID:output_type -> clientpb.Credential
|
||||
13, // 175: rpcpb.SliverRPC.GetCredsByHashType:output_type -> clientpb.Credentials
|
||||
13, // 176: rpcpb.SliverRPC.GetPlaintextCredsByHashType:output_type -> clientpb.Credentials
|
||||
117, // 177: rpcpb.SliverRPC.Hosts:output_type -> clientpb.AllHosts
|
||||
15, // 178: rpcpb.SliverRPC.Host:output_type -> clientpb.Host
|
||||
0, // 179: rpcpb.SliverRPC.HostRm:output_type -> commonpb.Empty
|
||||
0, // 180: rpcpb.SliverRPC.HostIOCRm:output_type -> commonpb.Empty
|
||||
118, // 181: rpcpb.SliverRPC.Generate:output_type -> clientpb.Generate
|
||||
119, // 182: rpcpb.SliverRPC.GenerateExternal:output_type -> clientpb.ExternalImplantConfig
|
||||
0, // 183: rpcpb.SliverRPC.GenerateExternalSaveBuild:output_type -> commonpb.Empty
|
||||
119, // 184: rpcpb.SliverRPC.GenerateExternalGetImplantConfig:output_type -> clientpb.ExternalImplantConfig
|
||||
22, // 185: rpcpb.SliverRPC.BuilderRegister:output_type -> clientpb.Event
|
||||
0, // 186: rpcpb.SliverRPC.BuilderTrigger:output_type -> commonpb.Empty
|
||||
120, // 187: rpcpb.SliverRPC.Builders:output_type -> clientpb.Builders
|
||||
22, // 188: rpcpb.SliverRPC.CrackstationRegister:output_type -> clientpb.Event
|
||||
0, // 189: rpcpb.SliverRPC.CrackstationTrigger:output_type -> commonpb.Empty
|
||||
121, // 190: rpcpb.SliverRPC.Crackstations:output_type -> clientpb.Crackstations
|
||||
118, // 191: rpcpb.SliverRPC.Regenerate:output_type -> clientpb.Generate
|
||||
122, // 192: rpcpb.SliverRPC.ImplantBuilds:output_type -> clientpb.ImplantBuilds
|
||||
0, // 193: rpcpb.SliverRPC.DeleteImplantBuild:output_type -> commonpb.Empty
|
||||
123, // 194: rpcpb.SliverRPC.Canaries:output_type -> clientpb.Canaries
|
||||
124, // 195: rpcpb.SliverRPC.GenerateWGClientConfig:output_type -> clientpb.WGClientConfig
|
||||
125, // 196: rpcpb.SliverRPC.GenerateUniqueIP:output_type -> clientpb.UniqueWGIP
|
||||
126, // 197: rpcpb.SliverRPC.ImplantProfiles:output_type -> clientpb.ImplantProfiles
|
||||
0, // 198: rpcpb.SliverRPC.DeleteImplantProfile:output_type -> commonpb.Empty
|
||||
26, // 199: rpcpb.SliverRPC.SaveImplantProfile:output_type -> clientpb.ImplantProfile
|
||||
127, // 200: rpcpb.SliverRPC.MsfStage:output_type -> clientpb.MsfStager
|
||||
128, // 201: rpcpb.SliverRPC.ShellcodeRDI:output_type -> clientpb.ShellcodeRDI
|
||||
129, // 202: rpcpb.SliverRPC.GetCompiler:output_type -> clientpb.Compiler
|
||||
130, // 203: rpcpb.SliverRPC.ShellcodeEncoder:output_type -> clientpb.ShellcodeEncode
|
||||
131, // 204: rpcpb.SliverRPC.ShellcodeEncoderMap:output_type -> clientpb.ShellcodeEncoderMap
|
||||
132, // 205: rpcpb.SliverRPC.Websites:output_type -> clientpb.Websites
|
||||
30, // 206: rpcpb.SliverRPC.Website:output_type -> clientpb.Website
|
||||
0, // 207: rpcpb.SliverRPC.WebsiteRemove:output_type -> commonpb.Empty
|
||||
30, // 208: rpcpb.SliverRPC.WebsiteAddContent:output_type -> clientpb.Website
|
||||
30, // 209: rpcpb.SliverRPC.WebsiteUpdateContent:output_type -> clientpb.Website
|
||||
30, // 210: rpcpb.SliverRPC.WebsiteRemoveContent:output_type -> clientpb.Website
|
||||
33, // 211: rpcpb.SliverRPC.Ping:output_type -> sliverpb.Ping
|
||||
133, // 212: rpcpb.SliverRPC.Ps:output_type -> sliverpb.Ps
|
||||
134, // 213: rpcpb.SliverRPC.Terminate:output_type -> sliverpb.Terminate
|
||||
135, // 214: rpcpb.SliverRPC.Ifconfig:output_type -> sliverpb.Ifconfig
|
||||
136, // 215: rpcpb.SliverRPC.Netstat:output_type -> sliverpb.Netstat
|
||||
137, // 216: rpcpb.SliverRPC.Ls:output_type -> sliverpb.Ls
|
||||
138, // 217: rpcpb.SliverRPC.Cd:output_type -> sliverpb.Pwd
|
||||
138, // 218: rpcpb.SliverRPC.Pwd:output_type -> sliverpb.Pwd
|
||||
139, // 219: rpcpb.SliverRPC.Mv:output_type -> sliverpb.Mv
|
||||
140, // 220: rpcpb.SliverRPC.Rm:output_type -> sliverpb.Rm
|
||||
141, // 221: rpcpb.SliverRPC.Mkdir:output_type -> sliverpb.Mkdir
|
||||
142, // 222: rpcpb.SliverRPC.Download:output_type -> sliverpb.Download
|
||||
143, // 223: rpcpb.SliverRPC.Upload:output_type -> sliverpb.Upload
|
||||
144, // 224: rpcpb.SliverRPC.ProcessDump:output_type -> sliverpb.ProcessDump
|
||||
145, // 225: rpcpb.SliverRPC.RunAs:output_type -> sliverpb.RunAs
|
||||
146, // 226: rpcpb.SliverRPC.Impersonate:output_type -> sliverpb.Impersonate
|
||||
147, // 227: rpcpb.SliverRPC.RevToSelf:output_type -> sliverpb.RevToSelf
|
||||
148, // 228: rpcpb.SliverRPC.GetSystem:output_type -> sliverpb.GetSystem
|
||||
149, // 229: rpcpb.SliverRPC.Task:output_type -> sliverpb.Task
|
||||
149, // 230: rpcpb.SliverRPC.Msf:output_type -> sliverpb.Task
|
||||
149, // 231: rpcpb.SliverRPC.MsfRemote:output_type -> sliverpb.Task
|
||||
150, // 232: rpcpb.SliverRPC.ExecuteAssembly:output_type -> sliverpb.ExecuteAssembly
|
||||
151, // 233: rpcpb.SliverRPC.Migrate:output_type -> sliverpb.Migrate
|
||||
152, // 234: rpcpb.SliverRPC.Execute:output_type -> sliverpb.Execute
|
||||
152, // 235: rpcpb.SliverRPC.ExecuteWindows:output_type -> sliverpb.Execute
|
||||
153, // 236: rpcpb.SliverRPC.Sideload:output_type -> sliverpb.Sideload
|
||||
154, // 237: rpcpb.SliverRPC.SpawnDll:output_type -> sliverpb.SpawnDll
|
||||
155, // 238: rpcpb.SliverRPC.Screenshot:output_type -> sliverpb.Screenshot
|
||||
156, // 239: rpcpb.SliverRPC.CurrentTokenOwner:output_type -> sliverpb.CurrentTokenOwner
|
||||
157, // 240: rpcpb.SliverRPC.PivotStartListener:output_type -> sliverpb.PivotListener
|
||||
0, // 241: rpcpb.SliverRPC.PivotStopListener:output_type -> commonpb.Empty
|
||||
158, // 242: rpcpb.SliverRPC.PivotSessionListeners:output_type -> sliverpb.PivotListeners
|
||||
159, // 243: rpcpb.SliverRPC.PivotGraph:output_type -> clientpb.PivotGraph
|
||||
160, // 244: rpcpb.SliverRPC.StartService:output_type -> sliverpb.ServiceInfo
|
||||
160, // 245: rpcpb.SliverRPC.StopService:output_type -> sliverpb.ServiceInfo
|
||||
160, // 246: rpcpb.SliverRPC.RemoveService:output_type -> sliverpb.ServiceInfo
|
||||
161, // 247: rpcpb.SliverRPC.MakeToken:output_type -> sliverpb.MakeToken
|
||||
162, // 248: rpcpb.SliverRPC.GetEnv:output_type -> sliverpb.EnvInfo
|
||||
163, // 249: rpcpb.SliverRPC.SetEnv:output_type -> sliverpb.SetEnv
|
||||
164, // 250: rpcpb.SliverRPC.UnsetEnv:output_type -> sliverpb.UnsetEnv
|
||||
165, // 251: rpcpb.SliverRPC.Backdoor:output_type -> sliverpb.Backdoor
|
||||
166, // 252: rpcpb.SliverRPC.RegistryRead:output_type -> sliverpb.RegistryRead
|
||||
167, // 253: rpcpb.SliverRPC.RegistryWrite:output_type -> sliverpb.RegistryWrite
|
||||
168, // 254: rpcpb.SliverRPC.RegistryCreateKey:output_type -> sliverpb.RegistryCreateKey
|
||||
169, // 255: rpcpb.SliverRPC.RegistryDeleteKey:output_type -> sliverpb.RegistryDeleteKey
|
||||
170, // 256: rpcpb.SliverRPC.RegistryListSubKeys:output_type -> sliverpb.RegistrySubKeyList
|
||||
171, // 257: rpcpb.SliverRPC.RegistryListValues:output_type -> sliverpb.RegistryValuesList
|
||||
172, // 258: rpcpb.SliverRPC.RunSSHCommand:output_type -> sliverpb.SSHCommand
|
||||
173, // 259: rpcpb.SliverRPC.HijackDLL:output_type -> clientpb.DllHijack
|
||||
174, // 260: rpcpb.SliverRPC.GetPrivs:output_type -> sliverpb.GetPrivs
|
||||
175, // 261: rpcpb.SliverRPC.StartRportFwdListener:output_type -> sliverpb.RportFwdListener
|
||||
176, // 262: rpcpb.SliverRPC.GetRportFwdListeners:output_type -> sliverpb.RportFwdListeners
|
||||
175, // 263: rpcpb.SliverRPC.StopRportFwdListener:output_type -> sliverpb.RportFwdListener
|
||||
85, // 264: rpcpb.SliverRPC.OpenSession:output_type -> sliverpb.OpenSession
|
||||
0, // 265: rpcpb.SliverRPC.CloseSession:output_type -> commonpb.Empty
|
||||
177, // 266: rpcpb.SliverRPC.RegisterExtension:output_type -> sliverpb.RegisterExtension
|
||||
178, // 267: rpcpb.SliverRPC.CallExtension:output_type -> sliverpb.CallExtension
|
||||
179, // 268: rpcpb.SliverRPC.ListExtensions:output_type -> sliverpb.ListExtensions
|
||||
180, // 269: rpcpb.SliverRPC.WGStartPortForward:output_type -> sliverpb.WGPortForward
|
||||
180, // 270: rpcpb.SliverRPC.WGStopPortForward:output_type -> sliverpb.WGPortForward
|
||||
181, // 271: rpcpb.SliverRPC.WGStartSocks:output_type -> sliverpb.WGSocks
|
||||
181, // 272: rpcpb.SliverRPC.WGStopSocks:output_type -> sliverpb.WGSocks
|
||||
182, // 273: rpcpb.SliverRPC.WGListForwarders:output_type -> sliverpb.WGTCPForwarders
|
||||
183, // 274: rpcpb.SliverRPC.WGListSocksServers:output_type -> sliverpb.WGSocksServers
|
||||
184, // 275: rpcpb.SliverRPC.Shell:output_type -> sliverpb.Shell
|
||||
185, // 276: rpcpb.SliverRPC.Portfwd:output_type -> sliverpb.Portfwd
|
||||
98, // 277: rpcpb.SliverRPC.CreateSocks:output_type -> sliverpb.Socks
|
||||
0, // 278: rpcpb.SliverRPC.CloseSocks:output_type -> commonpb.Empty
|
||||
99, // 279: rpcpb.SliverRPC.SocksProxy:output_type -> sliverpb.SocksData
|
||||
100, // 280: rpcpb.SliverRPC.CreateTunnel:output_type -> sliverpb.Tunnel
|
||||
0, // 281: rpcpb.SliverRPC.CloseTunnel:output_type -> commonpb.Empty
|
||||
101, // 282: rpcpb.SliverRPC.TunnelData:output_type -> sliverpb.TunnelData
|
||||
22, // 283: rpcpb.SliverRPC.Events:output_type -> clientpb.Event
|
||||
142, // [142:284] is the sub-list for method output_type
|
||||
0, // [0:142] is the sub-list for method input_type
|
||||
0, // [0:0] is the sub-list for extension type_name
|
||||
0, // [0:0] is the sub-list for extension extendee
|
||||
0, // [0:0] is the sub-list for field type_name
|
||||
|
||||
@@ -56,7 +56,15 @@ service SliverRPC {
|
||||
rpc LootUpdate(clientpb.Loot) returns(clientpb.Loot);
|
||||
rpc LootContent(clientpb.Loot) returns(clientpb.Loot);
|
||||
rpc LootAll(commonpb.Empty) returns(clientpb.AllLoot);
|
||||
rpc LootAllOf(clientpb.Loot) returns(clientpb.AllLoot);
|
||||
|
||||
// *** Creds ***
|
||||
rpc Creds(commonpb.Empty) returns(clientpb.Credentials);
|
||||
rpc CredsAdd(clientpb.Credentials) returns(commonpb.Empty);
|
||||
rpc CredsRm(clientpb.Credentials) returns(commonpb.Empty);
|
||||
rpc CredsUpdate(clientpb.Credentials) returns(commonpb.Empty);
|
||||
rpc GetCredByID(clientpb.Credential) returns(clientpb.Credential);
|
||||
rpc GetCredsByHashType(clientpb.Credential) returns(clientpb.Credentials);
|
||||
rpc GetPlaintextCredsByHashType(clientpb.Credential) returns(clientpb.Credentials);
|
||||
|
||||
// *** Hosts ***
|
||||
rpc Hosts(commonpb.Empty) returns(clientpb.AllHosts);
|
||||
@@ -69,12 +77,17 @@ service SliverRPC {
|
||||
rpc GenerateExternal(clientpb.ExternalGenerateReq) returns (clientpb.ExternalImplantConfig);
|
||||
rpc GenerateExternalSaveBuild(clientpb.ExternalImplantBinary) returns (commonpb.Empty);
|
||||
rpc GenerateExternalGetImplantConfig(clientpb.ImplantConfig) returns (clientpb.ExternalImplantConfig);
|
||||
// rpc BuilderRegister(clientpb.Builder) returns (commonpb.Empty);
|
||||
|
||||
|
||||
// *** Builders ***
|
||||
rpc BuilderRegister(clientpb.Builder) returns (stream clientpb.Event);
|
||||
rpc BuilderTrigger(clientpb.Event) returns (commonpb.Empty);
|
||||
rpc Builders(commonpb.Empty) returns (clientpb.Builders);
|
||||
|
||||
// *** Crackstation ***
|
||||
rpc CrackstationRegister(clientpb.Crackstation) returns (stream clientpb.Event);
|
||||
rpc CrackstationTrigger(clientpb.Event) returns (commonpb.Empty);
|
||||
rpc Crackstations(commonpb.Empty) returns (clientpb.Crackstations);
|
||||
|
||||
rpc Regenerate(clientpb.RegenerateReq) returns (clientpb.Generate);
|
||||
rpc ImplantBuilds(commonpb.Empty) returns (clientpb.ImplantBuilds);
|
||||
rpc DeleteImplantBuild(clientpb.DeleteReq) returns (commonpb.Empty);
|
||||
|
||||
@@ -59,7 +59,14 @@ type SliverRPCClient interface {
|
||||
LootUpdate(ctx context.Context, in *clientpb.Loot, opts ...grpc.CallOption) (*clientpb.Loot, error)
|
||||
LootContent(ctx context.Context, in *clientpb.Loot, opts ...grpc.CallOption) (*clientpb.Loot, error)
|
||||
LootAll(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.AllLoot, error)
|
||||
LootAllOf(ctx context.Context, in *clientpb.Loot, opts ...grpc.CallOption) (*clientpb.AllLoot, error)
|
||||
// *** Creds ***
|
||||
Creds(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.Credentials, error)
|
||||
CredsAdd(ctx context.Context, in *clientpb.Credentials, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
CredsRm(ctx context.Context, in *clientpb.Credentials, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
CredsUpdate(ctx context.Context, in *clientpb.Credentials, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
GetCredByID(ctx context.Context, in *clientpb.Credential, opts ...grpc.CallOption) (*clientpb.Credential, error)
|
||||
GetCredsByHashType(ctx context.Context, in *clientpb.Credential, opts ...grpc.CallOption) (*clientpb.Credentials, error)
|
||||
GetPlaintextCredsByHashType(ctx context.Context, in *clientpb.Credential, opts ...grpc.CallOption) (*clientpb.Credentials, error)
|
||||
// *** Hosts ***
|
||||
Hosts(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.AllHosts, error)
|
||||
Host(ctx context.Context, in *clientpb.Host, opts ...grpc.CallOption) (*clientpb.Host, error)
|
||||
@@ -70,9 +77,14 @@ type SliverRPCClient interface {
|
||||
GenerateExternal(ctx context.Context, in *clientpb.ExternalGenerateReq, opts ...grpc.CallOption) (*clientpb.ExternalImplantConfig, error)
|
||||
GenerateExternalSaveBuild(ctx context.Context, in *clientpb.ExternalImplantBinary, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
GenerateExternalGetImplantConfig(ctx context.Context, in *clientpb.ImplantConfig, opts ...grpc.CallOption) (*clientpb.ExternalImplantConfig, error)
|
||||
// *** Builders ***
|
||||
BuilderRegister(ctx context.Context, in *clientpb.Builder, opts ...grpc.CallOption) (SliverRPC_BuilderRegisterClient, error)
|
||||
BuilderTrigger(ctx context.Context, in *clientpb.Event, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
Builders(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.Builders, error)
|
||||
// *** Crackstation ***
|
||||
CrackstationRegister(ctx context.Context, in *clientpb.Crackstation, opts ...grpc.CallOption) (SliverRPC_CrackstationRegisterClient, error)
|
||||
CrackstationTrigger(ctx context.Context, in *clientpb.Event, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
Crackstations(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.Crackstations, error)
|
||||
Regenerate(ctx context.Context, in *clientpb.RegenerateReq, opts ...grpc.CallOption) (*clientpb.Generate, error)
|
||||
ImplantBuilds(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.ImplantBuilds, error)
|
||||
DeleteImplantBuild(ctx context.Context, in *clientpb.DeleteReq, opts ...grpc.CallOption) (*commonpb.Empty, error)
|
||||
@@ -438,9 +450,63 @@ func (c *sliverRPCClient) LootAll(ctx context.Context, in *commonpb.Empty, opts
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) LootAllOf(ctx context.Context, in *clientpb.Loot, opts ...grpc.CallOption) (*clientpb.AllLoot, error) {
|
||||
out := new(clientpb.AllLoot)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/LootAllOf", in, out, opts...)
|
||||
func (c *sliverRPCClient) Creds(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.Credentials, error) {
|
||||
out := new(clientpb.Credentials)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/Creds", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) CredsAdd(ctx context.Context, in *clientpb.Credentials, opts ...grpc.CallOption) (*commonpb.Empty, error) {
|
||||
out := new(commonpb.Empty)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/CredsAdd", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) CredsRm(ctx context.Context, in *clientpb.Credentials, opts ...grpc.CallOption) (*commonpb.Empty, error) {
|
||||
out := new(commonpb.Empty)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/CredsRm", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) CredsUpdate(ctx context.Context, in *clientpb.Credentials, opts ...grpc.CallOption) (*commonpb.Empty, error) {
|
||||
out := new(commonpb.Empty)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/CredsUpdate", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) GetCredByID(ctx context.Context, in *clientpb.Credential, opts ...grpc.CallOption) (*clientpb.Credential, error) {
|
||||
out := new(clientpb.Credential)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/GetCredByID", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) GetCredsByHashType(ctx context.Context, in *clientpb.Credential, opts ...grpc.CallOption) (*clientpb.Credentials, error) {
|
||||
out := new(clientpb.Credentials)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/GetCredsByHashType", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) GetPlaintextCredsByHashType(ctx context.Context, in *clientpb.Credential, opts ...grpc.CallOption) (*clientpb.Credentials, error) {
|
||||
out := new(clientpb.Credentials)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/GetPlaintextCredsByHashType", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -569,6 +635,56 @@ func (c *sliverRPCClient) Builders(ctx context.Context, in *commonpb.Empty, opts
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) CrackstationRegister(ctx context.Context, in *clientpb.Crackstation, opts ...grpc.CallOption) (SliverRPC_CrackstationRegisterClient, error) {
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[1], "/rpcpb.SliverRPC/CrackstationRegister", opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
x := &sliverRPCCrackstationRegisterClient{stream}
|
||||
if err := x.ClientStream.SendMsg(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := x.ClientStream.CloseSend(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return x, nil
|
||||
}
|
||||
|
||||
type SliverRPC_CrackstationRegisterClient interface {
|
||||
Recv() (*clientpb.Event, error)
|
||||
grpc.ClientStream
|
||||
}
|
||||
|
||||
type sliverRPCCrackstationRegisterClient struct {
|
||||
grpc.ClientStream
|
||||
}
|
||||
|
||||
func (x *sliverRPCCrackstationRegisterClient) Recv() (*clientpb.Event, error) {
|
||||
m := new(clientpb.Event)
|
||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) CrackstationTrigger(ctx context.Context, in *clientpb.Event, opts ...grpc.CallOption) (*commonpb.Empty, error) {
|
||||
out := new(commonpb.Empty)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/CrackstationTrigger", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) Crackstations(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*clientpb.Crackstations, error) {
|
||||
out := new(clientpb.Crackstations)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/Crackstations", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) Regenerate(ctx context.Context, in *clientpb.RegenerateReq, opts ...grpc.CallOption) (*clientpb.Generate, error) {
|
||||
out := new(clientpb.Generate)
|
||||
err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/Regenerate", in, out, opts...)
|
||||
@@ -1362,7 +1478,7 @@ func (c *sliverRPCClient) CloseSocks(ctx context.Context, in *sliverpb.Socks, op
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) SocksProxy(ctx context.Context, opts ...grpc.CallOption) (SliverRPC_SocksProxyClient, error) {
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[1], "/rpcpb.SliverRPC/SocksProxy", opts...)
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[2], "/rpcpb.SliverRPC/SocksProxy", opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1411,7 +1527,7 @@ func (c *sliverRPCClient) CloseTunnel(ctx context.Context, in *sliverpb.Tunnel,
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) TunnelData(ctx context.Context, opts ...grpc.CallOption) (SliverRPC_TunnelDataClient, error) {
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[2], "/rpcpb.SliverRPC/TunnelData", opts...)
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[3], "/rpcpb.SliverRPC/TunnelData", opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1442,7 +1558,7 @@ func (x *sliverRPCTunnelDataClient) Recv() (*sliverpb.TunnelData, error) {
|
||||
}
|
||||
|
||||
func (c *sliverRPCClient) Events(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (SliverRPC_EventsClient, error) {
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[3], "/rpcpb.SliverRPC/Events", opts...)
|
||||
stream, err := c.cc.NewStream(ctx, &SliverRPC_ServiceDesc.Streams[4], "/rpcpb.SliverRPC/Events", opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1515,7 +1631,14 @@ type SliverRPCServer interface {
|
||||
LootUpdate(context.Context, *clientpb.Loot) (*clientpb.Loot, error)
|
||||
LootContent(context.Context, *clientpb.Loot) (*clientpb.Loot, error)
|
||||
LootAll(context.Context, *commonpb.Empty) (*clientpb.AllLoot, error)
|
||||
LootAllOf(context.Context, *clientpb.Loot) (*clientpb.AllLoot, error)
|
||||
// *** Creds ***
|
||||
Creds(context.Context, *commonpb.Empty) (*clientpb.Credentials, error)
|
||||
CredsAdd(context.Context, *clientpb.Credentials) (*commonpb.Empty, error)
|
||||
CredsRm(context.Context, *clientpb.Credentials) (*commonpb.Empty, error)
|
||||
CredsUpdate(context.Context, *clientpb.Credentials) (*commonpb.Empty, error)
|
||||
GetCredByID(context.Context, *clientpb.Credential) (*clientpb.Credential, error)
|
||||
GetCredsByHashType(context.Context, *clientpb.Credential) (*clientpb.Credentials, error)
|
||||
GetPlaintextCredsByHashType(context.Context, *clientpb.Credential) (*clientpb.Credentials, error)
|
||||
// *** Hosts ***
|
||||
Hosts(context.Context, *commonpb.Empty) (*clientpb.AllHosts, error)
|
||||
Host(context.Context, *clientpb.Host) (*clientpb.Host, error)
|
||||
@@ -1526,9 +1649,14 @@ type SliverRPCServer interface {
|
||||
GenerateExternal(context.Context, *clientpb.ExternalGenerateReq) (*clientpb.ExternalImplantConfig, error)
|
||||
GenerateExternalSaveBuild(context.Context, *clientpb.ExternalImplantBinary) (*commonpb.Empty, error)
|
||||
GenerateExternalGetImplantConfig(context.Context, *clientpb.ImplantConfig) (*clientpb.ExternalImplantConfig, error)
|
||||
// *** Builders ***
|
||||
BuilderRegister(*clientpb.Builder, SliverRPC_BuilderRegisterServer) error
|
||||
BuilderTrigger(context.Context, *clientpb.Event) (*commonpb.Empty, error)
|
||||
Builders(context.Context, *commonpb.Empty) (*clientpb.Builders, error)
|
||||
// *** Crackstation ***
|
||||
CrackstationRegister(*clientpb.Crackstation, SliverRPC_CrackstationRegisterServer) error
|
||||
CrackstationTrigger(context.Context, *clientpb.Event) (*commonpb.Empty, error)
|
||||
Crackstations(context.Context, *commonpb.Empty) (*clientpb.Crackstations, error)
|
||||
Regenerate(context.Context, *clientpb.RegenerateReq) (*clientpb.Generate, error)
|
||||
ImplantBuilds(context.Context, *commonpb.Empty) (*clientpb.ImplantBuilds, error)
|
||||
DeleteImplantBuild(context.Context, *clientpb.DeleteReq) (*commonpb.Empty, error)
|
||||
@@ -1723,8 +1851,26 @@ func (UnimplementedSliverRPCServer) LootContent(context.Context, *clientpb.Loot)
|
||||
func (UnimplementedSliverRPCServer) LootAll(context.Context, *commonpb.Empty) (*clientpb.AllLoot, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method LootAll not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) LootAllOf(context.Context, *clientpb.Loot) (*clientpb.AllLoot, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method LootAllOf not implemented")
|
||||
func (UnimplementedSliverRPCServer) Creds(context.Context, *commonpb.Empty) (*clientpb.Credentials, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Creds not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) CredsAdd(context.Context, *clientpb.Credentials) (*commonpb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CredsAdd not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) CredsRm(context.Context, *clientpb.Credentials) (*commonpb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CredsRm not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) CredsUpdate(context.Context, *clientpb.Credentials) (*commonpb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CredsUpdate not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) GetCredByID(context.Context, *clientpb.Credential) (*clientpb.Credential, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetCredByID not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) GetCredsByHashType(context.Context, *clientpb.Credential) (*clientpb.Credentials, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetCredsByHashType not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) GetPlaintextCredsByHashType(context.Context, *clientpb.Credential) (*clientpb.Credentials, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetPlaintextCredsByHashType not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) Hosts(context.Context, *commonpb.Empty) (*clientpb.AllHosts, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Hosts not implemented")
|
||||
@@ -1759,6 +1905,15 @@ func (UnimplementedSliverRPCServer) BuilderTrigger(context.Context, *clientpb.Ev
|
||||
func (UnimplementedSliverRPCServer) Builders(context.Context, *commonpb.Empty) (*clientpb.Builders, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Builders not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) CrackstationRegister(*clientpb.Crackstation, SliverRPC_CrackstationRegisterServer) error {
|
||||
return status.Errorf(codes.Unimplemented, "method CrackstationRegister not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) CrackstationTrigger(context.Context, *clientpb.Event) (*commonpb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CrackstationTrigger not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) Crackstations(context.Context, *commonpb.Empty) (*clientpb.Crackstations, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Crackstations not implemented")
|
||||
}
|
||||
func (UnimplementedSliverRPCServer) Regenerate(context.Context, *clientpb.RegenerateReq) (*clientpb.Generate, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Regenerate not implemented")
|
||||
}
|
||||
@@ -2555,20 +2710,128 @@ func _SliverRPC_LootAll_Handler(srv interface{}, ctx context.Context, dec func(i
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_LootAllOf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Loot)
|
||||
func _SliverRPC_Creds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(commonpb.Empty)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).LootAllOf(ctx, in)
|
||||
return srv.(SliverRPCServer).Creds(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/LootAllOf",
|
||||
FullMethod: "/rpcpb.SliverRPC/Creds",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).LootAllOf(ctx, req.(*clientpb.Loot))
|
||||
return srv.(SliverRPCServer).Creds(ctx, req.(*commonpb.Empty))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_CredsAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Credentials)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).CredsAdd(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/CredsAdd",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).CredsAdd(ctx, req.(*clientpb.Credentials))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_CredsRm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Credentials)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).CredsRm(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/CredsRm",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).CredsRm(ctx, req.(*clientpb.Credentials))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_CredsUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Credentials)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).CredsUpdate(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/CredsUpdate",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).CredsUpdate(ctx, req.(*clientpb.Credentials))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_GetCredByID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Credential)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).GetCredByID(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/GetCredByID",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).GetCredByID(ctx, req.(*clientpb.Credential))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_GetCredsByHashType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Credential)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).GetCredsByHashType(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/GetCredsByHashType",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).GetCredsByHashType(ctx, req.(*clientpb.Credential))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_GetPlaintextCredsByHashType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Credential)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).GetPlaintextCredsByHashType(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/GetPlaintextCredsByHashType",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).GetPlaintextCredsByHashType(ctx, req.(*clientpb.Credential))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
@@ -2774,6 +3037,63 @@ func _SliverRPC_Builders_Handler(srv interface{}, ctx context.Context, dec func(
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_CrackstationRegister_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||
m := new(clientpb.Crackstation)
|
||||
if err := stream.RecvMsg(m); err != nil {
|
||||
return err
|
||||
}
|
||||
return srv.(SliverRPCServer).CrackstationRegister(m, &sliverRPCCrackstationRegisterServer{stream})
|
||||
}
|
||||
|
||||
type SliverRPC_CrackstationRegisterServer interface {
|
||||
Send(*clientpb.Event) error
|
||||
grpc.ServerStream
|
||||
}
|
||||
|
||||
type sliverRPCCrackstationRegisterServer struct {
|
||||
grpc.ServerStream
|
||||
}
|
||||
|
||||
func (x *sliverRPCCrackstationRegisterServer) Send(m *clientpb.Event) error {
|
||||
return x.ServerStream.SendMsg(m)
|
||||
}
|
||||
|
||||
func _SliverRPC_CrackstationTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.Event)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).CrackstationTrigger(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/CrackstationTrigger",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).CrackstationTrigger(ctx, req.(*clientpb.Event))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_Crackstations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(commonpb.Empty)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(SliverRPCServer).Crackstations(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/rpcpb.SliverRPC/Crackstations",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(SliverRPCServer).Crackstations(ctx, req.(*commonpb.Empty))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _SliverRPC_Regenerate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(clientpb.RegenerateReq)
|
||||
if err := dec(in); err != nil {
|
||||
@@ -4587,8 +4907,32 @@ var SliverRPC_ServiceDesc = grpc.ServiceDesc{
|
||||
Handler: _SliverRPC_LootAll_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "LootAllOf",
|
||||
Handler: _SliverRPC_LootAllOf_Handler,
|
||||
MethodName: "Creds",
|
||||
Handler: _SliverRPC_Creds_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CredsAdd",
|
||||
Handler: _SliverRPC_CredsAdd_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CredsRm",
|
||||
Handler: _SliverRPC_CredsRm_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CredsUpdate",
|
||||
Handler: _SliverRPC_CredsUpdate_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetCredByID",
|
||||
Handler: _SliverRPC_GetCredByID_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetCredsByHashType",
|
||||
Handler: _SliverRPC_GetCredsByHashType_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetPlaintextCredsByHashType",
|
||||
Handler: _SliverRPC_GetPlaintextCredsByHashType_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Hosts",
|
||||
@@ -4630,6 +4974,14 @@ var SliverRPC_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "Builders",
|
||||
Handler: _SliverRPC_Builders_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CrackstationTrigger",
|
||||
Handler: _SliverRPC_CrackstationTrigger_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Crackstations",
|
||||
Handler: _SliverRPC_Crackstations_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Regenerate",
|
||||
Handler: _SliverRPC_Regenerate_Handler,
|
||||
@@ -4997,6 +5349,11 @@ var SliverRPC_ServiceDesc = grpc.ServiceDesc{
|
||||
Handler: _SliverRPC_BuilderRegister_Handler,
|
||||
ServerStreams: true,
|
||||
},
|
||||
{
|
||||
StreamName: "CrackstationRegister",
|
||||
Handler: _SliverRPC_CrackstationRegister_Handler,
|
||||
ServerStreams: true,
|
||||
},
|
||||
{
|
||||
StreamName: "SocksProxy",
|
||||
Handler: _SliverRPC_SocksProxy_Handler,
|
||||
|
||||
@@ -41,7 +41,10 @@ func AddBuilder(builder *clientpb.Builder) error {
|
||||
}
|
||||
|
||||
func GetBuilder(builderName string) *clientpb.Builder {
|
||||
builder, _ := builders.Load(builderName)
|
||||
builder, ok := builders.Load(builderName)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return builder.(*clientpb.Builder)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package core
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sync"
|
||||
|
||||
consts "github.com/bishopfox/sliver/client/constants"
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
)
|
||||
|
||||
var (
|
||||
// ClientID -> *clientpb.CrackStation
|
||||
crackers = &sync.Map{}
|
||||
|
||||
ErrDuplicateExternalCrackerName = errors.New("cracker name must be unique, this name is already in use")
|
||||
)
|
||||
|
||||
func AddCrackstation(cracker *clientpb.Crackstation) error {
|
||||
_, loaded := crackers.LoadOrStore(cracker.Name, cracker)
|
||||
if loaded {
|
||||
return ErrDuplicateExternalCrackerName
|
||||
}
|
||||
EventBroker.Publish(Event{
|
||||
EventType: consts.CrackstationConnected,
|
||||
Data: []byte(cracker.Name),
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetCrackstation(crackerName string) *clientpb.Crackstation {
|
||||
cracker, ok := crackers.Load(crackerName)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return cracker.(*clientpb.Crackstation)
|
||||
}
|
||||
|
||||
func AllCrackstations() []*clientpb.Crackstation {
|
||||
externalCrackers := []*clientpb.Crackstation{}
|
||||
crackers.Range(func(key, value interface{}) bool {
|
||||
externalCrackers = append(externalCrackers, value.(*clientpb.Crackstation))
|
||||
return true
|
||||
})
|
||||
return externalCrackers
|
||||
}
|
||||
|
||||
func RemoveCrackstation(crackerName string) {
|
||||
_, loaded := crackers.LoadAndDelete(crackerName)
|
||||
if loaded {
|
||||
EventBroker.Publish(Event{
|
||||
EventType: consts.CrackstationDisconnected,
|
||||
Data: []byte(crackerName),
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -25,8 +25,10 @@ package db
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/server/db/models"
|
||||
"github.com/gofrs/uuid"
|
||||
"gorm.io/gorm"
|
||||
@@ -530,3 +532,57 @@ func DeleteKeyValue(key string, value string) error {
|
||||
Key: key,
|
||||
}).Error
|
||||
}
|
||||
|
||||
// CrackstationByHostUUID - Get crackstation by the session's reported HostUUID
|
||||
func CrackstationByName(name string) (*models.Crackstation, error) {
|
||||
if len(name) < 1 {
|
||||
return nil, ErrRecordNotFound
|
||||
}
|
||||
crackstation := models.Crackstation{}
|
||||
err := Session().Where(
|
||||
&models.Crackstation{ID: name},
|
||||
).Preload("Tasks").First(&crackstation).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &crackstation, nil
|
||||
}
|
||||
|
||||
// CredentialsByHashType
|
||||
func CredentialsByHashType(hashType clientpb.HashType) ([]*models.Credential, error) {
|
||||
credentials := []*models.Credential{}
|
||||
err := Session().Where(&models.Credential{
|
||||
HashType: int32(hashType),
|
||||
}).Find(&credentials).Error
|
||||
return credentials, err
|
||||
}
|
||||
|
||||
// PlaintextCredentials
|
||||
func PlaintextCredentialsByHashType(hashType clientpb.HashType) ([]*models.Credential, error) {
|
||||
credentials := []*models.Credential{}
|
||||
err := Session().Where(&models.Credential{
|
||||
HashType: int32(hashType),
|
||||
}).Not("plaintext = ?", "").Find(&credentials).Error
|
||||
return credentials, err
|
||||
}
|
||||
|
||||
// CredentialsByID
|
||||
func CredentialByID(id string) (*models.Credential, error) {
|
||||
credential := &models.Credential{}
|
||||
credID := uuid.FromStringOrNil(id)
|
||||
if credID != uuid.Nil {
|
||||
err := Session().Where(&models.Credential{ID: credID}).First(&credential).Error
|
||||
return credential, err
|
||||
}
|
||||
credentials := []*models.Credential{}
|
||||
err := Session().Where(&models.Credential{}).Find(&credentials).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, cred := range credentials {
|
||||
if strings.HasPrefix(cred.ID.String(), id) {
|
||||
return cred, nil
|
||||
}
|
||||
}
|
||||
return nil, ErrRecordNotFound
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package models
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/gofrs/uuid"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Crackstation - History of crackstation jobs
|
||||
type Crackstation struct {
|
||||
// ID = crackstation name
|
||||
ID string `gorm:"primaryKey;->"`
|
||||
CreatedAt time.Time `gorm:"->;<-:create;"`
|
||||
Tasks []CrackTask
|
||||
}
|
||||
|
||||
// BeforeCreate - GORM hook
|
||||
func (c *Crackstation) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
c.CreatedAt = time.Now()
|
||||
return nil
|
||||
}
|
||||
|
||||
type CrackTask struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;->;<-:create;type:uuid;"`
|
||||
CrackstationID string
|
||||
CreatedAt time.Time `gorm:"->;<-:create;"`
|
||||
StartedAt time.Time
|
||||
FinishedAt time.Time
|
||||
Status string
|
||||
|
||||
Data []byte // protobuf
|
||||
}
|
||||
|
||||
func (c *CrackTask) ToProtobuf() *clientpb.CrackTask {
|
||||
task := &clientpb.CrackTask{}
|
||||
proto.Unmarshal(c.Data, task)
|
||||
task.CrackTaskCreatedAt = c.CreatedAt.Unix()
|
||||
task.CrackTaskStartedAt = c.StartedAt.Unix()
|
||||
task.CrackTaskFinishedAt = c.FinishedAt.Unix()
|
||||
task.CrackTaskStatus = c.Status
|
||||
return task
|
||||
}
|
||||
|
||||
// BeforeCreate - GORM hook
|
||||
func (c *CrackTask) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
c.ID, err = uuid.NewV4()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.CreatedAt = time.Now()
|
||||
c.Status = "queued"
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package models
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/gofrs/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Credential - Represents a piece of loot
|
||||
type Credential struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;->;<-:create;type:uuid;"`
|
||||
CreatedAt time.Time `gorm:"->;<-:create;"`
|
||||
OriginHostUUID uuid.UUID `gorm:"type:uuid;"`
|
||||
|
||||
Username string
|
||||
Plaintext string
|
||||
Hash string // https://hashcat.net/wiki/doku.php?id=example_hashes
|
||||
HashType int32
|
||||
IsCracked bool
|
||||
}
|
||||
|
||||
func (c *Credential) ToProtobuf() *clientpb.Credential {
|
||||
return &clientpb.Credential{
|
||||
ID: c.ID.String(),
|
||||
Username: c.Username,
|
||||
Plaintext: c.Plaintext,
|
||||
Hash: c.Hash,
|
||||
HashType: clientpb.HashType(c.HashType),
|
||||
IsCracked: c.IsCracked,
|
||||
OriginHostUUID: c.OriginHostUUID.String(),
|
||||
}
|
||||
}
|
||||
|
||||
// BeforeCreate - GORM hook
|
||||
func (c *Credential) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
c.ID, err = uuid.NewV4()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.CreatedAt = time.Now()
|
||||
return nil
|
||||
}
|
||||
@@ -33,7 +33,7 @@ type Host struct {
|
||||
CreatedAt time.Time `gorm:"->;<-:create;"`
|
||||
|
||||
Hostname string
|
||||
OSVersion string // Verbore OS version
|
||||
OSVersion string // Verbose OS version
|
||||
Locale string // Detected language code
|
||||
|
||||
IOCs []IOC
|
||||
|
||||
@@ -21,6 +21,7 @@ package models
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/gofrs/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -30,12 +31,21 @@ type Loot struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;->;<-:create;type:uuid;"`
|
||||
CreatedAt time.Time `gorm:"->;<-:create;"`
|
||||
|
||||
Type int
|
||||
FileType int
|
||||
CredentialType int
|
||||
Name string
|
||||
FileType int
|
||||
Name string
|
||||
Size int64
|
||||
|
||||
OriginHost uuid.UUID `gorm:"type:uuid;"`
|
||||
OriginHostID uuid.UUID `gorm:"type:uuid;"`
|
||||
}
|
||||
|
||||
func (l *Loot) ToProtobuf() *clientpb.Loot {
|
||||
return &clientpb.Loot{
|
||||
ID: l.ID.String(),
|
||||
FileType: clientpb.FileType(l.FileType),
|
||||
Name: l.Name,
|
||||
Size: l.Size,
|
||||
OriginHostUUID: l.OriginHostID.String(),
|
||||
}
|
||||
}
|
||||
|
||||
// BeforeCreate - GORM hook
|
||||
|
||||
@@ -54,6 +54,8 @@ func newDBClient() *gorm.DB {
|
||||
&models.Beacon{},
|
||||
&models.BeaconTask{},
|
||||
&models.DNSCanary{},
|
||||
&models.Crackstation{},
|
||||
&models.CrackTask{},
|
||||
&models.Certificate{},
|
||||
&models.Host{},
|
||||
&models.IOC{},
|
||||
@@ -65,6 +67,7 @@ func newDBClient() *gorm.DB {
|
||||
&models.KeyValue{},
|
||||
&models.CanaryDomain{},
|
||||
&models.Loot{},
|
||||
&models.Credential{},
|
||||
&models.Operator{},
|
||||
&models.Website{},
|
||||
&models.WebContent{},
|
||||
|
||||
+18
-74
@@ -20,7 +20,6 @@ package loot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
@@ -45,19 +44,26 @@ var (
|
||||
// LocalBackend - A loot backend that saves files locally to disk
|
||||
type LocalBackend struct {
|
||||
LocalFileDir string
|
||||
LocalCredDir string
|
||||
}
|
||||
|
||||
// Add - Add a piece of loot
|
||||
func (l *LocalBackend) Add(loot *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
host, err := db.HostByHostUUID(loot.OriginHostUUID)
|
||||
var hostID uuid.UUID
|
||||
if err != nil {
|
||||
lootLog.Warnf("Failed to find host %s for loot %s", loot.OriginHostUUID, loot.ID)
|
||||
hostID = uuid.Nil
|
||||
} else {
|
||||
hostID = host.ID
|
||||
}
|
||||
dbLoot := &models.Loot{
|
||||
Name: loot.GetName(),
|
||||
Type: int(loot.GetType()),
|
||||
CredentialType: int(loot.GetCredentialType()),
|
||||
FileType: int(loot.GetFileType()),
|
||||
Name: loot.GetName(),
|
||||
FileType: int(loot.GetFileType()),
|
||||
Size: int64(len(loot.File.Data)),
|
||||
OriginHostID: hostID,
|
||||
}
|
||||
dbSession := db.Session()
|
||||
err := dbSession.Create(dbLoot).Error
|
||||
err = dbSession.Create(dbLoot).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -68,19 +74,7 @@ func (l *LocalBackend) Add(loot *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = ioutil.WriteFile(lootLocalFile, data, 0600)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if loot.Credential != nil {
|
||||
lootLocalCred := filepath.Join(l.LocalCredDir, dbLoot.ID.String())
|
||||
data, err := proto.Marshal(loot.Credential)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = ioutil.WriteFile(lootLocalCred, data, 0600)
|
||||
err = os.WriteFile(lootLocalFile, data, 0600)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -97,7 +91,7 @@ func (l *LocalBackend) Add(loot *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
// Update - Update metadata about loot, currently only 'name' can be changed
|
||||
func (l *LocalBackend) Update(lootReq *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
dbSession := db.Session()
|
||||
lootUUID, err := uuid.FromString(lootReq.LootID)
|
||||
lootUUID, err := uuid.FromString(lootReq.ID)
|
||||
if err != nil {
|
||||
return nil, ErrInvalidLootID
|
||||
}
|
||||
@@ -114,7 +108,7 @@ func (l *LocalBackend) Update(lootReq *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
}
|
||||
}
|
||||
|
||||
return l.GetContent(lootReq.LootID, false)
|
||||
return l.GetContent(lootReq.ID, false)
|
||||
}
|
||||
|
||||
// Rm - Remove a piece of loot
|
||||
@@ -139,15 +133,6 @@ func (l *LocalBackend) Rm(lootID string) error {
|
||||
}
|
||||
}
|
||||
|
||||
// Credential Loot
|
||||
lootCredFile := filepath.Join(l.LocalCredDir, dbLoot.ID.String())
|
||||
if _, err := os.Stat(lootCredFile); !os.IsNotExist(err) {
|
||||
err = os.Remove(lootCredFile)
|
||||
if err != nil {
|
||||
lootLog.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
result = dbSession.Delete(&dbLoot)
|
||||
return result.Error
|
||||
}
|
||||
@@ -166,18 +151,12 @@ func (l *LocalBackend) GetContent(lootID string, eager bool) (*clientpb.Loot, er
|
||||
}
|
||||
|
||||
// Re-construct protobuf object
|
||||
loot := &clientpb.Loot{
|
||||
LootID: dbLoot.ID.String(),
|
||||
Name: dbLoot.Name,
|
||||
Type: clientpb.LootType(dbLoot.Type),
|
||||
FileType: clientpb.FileType(dbLoot.FileType),
|
||||
CredentialType: clientpb.CredentialType(dbLoot.CredentialType),
|
||||
}
|
||||
loot := dbLoot.ToProtobuf()
|
||||
|
||||
// File Loot
|
||||
lootLocalFile := filepath.Join(l.LocalFileDir, dbLoot.ID.String())
|
||||
if _, err := os.Stat(lootLocalFile); !os.IsNotExist(err) {
|
||||
data, err := ioutil.ReadFile(lootLocalFile)
|
||||
data, err := os.ReadFile(lootLocalFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -188,20 +167,6 @@ func (l *LocalBackend) GetContent(lootID string, eager bool) (*clientpb.Loot, er
|
||||
}
|
||||
}
|
||||
|
||||
// Credential Loot
|
||||
lootCredFile := filepath.Join(l.LocalCredDir, dbLoot.ID.String())
|
||||
if _, err := os.Stat(lootCredFile); !os.IsNotExist(err) {
|
||||
data, err := ioutil.ReadFile(lootCredFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
loot.Credential = &clientpb.Credential{}
|
||||
err = proto.Unmarshal(data, loot.Credential)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return loot, nil
|
||||
}
|
||||
|
||||
@@ -228,24 +193,3 @@ func (l *LocalBackend) All() *clientpb.AllLoot {
|
||||
}
|
||||
return all
|
||||
}
|
||||
|
||||
// AllOf - Get all loot of a particular loot type
|
||||
func (l *LocalBackend) AllOf(lootType clientpb.LootType) *clientpb.AllLoot {
|
||||
dbSession := db.Session()
|
||||
allDBLoot := []*models.Loot{}
|
||||
result := dbSession.Where("type == ?", int(lootType)).Find(&allDBLoot)
|
||||
if result.Error != nil {
|
||||
lootLog.Error(result.Error)
|
||||
return nil
|
||||
}
|
||||
all := &clientpb.AllLoot{Loot: []*clientpb.Loot{}}
|
||||
for _, dbLoot := range allDBLoot {
|
||||
loot, err := l.GetContent(dbLoot.ID.String(), true)
|
||||
if err != nil {
|
||||
lootLog.Error(err)
|
||||
continue
|
||||
}
|
||||
all.Loot = append(all.Loot, loot)
|
||||
}
|
||||
return all
|
||||
}
|
||||
@@ -0,0 +1,609 @@
|
||||
package credentials
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import "github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
|
||||
var (
|
||||
CommonHashTypes = map[clientpb.HashType]string{
|
||||
|
||||
// Windows
|
||||
clientpb.HashType_LM: AllHashTypes[clientpb.HashType_LM],
|
||||
clientpb.HashType_NTLM: AllHashTypes[clientpb.HashType_NTLM],
|
||||
clientpb.HashType_DCC: AllHashTypes[clientpb.HashType_DCC],
|
||||
clientpb.HashType_DCC2: AllHashTypes[clientpb.HashType_DCC2],
|
||||
clientpb.HashType_KERBEROS_17_TGS_REP: AllHashTypes[clientpb.HashType_KERBEROS_17_TGS_REP],
|
||||
clientpb.HashType_KERBEROS_17_PREAUTH: AllHashTypes[clientpb.HashType_KERBEROS_17_PREAUTH],
|
||||
clientpb.HashType_KERBEROS_17_DB: AllHashTypes[clientpb.HashType_KERBEROS_17_DB],
|
||||
clientpb.HashType_KERBEROS_18_TGS_REP: AllHashTypes[clientpb.HashType_KERBEROS_18_TGS_REP],
|
||||
clientpb.HashType_KERBEROS_18_PREAUTH: AllHashTypes[clientpb.HashType_KERBEROS_18_PREAUTH],
|
||||
clientpb.HashType_KERBEROS_18_DB: AllHashTypes[clientpb.HashType_KERBEROS_18_DB],
|
||||
clientpb.HashType_KERBEROS_23_SA_REQ_PREAUTH: AllHashTypes[clientpb.HashType_KERBEROS_23_SA_REQ_PREAUTH],
|
||||
clientpb.HashType_KERBEROS_23_TGS_REP: AllHashTypes[clientpb.HashType_KERBEROS_23_TGS_REP],
|
||||
clientpb.HashType_KERBEROS_23_AS_REP: AllHashTypes[clientpb.HashType_KERBEROS_23_AS_REP],
|
||||
clientpb.HashType_NET_NTLM_V1: AllHashTypes[clientpb.HashType_NET_NTLM_V1],
|
||||
clientpb.HashType_NET_NTLM_V1_NT: AllHashTypes[clientpb.HashType_NET_NTLM_V1_NT],
|
||||
clientpb.HashType_NET_NTLM_V2: AllHashTypes[clientpb.HashType_NET_NTLM_V2],
|
||||
clientpb.HashType_NET_NTLM_V2_NT: AllHashTypes[clientpb.HashType_NET_NTLM_V2_NT],
|
||||
|
||||
// Common hashes
|
||||
clientpb.HashType_MD5: AllHashTypes[clientpb.HashType_MD5],
|
||||
clientpb.HashType_SHA1: AllHashTypes[clientpb.HashType_SHA1],
|
||||
clientpb.HashType_SHA2_256: AllHashTypes[clientpb.HashType_SHA2_256],
|
||||
clientpb.HashType_SHA2_512: AllHashTypes[clientpb.HashType_SHA2_512],
|
||||
}
|
||||
|
||||
AllHashTypes = map[clientpb.HashType]string{
|
||||
clientpb.HashType_MD4: "MD4",
|
||||
clientpb.HashType_MD5: "MD5",
|
||||
clientpb.HashType_SHA1: "SHA1",
|
||||
clientpb.HashType_SHA2_224: "SHA2-224",
|
||||
clientpb.HashType_SHA2_256: "SHA2-256",
|
||||
clientpb.HashType_SHA2_384: "SHA2-384",
|
||||
clientpb.HashType_SHA2_512: "SHA2-512",
|
||||
clientpb.HashType_SHA3_224: "SHA3-224",
|
||||
clientpb.HashType_SHA3_256: "SHA3-256",
|
||||
clientpb.HashType_SHA3_384: "SHA3-384",
|
||||
clientpb.HashType_SHA3_512: "SHA3-512",
|
||||
clientpb.HashType_RIPEMD_160: "RIPEMD-160",
|
||||
clientpb.HashType_BLAKE2B_256: "BLAKE2B-256",
|
||||
clientpb.HashType_GOST_R_32_11_2012_256: "GOST R 34.11-2012 (Streebog) 256-bit, big-endian",
|
||||
clientpb.HashType_GOST_R_32_11_2012_512: "GOST R 34.11-2012 (Streebog) 512-bit, big-endian",
|
||||
clientpb.HashType_GOST_R_34_11_94: "GOST R 34.11-94",
|
||||
clientpb.HashType_GPG: "GPG (AES-128/AES-256 (SHA-1($pass)))",
|
||||
clientpb.HashType_HALF_MD5: "Half MD5",
|
||||
clientpb.HashType_KECCAK_224: "Keccak-224",
|
||||
clientpb.HashType_KECCAK_256: "Keccak-256",
|
||||
clientpb.HashType_KECCAK_384: "Keccak-384",
|
||||
clientpb.HashType_KECCAK_512: "Keccak-512",
|
||||
clientpb.HashType_WHIRLPOOL: "Whirlpool",
|
||||
clientpb.HashType_SIPHASH: "SipHash",
|
||||
clientpb.HashType_MD5_UTF16LE: "md5(utf16le($pass))",
|
||||
clientpb.HashType_SHA1_UTF16LE: "sha1(utf16le($pass))",
|
||||
clientpb.HashType_SHA256_UTF16LE: "sha2-256(utf16le($pass))",
|
||||
clientpb.HashType_SHA512_UTF16LE: "sha2-512(utf16le($pass))",
|
||||
clientpb.HashType_BLAKE2B_512_PW_SALT: "BLAKE2b-512($pass.$salt)",
|
||||
clientpb.HashType_BLAKE2B_512_SALT_PW: "BLAKE2b-512($salt.$pass)",
|
||||
clientpb.HashType_MD5_PW_SALT: "md5($pass.$salt)",
|
||||
clientpb.HashType_MD5_SALT_PW: "md5($salt.$pass)",
|
||||
clientpb.HashType_MD5_SALT_PW_SALT: "md5($salt.$pass.$salt)",
|
||||
clientpb.HashType_MD5_SALT_MD5_PW: "md5($salt.md5($pass))",
|
||||
|
||||
// ...
|
||||
|
||||
clientpb.HashType_KERBEROS_17_TGS_REP: "Kerberos 5, etype 17, TGS-REP",
|
||||
clientpb.HashType_KERBEROS_17_PREAUTH: "Kerberos 5, etype 17, Pre-Auth",
|
||||
clientpb.HashType_KERBEROS_17_DB: "Kerberos 5, etype 17, DB",
|
||||
clientpb.HashType_KERBEROS_18_TGS_REP: "Kerberos 5, etype 18, TGS-REP",
|
||||
clientpb.HashType_KERBEROS_18_PREAUTH: "Kerberos 5, etype 18, Pre-Auth",
|
||||
clientpb.HashType_KERBEROS_18_DB: "Kerberos 5, etype 18, DB",
|
||||
clientpb.HashType_KERBEROS_23_SA_REQ_PREAUTH: "Kerberos 5, etype 23, AS-REQ Pre-Auth",
|
||||
clientpb.HashType_KERBEROS_23_TGS_REP: "Kerberos 5, etype 23, TGS-REP",
|
||||
clientpb.HashType_KERBEROS_23_AS_REP: "Kerberos 5, etype 23, AS-REP",
|
||||
clientpb.HashType_NET_NTLM_V1: "NetNTLMv1 / NetNTLMv1+ESS",
|
||||
clientpb.HashType_NET_NTLM_V1_NT: "NetNTLMv1 / NetNTLMv1+ESS (NT)",
|
||||
clientpb.HashType_NET_NTLM_V2: "NetNTLMv2",
|
||||
clientpb.HashType_NET_NTLM_V2_NT: "NetNTLMv2 (NT)",
|
||||
|
||||
// ...
|
||||
|
||||
clientpb.HashType_LM: "LM",
|
||||
|
||||
// ...
|
||||
|
||||
clientpb.HashType_NTLM: "NTLM",
|
||||
|
||||
// ...
|
||||
|
||||
clientpb.HashType_DCC: "Domain Cached Credentials (DCC), MS Cache",
|
||||
clientpb.HashType_DCC2: "Domain Cached Credentials (DCC), MS Cache 2",
|
||||
|
||||
// ...
|
||||
|
||||
clientpb.HashType_MACOS_10_8: "macOS v10.8+ (PBKDF2-SHA512)",
|
||||
}
|
||||
)
|
||||
|
||||
func HashNameFromHashType(hashType clientpb.HashType) string {
|
||||
if name, ok := AllHashTypes[hashType]; ok {
|
||||
return name
|
||||
}
|
||||
return "Unknown"
|
||||
}
|
||||
|
||||
/*
|
||||
- [ Hash modes ] -
|
||||
|
||||
# | Name | Category
|
||||
======+============================================================+======================================
|
||||
900 | MD4 | Raw Hash
|
||||
0 | MD5 | Raw Hash
|
||||
100 | SHA1 | Raw Hash
|
||||
1300 | SHA2-224 | Raw Hash
|
||||
1400 | SHA2-256 | Raw Hash
|
||||
10800 | SHA2-384 | Raw Hash
|
||||
1700 | SHA2-512 | Raw Hash
|
||||
17300 | SHA3-224 | Raw Hash
|
||||
17400 | SHA3-256 | Raw Hash
|
||||
17500 | SHA3-384 | Raw Hash
|
||||
17600 | SHA3-512 | Raw Hash
|
||||
6000 | RIPEMD-160 | Raw Hash
|
||||
600 | BLAKE2b-512 | Raw Hash
|
||||
11700 | GOST R 34.11-2012 (Streebog) 256-bit, big-endian | Raw Hash
|
||||
11800 | GOST R 34.11-2012 (Streebog) 512-bit, big-endian | Raw Hash
|
||||
6900 | GOST R 34.11-94 | Raw Hash
|
||||
17010 | GPG (AES-128/AES-256 (SHA-1($pass))) | Raw Hash
|
||||
5100 | Half MD5 | Raw Hash
|
||||
17700 | Keccak-224 | Raw Hash
|
||||
17800 | Keccak-256 | Raw Hash
|
||||
17900 | Keccak-384 | Raw Hash
|
||||
18000 | Keccak-512 | Raw Hash
|
||||
6100 | Whirlpool | Raw Hash
|
||||
10100 | SipHash | Raw Hash
|
||||
70 | md5(utf16le($pass)) | Raw Hash
|
||||
170 | sha1(utf16le($pass)) | Raw Hash
|
||||
1470 | sha256(utf16le($pass)) | Raw Hash
|
||||
10870 | sha384(utf16le($pass)) | Raw Hash
|
||||
1770 | sha512(utf16le($pass)) | Raw Hash
|
||||
610 | BLAKE2b-512($pass.$salt) | Raw Hash salted and/or iterated
|
||||
620 | BLAKE2b-512($salt.$pass) | Raw Hash salted and/or iterated
|
||||
10 | md5($pass.$salt) | Raw Hash salted and/or iterated
|
||||
20 | md5($salt.$pass) | Raw Hash salted and/or iterated
|
||||
3800 | md5($salt.$pass.$salt) | Raw Hash salted and/or iterated
|
||||
3710 | md5($salt.md5($pass)) | Raw Hash salted and/or iterated
|
||||
// ...
|
||||
4110 | md5($salt.md5($pass.$salt)) | Raw Hash salted and/or iterated
|
||||
4010 | md5($salt.md5($salt.$pass)) | Raw Hash salted and/or iterated
|
||||
21300 | md5($salt.sha1($salt.$pass)) | Raw Hash salted and/or iterated
|
||||
40 | md5($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
2600 | md5(md5($pass)) | Raw Hash salted and/or iterated
|
||||
3910 | md5(md5($pass).md5($salt)) | Raw Hash salted and/or iterated
|
||||
3500 | md5(md5(md5($pass))) | Raw Hash salted and/or iterated
|
||||
4400 | md5(sha1($pass)) | Raw Hash salted and/or iterated
|
||||
4410 | md5(sha1($pass).$salt) | Raw Hash salted and/or iterated
|
||||
20900 | md5(sha1($pass).md5($pass).sha1($pass)) | Raw Hash salted and/or iterated
|
||||
21200 | md5(sha1($salt).md5($pass)) | Raw Hash salted and/or iterated
|
||||
4300 | md5(strtoupper(md5($pass))) | Raw Hash salted and/or iterated
|
||||
30 | md5(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
110 | sha1($pass.$salt) | Raw Hash salted and/or iterated
|
||||
120 | sha1($salt.$pass) | Raw Hash salted and/or iterated
|
||||
4900 | sha1($salt.$pass.$salt) | Raw Hash salted and/or iterated
|
||||
4520 | sha1($salt.sha1($pass)) | Raw Hash salted and/or iterated
|
||||
24300 | sha1($salt.sha1($pass.$salt)) | Raw Hash salted and/or iterated
|
||||
140 | sha1($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
19300 | sha1($salt1.$pass.$salt2) | Raw Hash salted and/or iterated
|
||||
14400 | sha1(CX) | Raw Hash salted and/or iterated
|
||||
4700 | sha1(md5($pass)) | Raw Hash salted and/or iterated
|
||||
4710 | sha1(md5($pass).$salt) | Raw Hash salted and/or iterated
|
||||
21100 | sha1(md5($pass.$salt)) | Raw Hash salted and/or iterated
|
||||
18500 | sha1(md5(md5($pass))) | Raw Hash salted and/or iterated
|
||||
4500 | sha1(sha1($pass)) | Raw Hash salted and/or iterated
|
||||
4510 | sha1(sha1($pass).$salt) | Raw Hash salted and/or iterated
|
||||
5000 | sha1(sha1($salt.$pass.$salt)) | Raw Hash salted and/or iterated
|
||||
130 | sha1(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
1410 | sha256($pass.$salt) | Raw Hash salted and/or iterated
|
||||
1420 | sha256($salt.$pass) | Raw Hash salted and/or iterated
|
||||
22300 | sha256($salt.$pass.$salt) | Raw Hash salted and/or iterated
|
||||
20720 | sha256($salt.sha256($pass)) | Raw Hash salted and/or iterated
|
||||
21420 | sha256($salt.sha256_bin($pass)) | Raw Hash salted and/or iterated
|
||||
1440 | sha256($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
20800 | sha256(md5($pass)) | Raw Hash salted and/or iterated
|
||||
20710 | sha256(sha256($pass).$salt) | Raw Hash salted and/or iterated
|
||||
21400 | sha256(sha256_bin($pass)) | Raw Hash salted and/or iterated
|
||||
1430 | sha256(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
10810 | sha384($pass.$salt) | Raw Hash salted and/or iterated
|
||||
10820 | sha384($salt.$pass) | Raw Hash salted and/or iterated
|
||||
10840 | sha384($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
10830 | sha384(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
1710 | sha512($pass.$salt) | Raw Hash salted and/or iterated
|
||||
1720 | sha512($salt.$pass) | Raw Hash salted and/or iterated
|
||||
1740 | sha512($salt.utf16le($pass)) | Raw Hash salted and/or iterated
|
||||
1730 | sha512(utf16le($pass).$salt) | Raw Hash salted and/or iterated
|
||||
50 | HMAC-MD5 (key = $pass) | Raw Hash authenticated
|
||||
60 | HMAC-MD5 (key = $salt) | Raw Hash authenticated
|
||||
150 | HMAC-SHA1 (key = $pass) | Raw Hash authenticated
|
||||
160 | HMAC-SHA1 (key = $salt) | Raw Hash authenticated
|
||||
1450 | HMAC-SHA256 (key = $pass) | Raw Hash authenticated
|
||||
1460 | HMAC-SHA256 (key = $salt) | Raw Hash authenticated
|
||||
1750 | HMAC-SHA512 (key = $pass) | Raw Hash authenticated
|
||||
1760 | HMAC-SHA512 (key = $salt) | Raw Hash authenticated
|
||||
11750 | HMAC-Streebog-256 (key = $pass), big-endian | Raw Hash authenticated
|
||||
11760 | HMAC-Streebog-256 (key = $salt), big-endian | Raw Hash authenticated
|
||||
11850 | HMAC-Streebog-512 (key = $pass), big-endian | Raw Hash authenticated
|
||||
11860 | HMAC-Streebog-512 (key = $salt), big-endian | Raw Hash authenticated
|
||||
28700 | Amazon AWS4-HMAC-SHA256 | Raw Hash authenticated
|
||||
11500 | CRC32 | Raw Checksum
|
||||
27900 | CRC32C | Raw Checksum
|
||||
28000 | CRC64Jones | Raw Checksum
|
||||
18700 | Java Object hashCode() | Raw Checksum
|
||||
25700 | MurmurHash | Raw Checksum
|
||||
27800 | MurmurHash3 | Raw Checksum
|
||||
14100 | 3DES (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
14000 | DES (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
26401 | AES-128-ECB NOKDF (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
26402 | AES-192-ECB NOKDF (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
26403 | AES-256-ECB NOKDF (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
15400 | ChaCha20 | Raw Cipher, Known-plaintext attack
|
||||
14500 | Linux Kernel Crypto API (2.4) | Raw Cipher, Known-plaintext attack
|
||||
14900 | Skip32 (PT = $salt, key = $pass) | Raw Cipher, Known-plaintext attack
|
||||
11900 | PBKDF2-HMAC-MD5 | Generic KDF
|
||||
12000 | PBKDF2-HMAC-SHA1 | Generic KDF
|
||||
10900 | PBKDF2-HMAC-SHA256 | Generic KDF
|
||||
12100 | PBKDF2-HMAC-SHA512 | Generic KDF
|
||||
8900 | scrypt | Generic KDF
|
||||
400 | phpass | Generic KDF
|
||||
16100 | TACACS+ | Network Protocol
|
||||
11400 | SIP digest authentication (MD5) | Network Protocol
|
||||
5300 | IKE-PSK MD5 | Network Protocol
|
||||
5400 | IKE-PSK SHA1 | Network Protocol
|
||||
25100 | SNMPv3 HMAC-MD5-96 | Network Protocol
|
||||
25000 | SNMPv3 HMAC-MD5-96/HMAC-SHA1-96 | Network Protocol
|
||||
25200 | SNMPv3 HMAC-SHA1-96 | Network Protocol
|
||||
26700 | SNMPv3 HMAC-SHA224-128 | Network Protocol
|
||||
26800 | SNMPv3 HMAC-SHA256-192 | Network Protocol
|
||||
26900 | SNMPv3 HMAC-SHA384-256 | Network Protocol
|
||||
27300 | SNMPv3 HMAC-SHA512-384 | Network Protocol
|
||||
2500 | WPA-EAPOL-PBKDF2 | Network Protocol
|
||||
2501 | WPA-EAPOL-PMK | Network Protocol
|
||||
22000 | WPA-PBKDF2-PMKID+EAPOL | Network Protocol
|
||||
22001 | WPA-PMK-PMKID+EAPOL | Network Protocol
|
||||
16800 | WPA-PMKID-PBKDF2 | Network Protocol
|
||||
16801 | WPA-PMKID-PMK | Network Protocol
|
||||
7300 | IPMI2 RAKP HMAC-SHA1 | Network Protocol
|
||||
10200 | CRAM-MD5 | Network Protocol
|
||||
16500 | JWT (JSON Web Token) | Network Protocol
|
||||
29200 | Radmin3 | Network Protocol
|
||||
19600 | Kerberos 5, etype 17, TGS-REP | Network Protocol
|
||||
19800 | Kerberos 5, etype 17, Pre-Auth | Network Protocol
|
||||
28800 | Kerberos 5, etype 17, DB | Network Protocol
|
||||
19700 | Kerberos 5, etype 18, TGS-REP | Network Protocol
|
||||
19900 | Kerberos 5, etype 18, Pre-Auth | Network Protocol
|
||||
28900 | Kerberos 5, etype 18, DB | Network Protocol
|
||||
7500 | Kerberos 5, etype 23, AS-REQ Pre-Auth | Network Protocol
|
||||
13100 | Kerberos 5, etype 23, TGS-REP | Network Protocol
|
||||
18200 | Kerberos 5, etype 23, AS-REP | Network Protocol
|
||||
5500 | NetNTLMv1 / NetNTLMv1+ESS | Network Protocol
|
||||
27000 | NetNTLMv1 / NetNTLMv1+ESS (NT) | Network Protocol
|
||||
5600 | NetNTLMv2 | Network Protocol
|
||||
27100 | NetNTLMv2 (NT) | Network Protocol
|
||||
29100 | Flask Session Cookie ($salt.$salt.$pass) | Network Protocol
|
||||
4800 | iSCSI CHAP authentication, MD5(CHAP) | Network Protocol
|
||||
8500 | RACF | Operating System
|
||||
6300 | AIX {smd5} | Operating System
|
||||
6700 | AIX {ssha1} | Operating System
|
||||
6400 | AIX {ssha256} | Operating System
|
||||
6500 | AIX {ssha512} | Operating System
|
||||
3000 | LM | Operating System
|
||||
19000 | QNX /etc/shadow (MD5) | Operating System
|
||||
19100 | QNX /etc/shadow (SHA256) | Operating System
|
||||
19200 | QNX /etc/shadow (SHA512) | Operating System
|
||||
15300 | DPAPI masterkey file v1 (context 1 and 2) | Operating System
|
||||
15310 | DPAPI masterkey file v1 (context 3) | Operating System
|
||||
15900 | DPAPI masterkey file v2 (context 1 and 2) | Operating System
|
||||
15910 | DPAPI masterkey file v2 (context 3) | Operating System
|
||||
7200 | GRUB 2 | Operating System
|
||||
12800 | MS-AzureSync PBKDF2-HMAC-SHA256 | Operating System
|
||||
12400 | BSDi Crypt, Extended DES | Operating System
|
||||
1000 | NTLM | Operating System
|
||||
9900 | Radmin2 | Operating System
|
||||
5800 | Samsung Android Password/PIN | Operating System
|
||||
28100 | Windows Hello PIN/Password | Operating System
|
||||
13800 | Windows Phone 8+ PIN/password | Operating System
|
||||
2410 | Cisco-ASA MD5 | Operating System
|
||||
9200 | Cisco-IOS $8$ (PBKDF2-SHA256) | Operating System
|
||||
9300 | Cisco-IOS $9$ (scrypt) | Operating System
|
||||
5700 | Cisco-IOS type 4 (SHA256) | Operating System
|
||||
2400 | Cisco-PIX MD5 | Operating System
|
||||
8100 | Citrix NetScaler (SHA1) | Operating System
|
||||
22200 | Citrix NetScaler (SHA512) | Operating System
|
||||
1100 | Domain Cached Credentials (DCC), MS Cache | Operating System
|
||||
2100 | Domain Cached Credentials 2 (DCC2), MS Cache 2 | Operating System
|
||||
7000 | FortiGate (FortiOS) | Operating System
|
||||
26300 | FortiGate256 (FortiOS256) | Operating System
|
||||
125 | ArubaOS | Operating System
|
||||
501 | Juniper IVE | Operating System
|
||||
22 | Juniper NetScreen/SSG (ScreenOS) | Operating System
|
||||
15100 | Juniper/NetBSD sha1crypt | Operating System
|
||||
26500 | iPhone passcode (UID key + System Keybag) | Operating System
|
||||
122 | macOS v10.4, macOS v10.5, macOS v10.6 | Operating System
|
||||
1722 | macOS v10.7 | Operating System
|
||||
7100 | macOS v10.8+ (PBKDF2-SHA512) | Operating System
|
||||
3200 | bcrypt $2*$, Blowfish (Unix) | Operating System
|
||||
500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) | Operating System
|
||||
1500 | descrypt, DES (Unix), Traditional DES | Operating System
|
||||
29000 | sha1($salt.sha1(utf16le($username).':'.utf16le($pass))) | Operating System
|
||||
7400 | sha256crypt $5$, SHA256 (Unix) | Operating System
|
||||
1800 | sha512crypt $6$, SHA512 (Unix) | Operating System
|
||||
24600 | SQLCipher | Database Server
|
||||
131 | MSSQL (2000) | Database Server
|
||||
132 | MSSQL (2005) | Database Server
|
||||
1731 | MSSQL (2012, 2014) | Database Server
|
||||
24100 | MongoDB ServerKey SCRAM-SHA-1 | Database Server
|
||||
24200 | MongoDB ServerKey SCRAM-SHA-256 | Database Server
|
||||
12 | PostgreSQL | Database Server
|
||||
11100 | PostgreSQL CRAM (MD5) | Database Server
|
||||
28600 | PostgreSQL SCRAM-SHA-256 | Database Server
|
||||
3100 | Oracle H: Type (Oracle 7+) | Database Server
|
||||
112 | Oracle S: Type (Oracle 11+) | Database Server
|
||||
12300 | Oracle T: Type (Oracle 12+) | Database Server
|
||||
7401 | MySQL $A$ (sha256crypt) | Database Server
|
||||
11200 | MySQL CRAM (SHA1) | Database Server
|
||||
200 | MySQL323 | Database Server
|
||||
300 | MySQL4.1/MySQL5 | Database Server
|
||||
8000 | Sybase ASE | Database Server
|
||||
8300 | DNSSEC (NSEC3) | FTP, HTTP, SMTP, LDAP Server
|
||||
25900 | KNX IP Secure - Device Authentication Code | FTP, HTTP, SMTP, LDAP Server
|
||||
16400 | CRAM-MD5 Dovecot | FTP, HTTP, SMTP, LDAP Server
|
||||
1411 | SSHA-256(Base64), LDAP {SSHA256} | FTP, HTTP, SMTP, LDAP Server
|
||||
1711 | SSHA-512(Base64), LDAP {SSHA512} | FTP, HTTP, SMTP, LDAP Server
|
||||
24900 | Dahua Authentication MD5 | FTP, HTTP, SMTP, LDAP Server
|
||||
10901 | RedHat 389-DS LDAP (PBKDF2-HMAC-SHA256) | FTP, HTTP, SMTP, LDAP Server
|
||||
15000 | FileZilla Server >= 0.9.55 | FTP, HTTP, SMTP, LDAP Server
|
||||
12600 | ColdFusion 10+ | FTP, HTTP, SMTP, LDAP Server
|
||||
1600 | Apache $apr1$ MD5, md5apr1, MD5 (APR) | FTP, HTTP, SMTP, LDAP Server
|
||||
141 | Episerver 6.x < .NET 4 | FTP, HTTP, SMTP, LDAP Server
|
||||
1441 | Episerver 6.x >= .NET 4 | FTP, HTTP, SMTP, LDAP Server
|
||||
1421 | hMailServer | FTP, HTTP, SMTP, LDAP Server
|
||||
101 | nsldap, SHA-1(Base64), Netscape LDAP SHA | FTP, HTTP, SMTP, LDAP Server
|
||||
111 | nsldaps, SSHA-1(Base64), Netscape LDAP SSHA | FTP, HTTP, SMTP, LDAP Server
|
||||
7700 | SAP CODVN B (BCODE) | Enterprise Application Software (EAS)
|
||||
7701 | SAP CODVN B (BCODE) from RFC_READ_TABLE | Enterprise Application Software (EAS)
|
||||
7800 | SAP CODVN F/G (PASSCODE) | Enterprise Application Software (EAS)
|
||||
7801 | SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE | Enterprise Application Software (EAS)
|
||||
10300 | SAP CODVN H (PWDSALTEDHASH) iSSHA-1 | Enterprise Application Software (EAS)
|
||||
133 | PeopleSoft | Enterprise Application Software (EAS)
|
||||
13500 | PeopleSoft PS_TOKEN | Enterprise Application Software (EAS)
|
||||
21500 | SolarWinds Orion | Enterprise Application Software (EAS)
|
||||
21501 | SolarWinds Orion v2 | Enterprise Application Software (EAS)
|
||||
24 | SolarWinds Serv-U | Enterprise Application Software (EAS)
|
||||
8600 | Lotus Notes/Domino 5 | Enterprise Application Software (EAS)
|
||||
8700 | Lotus Notes/Domino 6 | Enterprise Application Software (EAS)
|
||||
9100 | Lotus Notes/Domino 8 | Enterprise Application Software (EAS)
|
||||
26200 | OpenEdge Progress Encode | Enterprise Application Software (EAS)
|
||||
20600 | Oracle Transportation Management (SHA256) | Enterprise Application Software (EAS)
|
||||
4711 | Huawei sha1(md5($pass).$salt) | Enterprise Application Software (EAS)
|
||||
20711 | AuthMe sha256 | Enterprise Application Software (EAS)
|
||||
22400 | AES Crypt (SHA256) | Full-Disk Encryption (FDE)
|
||||
27400 | VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC) | Full-Disk Encryption (FDE)
|
||||
14600 | LUKS v1 (legacy) | Full-Disk Encryption (FDE)
|
||||
29541 | LUKS v1 RIPEMD-160 + AES | Full-Disk Encryption (FDE)
|
||||
29542 | LUKS v1 RIPEMD-160 + Serpent | Full-Disk Encryption (FDE)
|
||||
29543 | LUKS v1 RIPEMD-160 + Twofish | Full-Disk Encryption (FDE)
|
||||
29511 | LUKS v1 SHA-1 + AES | Full-Disk Encryption (FDE)
|
||||
29512 | LUKS v1 SHA-1 + Serpent | Full-Disk Encryption (FDE)
|
||||
29513 | LUKS v1 SHA-1 + Twofish | Full-Disk Encryption (FDE)
|
||||
29521 | LUKS v1 SHA-256 + AES | Full-Disk Encryption (FDE)
|
||||
29522 | LUKS v1 SHA-256 + Serpent | Full-Disk Encryption (FDE)
|
||||
29523 | LUKS v1 SHA-256 + Twofish | Full-Disk Encryption (FDE)
|
||||
29531 | LUKS v1 SHA-512 + AES | Full-Disk Encryption (FDE)
|
||||
29532 | LUKS v1 SHA-512 + Serpent | Full-Disk Encryption (FDE)
|
||||
29533 | LUKS v1 SHA-512 + Twofish | Full-Disk Encryption (FDE)
|
||||
13711 | VeraCrypt RIPEMD160 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13712 | VeraCrypt RIPEMD160 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13713 | VeraCrypt RIPEMD160 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13741 | VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13742 | VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13743 | VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29411 | VeraCrypt RIPEMD160 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29412 | VeraCrypt RIPEMD160 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29413 | VeraCrypt RIPEMD160 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29441 | VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29442 | VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29443 | VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
13751 | VeraCrypt SHA256 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13752 | VeraCrypt SHA256 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13753 | VeraCrypt SHA256 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13761 | VeraCrypt SHA256 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13762 | VeraCrypt SHA256 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13763 | VeraCrypt SHA256 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29451 | VeraCrypt SHA256 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29452 | VeraCrypt SHA256 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29453 | VeraCrypt SHA256 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29461 | VeraCrypt SHA256 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29462 | VeraCrypt SHA256 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29463 | VeraCrypt SHA256 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
13721 | VeraCrypt SHA512 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13722 | VeraCrypt SHA512 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13723 | VeraCrypt SHA512 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29421 | VeraCrypt SHA512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29422 | VeraCrypt SHA512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29423 | VeraCrypt SHA512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
13771 | VeraCrypt Streebog-512 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13772 | VeraCrypt Streebog-512 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13773 | VeraCrypt Streebog-512 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13781 | VeraCrypt Streebog-512 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13782 | VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
13783 | VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29471 | VeraCrypt Streebog-512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29472 | VeraCrypt Streebog-512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29473 | VeraCrypt Streebog-512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29481 | VeraCrypt Streebog-512 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29482 | VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29483 | VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
13731 | VeraCrypt Whirlpool + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13732 | VeraCrypt Whirlpool + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
13733 | VeraCrypt Whirlpool + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29431 | VeraCrypt Whirlpool + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29432 | VeraCrypt Whirlpool + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29433 | VeraCrypt Whirlpool + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
23900 | BestCrypt v3 Volume Encryption | Full-Disk Encryption (FDE)
|
||||
16700 | FileVault 2 | Full-Disk Encryption (FDE)
|
||||
27500 | VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS) | Full-Disk Encryption (FDE)
|
||||
27600 | VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS) | Full-Disk Encryption (FDE)
|
||||
20011 | DiskCryptor SHA512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
20012 | DiskCryptor SHA512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
20013 | DiskCryptor SHA512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
22100 | BitLocker | Full-Disk Encryption (FDE)
|
||||
12900 | Android FDE (Samsung DEK) | Full-Disk Encryption (FDE)
|
||||
8800 | Android FDE <= 4.3 | Full-Disk Encryption (FDE)
|
||||
18300 | Apple File System (APFS) | Full-Disk Encryption (FDE)
|
||||
6211 | TrueCrypt RIPEMD160 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6212 | TrueCrypt RIPEMD160 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6213 | TrueCrypt RIPEMD160 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6241 | TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
6242 | TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
6243 | TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode (legacy) | Full-Disk Encryption (FDE)
|
||||
29311 | TrueCrypt RIPEMD160 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29312 | TrueCrypt RIPEMD160 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29313 | TrueCrypt RIPEMD160 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
29341 | TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29342 | TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
29343 | TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode | Full-Disk Encryption (FDE)
|
||||
6221 | TrueCrypt SHA512 + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6222 | TrueCrypt SHA512 + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6223 | TrueCrypt SHA512 + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29321 | TrueCrypt SHA512 + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29322 | TrueCrypt SHA512 + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29323 | TrueCrypt SHA512 + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
6231 | TrueCrypt Whirlpool + XTS 512 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6232 | TrueCrypt Whirlpool + XTS 1024 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
6233 | TrueCrypt Whirlpool + XTS 1536 bit (legacy) | Full-Disk Encryption (FDE)
|
||||
29331 | TrueCrypt Whirlpool + XTS 512 bit | Full-Disk Encryption (FDE)
|
||||
29332 | TrueCrypt Whirlpool + XTS 1024 bit | Full-Disk Encryption (FDE)
|
||||
29333 | TrueCrypt Whirlpool + XTS 1536 bit | Full-Disk Encryption (FDE)
|
||||
12200 | eCryptfs | Full-Disk Encryption (FDE)
|
||||
10400 | PDF 1.1 - 1.3 (Acrobat 2 - 4) | Document
|
||||
10410 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1 | Document
|
||||
10420 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2 | Document
|
||||
10500 | PDF 1.4 - 1.6 (Acrobat 5 - 8) | Document
|
||||
25400 | PDF 1.4 - 1.6 (Acrobat 5 - 8) - user and owner pass | Document
|
||||
10600 | PDF 1.7 Level 3 (Acrobat 9) | Document
|
||||
10700 | PDF 1.7 Level 8 (Acrobat 10 - 11) | Document
|
||||
9400 | MS Office 2007 | Document
|
||||
9500 | MS Office 2010 | Document
|
||||
9600 | MS Office 2013 | Document
|
||||
25300 | MS Office 2016 - SheetProtection | Document
|
||||
9700 | MS Office <= 2003 $0/$1, MD5 + RC4 | Document
|
||||
9710 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #1 | Document
|
||||
9720 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #2 | Document
|
||||
9810 | MS Office <= 2003 $3, SHA1 + RC4, collider #1 | Document
|
||||
9820 | MS Office <= 2003 $3, SHA1 + RC4, collider #2 | Document
|
||||
9800 | MS Office <= 2003 $3/$4, SHA1 + RC4 | Document
|
||||
18400 | Open Document Format (ODF) 1.2 (SHA-256, AES) | Document
|
||||
18600 | Open Document Format (ODF) 1.1 (SHA-1, Blowfish) | Document
|
||||
16200 | Apple Secure Notes | Document
|
||||
23300 | Apple iWork | Document
|
||||
6600 | 1Password, agilekeychain | Password Manager
|
||||
8200 | 1Password, cloudkeychain | Password Manager
|
||||
9000 | Password Safe v2 | Password Manager
|
||||
5200 | Password Safe v3 | Password Manager
|
||||
6800 | LastPass + LastPass sniffed | Password Manager
|
||||
13400 | KeePass 1 (AES/Twofish) and KeePass 2 (AES) | Password Manager
|
||||
29700 | KeePass 1 (AES/Twofish) and KeePass 2 (AES) - keyfile only mode | Password Manager
|
||||
23400 | Bitwarden | Password Manager
|
||||
16900 | Ansible Vault | Password Manager
|
||||
26000 | Mozilla key3.db | Password Manager
|
||||
26100 | Mozilla key4.db | Password Manager
|
||||
23100 | Apple Keychain | Password Manager
|
||||
11600 | 7-Zip | Archive
|
||||
12500 | RAR3-hp | Archive
|
||||
23700 | RAR3-p (Uncompressed) | Archive
|
||||
13000 | RAR5 | Archive
|
||||
17220 | PKZIP (Compressed Multi-File) | Archive
|
||||
17200 | PKZIP (Compressed) | Archive
|
||||
17225 | PKZIP (Mixed Multi-File) | Archive
|
||||
17230 | PKZIP (Mixed Multi-File Checksum-Only) | Archive
|
||||
17210 | PKZIP (Uncompressed) | Archive
|
||||
20500 | PKZIP Master Key | Archive
|
||||
20510 | PKZIP Master Key (6 byte optimization) | Archive
|
||||
23001 | SecureZIP AES-128 | Archive
|
||||
23002 | SecureZIP AES-192 | Archive
|
||||
23003 | SecureZIP AES-256 | Archive
|
||||
13600 | WinZip | Archive
|
||||
18900 | Android Backup | Archive
|
||||
24700 | Stuffit5 | Archive
|
||||
13200 | AxCrypt 1 | Archive
|
||||
13300 | AxCrypt 1 in-memory SHA1 | Archive
|
||||
23500 | AxCrypt 2 AES-128 | Archive
|
||||
23600 | AxCrypt 2 AES-256 | Archive
|
||||
14700 | iTunes backup < 10.0 | Archive
|
||||
14800 | iTunes backup >= 10.0 | Archive
|
||||
8400 | WBB3 (Woltlab Burning Board) | Forums, CMS, E-Commerce
|
||||
2612 | PHPS | Forums, CMS, E-Commerce
|
||||
121 | SMF (Simple Machines Forum) > v1.1 | Forums, CMS, E-Commerce
|
||||
3711 | MediaWiki B type | Forums, CMS, E-Commerce
|
||||
4521 | Redmine | Forums, CMS, E-Commerce
|
||||
24800 | Umbraco HMAC-SHA1 | Forums, CMS, E-Commerce
|
||||
11 | Joomla < 2.5.18 | Forums, CMS, E-Commerce
|
||||
13900 | OpenCart | Forums, CMS, E-Commerce
|
||||
11000 | PrestaShop | Forums, CMS, E-Commerce
|
||||
16000 | Tripcode | Forums, CMS, E-Commerce
|
||||
7900 | Drupal7 | Forums, CMS, E-Commerce
|
||||
4522 | PunBB | Forums, CMS, E-Commerce
|
||||
2811 | MyBB 1.2+, IPB2+ (Invision Power Board) | Forums, CMS, E-Commerce
|
||||
2611 | vBulletin < v3.8.5 | Forums, CMS, E-Commerce
|
||||
2711 | vBulletin >= v3.8.5 | Forums, CMS, E-Commerce
|
||||
25600 | bcrypt(md5($pass)) / bcryptmd5 | Forums, CMS, E-Commerce
|
||||
25800 | bcrypt(sha1($pass)) / bcryptsha1 | Forums, CMS, E-Commerce
|
||||
28400 | bcrypt(sha512($pass)) / bcryptsha512 | Forums, CMS, E-Commerce
|
||||
21 | osCommerce, xt:Commerce | Forums, CMS, E-Commerce
|
||||
18100 | TOTP (HMAC-SHA1) | One-Time Password
|
||||
2000 | STDOUT | Plaintext
|
||||
99999 | Plaintext | Plaintext
|
||||
21600 | Web2py pbkdf2-sha512 | Framework
|
||||
10000 | Django (PBKDF2-SHA256) | Framework
|
||||
124 | Django (SHA-1) | Framework
|
||||
12001 | Atlassian (PBKDF2-HMAC-SHA1) | Framework
|
||||
19500 | Ruby on Rails Restful-Authentication | Framework
|
||||
27200 | Ruby on Rails Restful Auth (one round, no sitekey) | Framework
|
||||
30000 | Python Werkzeug MD5 (HMAC-MD5 (key = $salt)) | Framework
|
||||
30120 | Python Werkzeug SHA256 (HMAC-SHA256 (key = $salt)) | Framework
|
||||
20200 | Python passlib pbkdf2-sha512 | Framework
|
||||
20300 | Python passlib pbkdf2-sha256 | Framework
|
||||
20400 | Python passlib pbkdf2-sha1 | Framework
|
||||
24410 | PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES) | Private Key
|
||||
24420 | PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES) | Private Key
|
||||
15500 | JKS Java Key Store Private Keys (SHA1) | Private Key
|
||||
22911 | RSA/DSA/EC/OpenSSH Private Keys ($0$) | Private Key
|
||||
22921 | RSA/DSA/EC/OpenSSH Private Keys ($6$) | Private Key
|
||||
22931 | RSA/DSA/EC/OpenSSH Private Keys ($1, $3$) | Private Key
|
||||
22941 | RSA/DSA/EC/OpenSSH Private Keys ($4$) | Private Key
|
||||
22951 | RSA/DSA/EC/OpenSSH Private Keys ($5$) | Private Key
|
||||
23200 | XMPP SCRAM PBKDF2-SHA1 | Instant Messaging Service
|
||||
28300 | Teamspeak 3 (channel hash) | Instant Messaging Service
|
||||
22600 | Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1) | Instant Messaging Service
|
||||
24500 | Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512) | Instant Messaging Service
|
||||
22301 | Telegram Mobile App Passcode (SHA256) | Instant Messaging Service
|
||||
23 | Skype | Instant Messaging Service
|
||||
29600 | Terra Station Wallet (AES256-CBC(PBKDF2($pass))) | Cryptocurrency Wallet
|
||||
26600 | MetaMask Wallet | Cryptocurrency Wallet
|
||||
21000 | BitShares v0.x - sha512(sha512_bin(pass)) | Cryptocurrency Wallet
|
||||
28501 | Bitcoin WIF private key (P2PKH), compressed | Cryptocurrency Wallet
|
||||
28502 | Bitcoin WIF private key (P2PKH), uncompressed | Cryptocurrency Wallet
|
||||
28503 | Bitcoin WIF private key (P2WPKH, Bech32), compressed | Cryptocurrency Wallet
|
||||
28504 | Bitcoin WIF private key (P2WPKH, Bech32), uncompressed | Cryptocurrency Wallet
|
||||
28505 | Bitcoin WIF private key (P2SH(P2WPKH)), compressed | Cryptocurrency Wallet
|
||||
28506 | Bitcoin WIF private key (P2SH(P2WPKH)), uncompressed | Cryptocurrency Wallet
|
||||
11300 | Bitcoin/Litecoin wallet.dat | Cryptocurrency Wallet
|
||||
16600 | Electrum Wallet (Salt-Type 1-3) | Cryptocurrency Wallet
|
||||
21700 | Electrum Wallet (Salt-Type 4) | Cryptocurrency Wallet
|
||||
21800 | Electrum Wallet (Salt-Type 5) | Cryptocurrency Wallet
|
||||
12700 | Blockchain, My Wallet | Cryptocurrency Wallet
|
||||
15200 | Blockchain, My Wallet, V2 | Cryptocurrency Wallet
|
||||
18800 | Blockchain, My Wallet, Second Password (SHA256) | Cryptocurrency Wallet
|
||||
25500 | Stargazer Stellar Wallet XLM | Cryptocurrency Wallet
|
||||
16300 | Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256 | Cryptocurrency Wallet
|
||||
15600 | Ethereum Wallet, PBKDF2-HMAC-SHA256 | Cryptocurrency Wallet
|
||||
15700 | Ethereum Wallet, SCRYPT | Cryptocurrency Wallet
|
||||
22500 | MultiBit Classic .key (MD5) | Cryptocurrency Wallet
|
||||
27700 | MultiBit Classic .wallet (scrypt) | Cryptocurrency Wallet
|
||||
22700 | MultiBit HD (scrypt) | Cryptocurrency Wallet
|
||||
28200 | Exodus Desktop Wallet (scrypt) | Cryptocurrency Wallet
|
||||
|
||||
*/
|
||||
@@ -39,7 +39,6 @@ type LootBackend interface {
|
||||
Update(*clientpb.Loot) (*clientpb.Loot, error)
|
||||
GetContent(string, bool) (*clientpb.Loot, error)
|
||||
All() *clientpb.AllLoot
|
||||
AllOf(clientpb.LootType) *clientpb.AllLoot
|
||||
}
|
||||
|
||||
// LootStore - The struct that represents the loot store
|
||||
@@ -87,17 +86,11 @@ func (l *LootStore) All() *clientpb.AllLoot {
|
||||
return l.backend.All()
|
||||
}
|
||||
|
||||
// AllOf - Get loot of a particular type from the loot store
|
||||
func (l *LootStore) AllOf(lootType clientpb.LootType) *clientpb.AllLoot {
|
||||
return l.backend.AllOf(lootType)
|
||||
}
|
||||
|
||||
// GetLootStore - Get an instances of the core LootStore
|
||||
func GetLootStore() *LootStore {
|
||||
return &LootStore{
|
||||
backend: &LocalBackend{
|
||||
LocalFileDir: GetLootFileDir(),
|
||||
LocalCredDir: GetLootCredentialDir(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/bishopfox/sliver/server/log"
|
||||
"github.com/gofrs/uuid"
|
||||
)
|
||||
|
||||
@@ -18,9 +17,6 @@ var (
|
||||
|
||||
name1 = "Test1"
|
||||
name2 = "Test2"
|
||||
name3 = "Test3"
|
||||
|
||||
lootTestLog = log.NamedLogger("loot", "test")
|
||||
)
|
||||
|
||||
func randomData() []byte {
|
||||
@@ -33,7 +29,6 @@ func TestAddGetRmLoot(t *testing.T) {
|
||||
lootStore := GetLootStore()
|
||||
|
||||
loot, err := lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name1,
|
||||
FileType: clientpb.FileType_BINARY,
|
||||
File: &commonpb.File{
|
||||
@@ -44,18 +39,15 @@ func TestAddGetRmLoot(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
loot2, err := lootStore.GetContent(loot.LootID, true)
|
||||
loot2, err := lootStore.GetContent(loot.ID, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if loot.Name != loot2.Name {
|
||||
t.Fatalf("Name mismatch %s != %s", loot.Name, loot2.Name)
|
||||
}
|
||||
if loot.Type != loot2.Type {
|
||||
t.Fatalf("Type mismatch %s != %s", loot.Type, loot2.Type)
|
||||
}
|
||||
if loot.LootID != loot2.LootID {
|
||||
t.Fatalf("LootID mismatch %s != %s", loot.LootID, loot2.LootID)
|
||||
if loot.ID != loot2.ID {
|
||||
t.Fatalf("LootID mismatch %s != %s", loot.ID, loot2.ID)
|
||||
}
|
||||
if loot2.File == nil {
|
||||
t.Fatal("Missing loot file")
|
||||
@@ -66,13 +58,12 @@ func TestAddGetRmLoot(t *testing.T) {
|
||||
if !bytes.Equal(data1, loot2.File.Data) {
|
||||
t.Fatalf("Loot file data mismatch %v != %v", data1, loot2.File.Data)
|
||||
}
|
||||
err = lootStore.Rm(loot.LootID)
|
||||
err = lootStore.Rm(loot.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
loot, err = lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name2,
|
||||
FileType: clientpb.FileType_TEXT,
|
||||
File: &commonpb.File{
|
||||
@@ -83,47 +74,16 @@ func TestAddGetRmLoot(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = lootStore.Rm(loot.LootID)
|
||||
err = lootStore.Rm(loot.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
loot, err = lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
Name: name3,
|
||||
CredentialType: clientpb.CredentialType_USER_PASSWORD,
|
||||
Credential: &clientpb.Credential{
|
||||
User: "admin",
|
||||
Password: "admin",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
loot2, err = lootStore.GetContent(loot.LootID, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if loot2.Credential == nil {
|
||||
t.Fatal("Missing credential")
|
||||
}
|
||||
if "admin" != loot2.Credential.User {
|
||||
t.Fatalf("Credential user mismatch %s != %s", "admin", loot2.Credential.User)
|
||||
}
|
||||
if "admin" != loot2.Credential.Password {
|
||||
t.Fatalf("Credential password mismatch %s != %s", "admin", loot2.Credential.Password)
|
||||
}
|
||||
err = lootStore.Rm(loot.LootID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAllLoot(t *testing.T) {
|
||||
lootStore := GetLootStore()
|
||||
_, err := lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name1,
|
||||
FileType: clientpb.FileType_BINARY,
|
||||
File: &commonpb.File{
|
||||
@@ -135,7 +95,6 @@ func TestAllLoot(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name2,
|
||||
FileType: clientpb.FileType_TEXT,
|
||||
File: &commonpb.File{
|
||||
@@ -146,18 +105,6 @@ func TestAllLoot(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
Name: name3,
|
||||
CredentialType: clientpb.CredentialType_USER_PASSWORD,
|
||||
Credential: &clientpb.Credential{
|
||||
User: "admin",
|
||||
Password: "admin",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
allLoot := lootStore.All()
|
||||
if allLoot == nil {
|
||||
@@ -169,7 +116,7 @@ func TestAllLoot(t *testing.T) {
|
||||
|
||||
// Cleanup
|
||||
for _, loot := range allLoot.Loot {
|
||||
err = lootStore.Rm(loot.LootID)
|
||||
err = lootStore.Rm(loot.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -179,7 +126,6 @@ func TestAllLoot(t *testing.T) {
|
||||
func TestAllLootOf(t *testing.T) {
|
||||
lootStore := GetLootStore()
|
||||
_, err := lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name1,
|
||||
FileType: clientpb.FileType_BINARY,
|
||||
File: &commonpb.File{
|
||||
@@ -191,7 +137,6 @@ func TestAllLootOf(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name2,
|
||||
FileType: clientpb.FileType_TEXT,
|
||||
File: &commonpb.File{
|
||||
@@ -202,32 +147,10 @@ func TestAllLootOf(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_CREDENTIAL,
|
||||
Name: name3,
|
||||
CredentialType: clientpb.CredentialType_USER_PASSWORD,
|
||||
Credential: &clientpb.Credential{
|
||||
User: "admin",
|
||||
Password: "admin",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// AllOf
|
||||
fileLoot := lootStore.AllOf(clientpb.LootType_LOOT_FILE).Loot
|
||||
if len(fileLoot) != 2 {
|
||||
t.Fatalf("AllOf file returned %d expected 2", len(fileLoot))
|
||||
}
|
||||
credLoot := lootStore.AllOf(clientpb.LootType_LOOT_CREDENTIAL).Loot
|
||||
if len(credLoot) != 1 {
|
||||
t.Fatalf("AllOf cred returned %d expected 2", len(credLoot))
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
for _, loot := range lootStore.All().Loot {
|
||||
err = lootStore.Rm(loot.LootID)
|
||||
err = lootStore.Rm(loot.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -237,7 +160,6 @@ func TestAllLootOf(t *testing.T) {
|
||||
func TestLootErrors(t *testing.T) {
|
||||
lootStore := GetLootStore()
|
||||
loot, err := lootStore.Add(&clientpb.Loot{
|
||||
Type: clientpb.LootType_LOOT_FILE,
|
||||
Name: name1,
|
||||
FileType: clientpb.FileType_BINARY,
|
||||
File: &commonpb.File{
|
||||
@@ -260,7 +182,7 @@ func TestLootErrors(t *testing.T) {
|
||||
t.Fatal("Expected loot not found error")
|
||||
}
|
||||
|
||||
err = lootStore.Rm(loot.LootID)
|
||||
err = lootStore.Rm(loot.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package main
|
||||
|
||||
// "This is the source, the line unbroken since the calamity that brought such monsters to our shores."
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2019 Bishop Fox
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
package rpc
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/bishopfox/sliver/protobuf/rpcpb"
|
||||
"github.com/bishopfox/sliver/server/core"
|
||||
"github.com/bishopfox/sliver/server/db"
|
||||
"github.com/bishopfox/sliver/server/db/models"
|
||||
"github.com/bishopfox/sliver/server/log"
|
||||
"github.com/bishopfox/sliver/util"
|
||||
"github.com/gofrs/uuid"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
var (
|
||||
crackRpcLog = log.NamedLogger("rpc", "crackstations")
|
||||
)
|
||||
|
||||
func (rpc *Server) Crackstations(ctx context.Context, req *commonpb.Empty) (*clientpb.Crackstations, error) {
|
||||
return &clientpb.Crackstations{Crackstations: core.AllCrackstations()}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) CrackstationTrigger(ctx context.Context, req *clientpb.Event) (*commonpb.Empty, error) {
|
||||
|
||||
switch req.EventType {
|
||||
|
||||
case "crack": // Placeholder
|
||||
core.EventBroker.Publish(core.Event{
|
||||
EventType: req.EventType,
|
||||
Data: req.Data,
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
return &commonpb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) CrackstationRegister(req *clientpb.Crackstation, stream rpcpb.SliverRPC_CrackstationRegisterServer) error {
|
||||
hostUUID := uuid.FromStringOrNil(req.HostUUID)
|
||||
if hostUUID == uuid.Nil {
|
||||
return status.Error(codes.InvalidArgument, "invalid host uuid")
|
||||
}
|
||||
err := core.AddCrackstation(req)
|
||||
if err == core.ErrDuplicateExternalCrackerName {
|
||||
status.Error(codes.AlreadyExists, "crackstation name already exists")
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = db.CrackstationByName(req.Name)
|
||||
if err == db.ErrRecordNotFound {
|
||||
dbSession := db.Session()
|
||||
err = dbSession.Create(&models.Crackstation{ID: req.Name}).Error
|
||||
if err != nil {
|
||||
crackRpcLog.Errorf("Failed to create crackstation record: %s", err)
|
||||
return status.Error(codes.Internal, "failed to register crackstation")
|
||||
}
|
||||
}
|
||||
|
||||
crackRpcLog.Infof("Crackstation %s (%s) connected", req.Name, req.OperatorName)
|
||||
events := core.EventBroker.Subscribe()
|
||||
defer func() {
|
||||
crackRpcLog.Infof("Crackstation %s disconnected", req.Name)
|
||||
core.EventBroker.Unsubscribe(events)
|
||||
core.RemoveCrackstation(req.Name)
|
||||
}()
|
||||
|
||||
// Only forward these event types
|
||||
crackingEvents := []string{}
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-stream.Context().Done():
|
||||
return nil
|
||||
case event := <-events:
|
||||
if !util.Contains(crackingEvents, event.EventType) {
|
||||
continue
|
||||
}
|
||||
|
||||
pbEvent := &clientpb.Event{
|
||||
EventType: event.EventType,
|
||||
Data: event.Data,
|
||||
}
|
||||
if event.Job != nil {
|
||||
pbEvent.Job = event.Job.ToProtobuf()
|
||||
}
|
||||
if event.Client != nil {
|
||||
pbEvent.Client = event.Client.ToProtobuf()
|
||||
}
|
||||
if event.Session != nil {
|
||||
pbEvent.Session = event.Session.ToProtobuf()
|
||||
}
|
||||
if event.Err != nil {
|
||||
pbEvent.Err = event.Err.Error()
|
||||
}
|
||||
|
||||
err := stream.Send(pbEvent)
|
||||
if err != nil {
|
||||
crackRpcLog.Warnf(err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
package rpc
|
||||
|
||||
/*
|
||||
Sliver Implant Framework
|
||||
Copyright (C) 2022 Bishop Fox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/bishopfox/sliver/protobuf/clientpb"
|
||||
"github.com/bishopfox/sliver/protobuf/commonpb"
|
||||
"github.com/bishopfox/sliver/server/db"
|
||||
"github.com/bishopfox/sliver/server/db/models"
|
||||
"github.com/bishopfox/sliver/server/log"
|
||||
"github.com/gofrs/uuid"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
var (
|
||||
credsRpcLog = log.NamedLogger("rpc", "creds")
|
||||
|
||||
ErrInvalidCredID = status.Errorf(codes.InvalidArgument, "Invalid credential ID")
|
||||
ErrCredNotFound = status.Error(codes.NotFound, "Credential not found")
|
||||
ErrCredOperationFailed = status.Error(codes.Internal, "Credential operation failed")
|
||||
)
|
||||
|
||||
func (rpc *Server) Creds(ctx context.Context, req *commonpb.Empty) (*clientpb.Credentials, error) {
|
||||
dbCreds := []*models.Credential{}
|
||||
err := db.Session().Where(&models.Credential{}).Find(&dbCreds).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
credentials := []*clientpb.Credential{}
|
||||
for _, dbCred := range dbCreds {
|
||||
credentials = append(credentials, dbCred.ToProtobuf())
|
||||
}
|
||||
return &clientpb.Credentials{Credentials: credentials}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) CredsAdd(ctx context.Context, req *clientpb.Credentials) (*commonpb.Empty, error) {
|
||||
for _, cred := range req.Credentials {
|
||||
err := db.Session().Create(&models.Credential{
|
||||
Username: cred.Username,
|
||||
Plaintext: cred.Plaintext,
|
||||
Hash: cred.Hash,
|
||||
HashType: int32(cred.HashType),
|
||||
IsCracked: (cred.Plaintext != "" && cred.Hash != ""),
|
||||
}).Error
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to add credential: %s", err)
|
||||
return nil, ErrCredOperationFailed
|
||||
}
|
||||
}
|
||||
return &commonpb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) CredsRm(ctx context.Context, req *clientpb.Credentials) (*commonpb.Empty, error) {
|
||||
for _, cred := range req.Credentials {
|
||||
dbCred, err := db.CredentialByID(cred.ID)
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to get credential: %s", err)
|
||||
return nil, ErrCredNotFound
|
||||
}
|
||||
credsRpcLog.Infof("got cred: %#v", dbCred)
|
||||
err = db.Session().Delete(dbCred).Error
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to remove credential: %s", err)
|
||||
return nil, ErrCredOperationFailed
|
||||
}
|
||||
}
|
||||
return &commonpb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) CredsUpdate(ctx context.Context, req *clientpb.Credentials) (*commonpb.Empty, error) {
|
||||
for _, cred := range req.Credentials {
|
||||
credID := uuid.FromStringOrNil(cred.ID)
|
||||
if credID == uuid.Nil {
|
||||
return nil, ErrInvalidCredID
|
||||
}
|
||||
err := db.Session().Where(&models.Credential{ID: credID}).Updates(&models.Credential{
|
||||
Username: cred.Username,
|
||||
Plaintext: cred.Plaintext,
|
||||
Hash: cred.Hash,
|
||||
HashType: int32(cred.HashType),
|
||||
IsCracked: cred.IsCracked,
|
||||
}).Error
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to update credential: %s", err)
|
||||
return nil, ErrCredOperationFailed
|
||||
}
|
||||
}
|
||||
return &commonpb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) GetCredByID(ctx context.Context, req *clientpb.Credential) (*clientpb.Credential, error) {
|
||||
dbCred, err := db.CredentialByID(req.ID)
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to get credential: %s", err)
|
||||
return nil, ErrCredNotFound
|
||||
}
|
||||
return dbCred.ToProtobuf(), nil
|
||||
}
|
||||
|
||||
func (rpc *Server) GetCredsByHashType(ctx context.Context, req *clientpb.Credential) (*clientpb.Credentials, error) {
|
||||
dbCreds, err := db.CredentialsByHashType(req.HashType)
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to get credential: %s", err)
|
||||
return nil, ErrCredOperationFailed
|
||||
}
|
||||
credentials := []*clientpb.Credential{}
|
||||
for _, dbCred := range dbCreds {
|
||||
credentials = append(credentials, dbCred.ToProtobuf())
|
||||
}
|
||||
return &clientpb.Credentials{Credentials: credentials}, nil
|
||||
}
|
||||
|
||||
func (rpc *Server) GetPlaintextCredsByHashType(ctx context.Context, req *clientpb.Credential) (*clientpb.Credentials, error) {
|
||||
dbCreds, err := db.PlaintextCredentialsByHashType(req.HashType)
|
||||
if err != nil {
|
||||
credsRpcLog.Errorf("Failed to get credential: %s", err)
|
||||
return nil, ErrCredOperationFailed
|
||||
}
|
||||
credentials := []*clientpb.Credential{}
|
||||
for _, dbCred := range dbCreds {
|
||||
credentials = append(credentials, dbCred.ToProtobuf())
|
||||
}
|
||||
return &clientpb.Credentials{Credentials: credentials}, nil
|
||||
}
|
||||
+3
-13
@@ -28,10 +28,6 @@ import (
|
||||
"github.com/bishopfox/sliver/server/loot"
|
||||
)
|
||||
|
||||
// var (
|
||||
// lootRPCLog = log.NamedLogger("rpc", "loot")
|
||||
// )
|
||||
|
||||
// LootAdd - Add loot
|
||||
func (rpc *Server) LootAdd(ctx context.Context, lootReq *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
loot, err := loot.GetLootStore().Add(lootReq)
|
||||
@@ -40,14 +36,14 @@ func (rpc *Server) LootAdd(ctx context.Context, lootReq *clientpb.Loot) (*client
|
||||
}
|
||||
core.EventBroker.Publish(core.Event{
|
||||
EventType: consts.LootAddedEvent,
|
||||
Data: []byte(loot.LootID),
|
||||
Data: []byte(loot.ID),
|
||||
})
|
||||
return loot, nil
|
||||
}
|
||||
|
||||
// LootRm - Remove loot
|
||||
func (rpc *Server) LootRm(ctx context.Context, lootReq *clientpb.Loot) (*commonpb.Empty, error) {
|
||||
err := loot.GetLootStore().Rm(lootReq.LootID)
|
||||
err := loot.GetLootStore().Rm(lootReq.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -71,16 +67,10 @@ func (rpc *Server) LootUpdate(ctx context.Context, lootReq *clientpb.Loot) (*cli
|
||||
|
||||
// LootContent - Get a list of all loot of a specific type
|
||||
func (rpc *Server) LootContent(ctx context.Context, lootReq *clientpb.Loot) (*clientpb.Loot, error) {
|
||||
return loot.GetLootStore().GetContent(lootReq.LootID, true)
|
||||
return loot.GetLootStore().GetContent(lootReq.ID, true)
|
||||
}
|
||||
|
||||
// LootAll - Get a list of all loot
|
||||
func (rpc *Server) LootAll(ctx context.Context, _ *commonpb.Empty) (*clientpb.AllLoot, error) {
|
||||
return loot.GetLootStore().All(), nil
|
||||
}
|
||||
|
||||
// LootAllOf - Get a list of all loot of a specific type
|
||||
func (rpc *Server) LootAllOf(ctx context.Context, lootReq *clientpb.Loot) (*clientpb.AllLoot, error) {
|
||||
allLoot := loot.GetLootStore().AllOf(lootReq.Type)
|
||||
return allLoot, nil
|
||||
}
|
||||
+1
-1
@@ -50,7 +50,7 @@ func (id Language) Canonicalize() (Language, AliasType) {
|
||||
return normLang(id)
|
||||
}
|
||||
|
||||
// mapLang returns the mapped langID of id according to mapping m.
|
||||
// normLang returns the mapped langID of id according to mapping m.
|
||||
func normLang(id Language) (Language, AliasType) {
|
||||
k := sort.Search(len(AliasMap), func(i int) bool {
|
||||
return AliasMap[i].From >= uint16(id)
|
||||
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
// Copyright 2013 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build !go1.2
|
||||
// +build !go1.2
|
||||
|
||||
package language
|
||||
|
||||
import "sort"
|
||||
|
||||
func sortStable(s sort.Interface) {
|
||||
ss := stableSort{
|
||||
s: s,
|
||||
pos: make([]int, s.Len()),
|
||||
}
|
||||
for i := range ss.pos {
|
||||
ss.pos[i] = i
|
||||
}
|
||||
sort.Sort(&ss)
|
||||
}
|
||||
|
||||
type stableSort struct {
|
||||
s sort.Interface
|
||||
pos []int
|
||||
}
|
||||
|
||||
func (s *stableSort) Len() int {
|
||||
return len(s.pos)
|
||||
}
|
||||
|
||||
func (s *stableSort) Less(i, j int) bool {
|
||||
return s.s.Less(i, j) || !s.s.Less(j, i) && s.pos[i] < s.pos[j]
|
||||
}
|
||||
|
||||
func (s *stableSort) Swap(i, j int) {
|
||||
s.s.Swap(i, j)
|
||||
s.pos[i], s.pos[j] = s.pos[j], s.pos[i]
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
// Copyright 2013 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build go1.2
|
||||
// +build go1.2
|
||||
|
||||
package language
|
||||
|
||||
import "sort"
|
||||
|
||||
var sortStable = sort.Stable
|
||||
+2
-1
@@ -6,6 +6,7 @@ package language
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -206,7 +207,7 @@ func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) {
|
||||
tag = append(tag, t)
|
||||
q = append(q, float32(w))
|
||||
}
|
||||
sortStable(&tagSort{tag, q})
|
||||
sort.Stable(&tagSort{tag, q})
|
||||
return tag, q, nil
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ func In(rt *unicode.RangeTable) Set {
|
||||
return setFunc(func(r rune) bool { return unicode.Is(rt, r) })
|
||||
}
|
||||
|
||||
// In creates a Set with a Contains method that returns true for all runes not
|
||||
// NotIn creates a Set with a Contains method that returns true for all runes not
|
||||
// in the given RangeTable.
|
||||
func NotIn(rt *unicode.RangeTable) Set {
|
||||
return setFunc(func(r rune) bool { return !unicode.Is(rt, r) })
|
||||
|
||||
+51
-3
@@ -5,10 +5,12 @@ import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"math"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/go-sql-driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/callbacks"
|
||||
"gorm.io/gorm/clause"
|
||||
@@ -22,6 +24,7 @@ type Config struct {
|
||||
DriverName string
|
||||
ServerVersion string
|
||||
DSN string
|
||||
DSNConfig *mysql.Config
|
||||
Conn gorm.ConnPool
|
||||
SkipInitializeWithVersion bool
|
||||
DefaultStringSize uint
|
||||
@@ -52,7 +55,8 @@ var (
|
||||
)
|
||||
|
||||
func Open(dsn string) gorm.Dialector {
|
||||
return &Dialector{Config: &Config{DSN: dsn}}
|
||||
dsnConf, _ := mysql.ParseDSN(dsn)
|
||||
return &Dialector{Config: &Config{DSN: dsn, DSNConfig: dsnConf}}
|
||||
}
|
||||
|
||||
func New(config Config) gorm.Dialector {
|
||||
@@ -117,7 +121,9 @@ func (dialector Dialector) Initialize(db *gorm.DB) (err error) {
|
||||
dialector.Config.DontSupportRenameColumn = true
|
||||
dialector.Config.DontSupportForShareClause = true
|
||||
dialector.Config.DontSupportNullAsDefaultValue = true
|
||||
withReturning = true
|
||||
if checkVersion(dialector.ServerVersion, "10.5") {
|
||||
withReturning = true
|
||||
}
|
||||
} else if strings.HasPrefix(dialector.ServerVersion, "5.6.") {
|
||||
dialector.Config.DontSupportRenameIndex = true
|
||||
dialector.Config.DontSupportRenameColumn = true
|
||||
@@ -310,7 +316,23 @@ func (dialector Dialector) QuoteTo(writer clause.Writer, str string) {
|
||||
writer.WriteByte('`')
|
||||
}
|
||||
|
||||
type localTimeInterface interface {
|
||||
In(loc *time.Location) time.Time
|
||||
}
|
||||
|
||||
func (dialector Dialector) Explain(sql string, vars ...interface{}) string {
|
||||
if dialector.DSNConfig != nil && dialector.DSNConfig.Loc == time.Local {
|
||||
for i, v := range vars {
|
||||
if p, ok := v.(localTimeInterface); ok {
|
||||
func(i int, t localTimeInterface) {
|
||||
defer func() {
|
||||
recover()
|
||||
}()
|
||||
vars[i] = t.In(time.Local)
|
||||
}(i, p)
|
||||
}
|
||||
}
|
||||
}
|
||||
return logger.ExplainSQL(sql, nil, `'`, vars...)
|
||||
}
|
||||
|
||||
@@ -439,3 +461,29 @@ func (dialector Dialector) SavePoint(tx *gorm.DB, name string) error {
|
||||
func (dialector Dialector) RollbackTo(tx *gorm.DB, name string) error {
|
||||
return tx.Exec("ROLLBACK TO SAVEPOINT " + name).Error
|
||||
}
|
||||
|
||||
var versionTrimerRegexp = regexp.MustCompile(`^(\d+).*$`)
|
||||
|
||||
// checkVersion newer or equal returns true, old returns false
|
||||
func checkVersion(newVersion, oldVersion string) bool {
|
||||
if newVersion == oldVersion {
|
||||
return true
|
||||
}
|
||||
|
||||
newVersions := strings.Split(newVersion, ".")
|
||||
oldVersions := strings.Split(oldVersion, ".")
|
||||
for idx, nv := range newVersions {
|
||||
if len(oldVersions) <= idx {
|
||||
return true
|
||||
}
|
||||
|
||||
nvi, _ := strconv.Atoi(versionTrimerRegexp.ReplaceAllString(nv, "$1"))
|
||||
ovi, _ := strconv.Atoi(versionTrimerRegexp.ReplaceAllString(oldVersions[idx], "$1"))
|
||||
if nvi == ovi {
|
||||
continue
|
||||
}
|
||||
return nvi > ovi
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
+36
-1
@@ -197,6 +197,8 @@ func (m Migrator) AddColumn(value interface{}, field string) error {
|
||||
if err := m.Migrator.AddColumn(value, field); err != nil {
|
||||
return err
|
||||
}
|
||||
m.resetPreparedStmts()
|
||||
|
||||
return m.RunWithValue(value, func(stmt *gorm.Statement) error {
|
||||
if field := stmt.Schema.LookUpField(field); field != nil {
|
||||
if field.Comment != "" {
|
||||
@@ -266,7 +268,7 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
|
||||
|
||||
// AlterColumn alter value's `field` column' type based on schema definition
|
||||
func (m Migrator) AlterColumn(value interface{}, field string) error {
|
||||
return m.RunWithValue(value, func(stmt *gorm.Statement) error {
|
||||
err := m.RunWithValue(value, func(stmt *gorm.Statement) error {
|
||||
if field := stmt.Schema.LookUpField(field); field != nil {
|
||||
var (
|
||||
columnTypes, _ = m.DB.Migrator().ColumnTypes(value)
|
||||
@@ -347,6 +349,12 @@ func (m Migrator) AlterColumn(value interface{}, field string) error {
|
||||
}
|
||||
return fmt.Errorf("failed to look up field with name: %s", field)
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.resetPreparedStmts()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m Migrator) HasConstraint(value interface{}, name string) bool {
|
||||
@@ -694,3 +702,30 @@ func groupByIndexName(indexList []*Index) map[string][]*Index {
|
||||
func (m Migrator) GetTypeAliases(databaseTypeName string) []string {
|
||||
return typeAliasMap[databaseTypeName]
|
||||
}
|
||||
|
||||
// should reset prepared stmts when table changed
|
||||
func (m Migrator) resetPreparedStmts() {
|
||||
if m.DB.PrepareStmt {
|
||||
if pdb, ok := m.DB.ConnPool.(*gorm.PreparedStmtDB); ok {
|
||||
pdb.Reset()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (m Migrator) DropColumn(dst interface{}, field string) error {
|
||||
if err := m.Migrator.DropColumn(dst, field); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m.resetPreparedStmts()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m Migrator) RenameColumn(dst interface{}, oldName, field string) error {
|
||||
if err := m.Migrator.RenameColumn(dst, oldName, field); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m.resetPreparedStmts()
|
||||
return nil
|
||||
}
|
||||
+1
-1
@@ -101,7 +101,7 @@ func (dialector Dialector) ClauseBuilders() map[string]clause.ClauseBuilder {
|
||||
if limit.Limit != nil && *limit.Limit >= 0 {
|
||||
lmt = *limit.Limit
|
||||
}
|
||||
if lmt > 0 || limit.Offset > 0 {
|
||||
if lmt >= 0 || limit.Offset > 0 {
|
||||
builder.WriteString("LIMIT ")
|
||||
builder.WriteString(strconv.Itoa(lmt))
|
||||
}
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ The fantastic ORM library for Golang, aims to be developer friendly.
|
||||
## Getting Started
|
||||
|
||||
* GORM Guides [https://gorm.io](https://gorm.io)
|
||||
* GORM Gen [gorm/gen](https://github.com/go-gorm/gen#gormgen)
|
||||
* Gen Guides [https://gorm.io/gen/index.html](https://gorm.io/gen/index.html)
|
||||
|
||||
## Contributing
|
||||
|
||||
|
||||
+8
-2
@@ -208,7 +208,10 @@ func SaveAfterAssociations(create bool) func(db *gorm.DB) {
|
||||
|
||||
cacheKey := utils.ToStringKey(relPrimaryValues...)
|
||||
if len(relPrimaryValues) != len(rel.FieldSchema.PrimaryFields) || !identityMap[cacheKey] {
|
||||
identityMap[cacheKey] = true
|
||||
if cacheKey != "" { // has primary fields
|
||||
identityMap[cacheKey] = true
|
||||
}
|
||||
|
||||
if isPtr {
|
||||
elems = reflect.Append(elems, elem)
|
||||
} else {
|
||||
@@ -294,7 +297,10 @@ func SaveAfterAssociations(create bool) func(db *gorm.DB) {
|
||||
|
||||
cacheKey := utils.ToStringKey(relPrimaryValues...)
|
||||
if len(relPrimaryValues) != len(rel.FieldSchema.PrimaryFields) || !identityMap[cacheKey] {
|
||||
identityMap[cacheKey] = true
|
||||
if cacheKey != "" { // has primary fields
|
||||
identityMap[cacheKey] = true
|
||||
}
|
||||
|
||||
distinctElems = reflect.Append(distinctElems, elem)
|
||||
}
|
||||
|
||||
|
||||
+27
-28
@@ -406,17 +406,14 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
|
||||
fullDataType := strings.TrimSpace(strings.ToLower(m.DB.Migrator().FullDataTypeOf(field).SQL))
|
||||
realDataType := strings.ToLower(columnType.DatabaseTypeName())
|
||||
|
||||
alterColumn := false
|
||||
var (
|
||||
alterColumn, isSameType bool
|
||||
)
|
||||
|
||||
if !field.PrimaryKey {
|
||||
// check type
|
||||
var isSameType bool
|
||||
if strings.HasPrefix(fullDataType, realDataType) {
|
||||
isSameType = true
|
||||
}
|
||||
|
||||
// check type aliases
|
||||
if !isSameType {
|
||||
if !strings.HasPrefix(fullDataType, realDataType) {
|
||||
// check type aliases
|
||||
aliases := m.DB.Migrator().GetTypeAliases(realDataType)
|
||||
for _, alias := range aliases {
|
||||
if strings.HasPrefix(fullDataType, alias) {
|
||||
@@ -424,32 +421,34 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !isSameType {
|
||||
alterColumn = true
|
||||
}
|
||||
}
|
||||
|
||||
// check size
|
||||
if length, ok := columnType.Length(); length != int64(field.Size) {
|
||||
if length > 0 && field.Size > 0 {
|
||||
alterColumn = true
|
||||
} else {
|
||||
// has size in data type and not equal
|
||||
// Since the following code is frequently called in the for loop, reg optimization is needed here
|
||||
matches2 := regFullDataType.FindAllStringSubmatch(fullDataType, -1)
|
||||
if !field.PrimaryKey &&
|
||||
(len(matches2) == 1 && matches2[0][1] != fmt.Sprint(length) && ok) {
|
||||
if !isSameType {
|
||||
alterColumn = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check precision
|
||||
if precision, _, ok := columnType.DecimalSize(); ok && int64(field.Precision) != precision {
|
||||
if regexp.MustCompile(fmt.Sprintf("[^0-9]%d[^0-9]", field.Precision)).MatchString(m.DataTypeOf(field)) {
|
||||
alterColumn = true
|
||||
if !isSameType {
|
||||
// check size
|
||||
if length, ok := columnType.Length(); length != int64(field.Size) {
|
||||
if length > 0 && field.Size > 0 {
|
||||
alterColumn = true
|
||||
} else {
|
||||
// has size in data type and not equal
|
||||
// Since the following code is frequently called in the for loop, reg optimization is needed here
|
||||
matches2 := regFullDataType.FindAllStringSubmatch(fullDataType, -1)
|
||||
if !field.PrimaryKey &&
|
||||
(len(matches2) == 1 && matches2[0][1] != fmt.Sprint(length) && ok) {
|
||||
alterColumn = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check precision
|
||||
if precision, _, ok := columnType.DecimalSize(); ok && int64(field.Precision) != precision {
|
||||
if regexp.MustCompile(fmt.Sprintf("[^0-9]%d[^0-9]", field.Precision)).MatchString(m.DataTypeOf(field)) {
|
||||
alterColumn = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -44,6 +44,18 @@ func (db *PreparedStmtDB) Close() {
|
||||
}
|
||||
}
|
||||
|
||||
func (db *PreparedStmtDB) Reset() {
|
||||
db.Mux.Lock()
|
||||
defer db.Mux.Unlock()
|
||||
for query, stmt := range db.Stmts {
|
||||
delete(db.Stmts, query)
|
||||
go stmt.Close()
|
||||
}
|
||||
|
||||
db.PreparedSQL = make([]string, 0, 100)
|
||||
db.Stmts = map[string](*Stmt){}
|
||||
}
|
||||
|
||||
func (db *PreparedStmtDB) prepare(ctx context.Context, conn ConnPool, isTransaction bool, query string) (Stmt, error) {
|
||||
db.Mux.RLock()
|
||||
if stmt, ok := db.Stmts[query]; ok && (!stmt.Transaction || isTransaction) {
|
||||
|
||||
+1
-1
@@ -317,4 +317,4 @@ func Scan(rows Rows, db *DB, mode ScanMode) {
|
||||
if db.RowsAffected == 0 && db.Statement.RaiseErrorOnNotFound && db.Error == nil {
|
||||
db.AddError(ErrRecordNotFound)
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
@@ -100,6 +100,12 @@ func (JSONSerializer) Scan(ctx context.Context, field *Field, dst reflect.Value,
|
||||
// Value implements serializer interface
|
||||
func (JSONSerializer) Value(ctx context.Context, field *Field, dst reflect.Value, fieldValue interface{}) (interface{}, error) {
|
||||
result, err := json.Marshal(fieldValue)
|
||||
if string(result) == "null" {
|
||||
if field.TagSettings["NOT NULL"] != "" {
|
||||
return "", nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return string(result), err
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -179,6 +179,10 @@ func (stmt *Statement) AddVar(writer clause.Writer, vars ...interface{}) {
|
||||
} else {
|
||||
stmt.AddVar(writer, v.GormValue(stmt.Context, stmt.DB))
|
||||
}
|
||||
case clause.Interface:
|
||||
c := clause.Clause{Name: v.Name()}
|
||||
v.MergeClause(&c)
|
||||
c.Build(stmt)
|
||||
case clause.Expression:
|
||||
v.Build(stmt)
|
||||
case driver.Valuer:
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ var gormSourceDir string
|
||||
func init() {
|
||||
_, file, _, _ := runtime.Caller(0)
|
||||
// compatible solution to get gorm source directory with various operating systems
|
||||
gormSourceDir = regexp.MustCompile(`utils.utils\.go`).ReplaceAllString(file, "")
|
||||
gormSourceDir = regexp.MustCompile(`gorm.utils.utils\.go`).ReplaceAllString(file, "")
|
||||
}
|
||||
|
||||
// FileWithLineNum return the file name and line number of the current file
|
||||
|
||||
Vendored
+18
-6
@@ -216,6 +216,9 @@ github.com/google/uuid
|
||||
# github.com/gorilla/mux v1.8.0
|
||||
## explicit; go 1.12
|
||||
github.com/gorilla/mux
|
||||
# github.com/gorilla/websocket v1.4.2
|
||||
## explicit; go 1.12
|
||||
github.com/gorilla/websocket
|
||||
# github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
||||
## explicit; go 1.14
|
||||
github.com/grpc-ecosystem/go-grpc-middleware
|
||||
@@ -355,13 +358,22 @@ github.com/shirou/gopsutil/v3/mem
|
||||
# github.com/sirupsen/logrus v1.9.0
|
||||
## explicit; go 1.13
|
||||
github.com/sirupsen/logrus
|
||||
# github.com/slack-go/slack v0.11.3
|
||||
## explicit; go 1.16
|
||||
github.com/slack-go/slack
|
||||
github.com/slack-go/slack/internal/backoff
|
||||
github.com/slack-go/slack/internal/errorsx
|
||||
github.com/slack-go/slack/internal/timex
|
||||
github.com/slack-go/slack/slackevents
|
||||
github.com/slack-go/slack/slackutilsx
|
||||
github.com/slack-go/slack/socketmode
|
||||
# github.com/spf13/cobra v1.6.0
|
||||
## explicit; go 1.15
|
||||
github.com/spf13/cobra
|
||||
# github.com/spf13/pflag v1.0.5
|
||||
## explicit; go 1.12
|
||||
github.com/spf13/pflag
|
||||
# github.com/stretchr/testify v1.8.0
|
||||
# github.com/stretchr/testify v1.8.1
|
||||
## explicit; go 1.13
|
||||
github.com/stretchr/testify/assert
|
||||
# github.com/thedevsaddam/gojsonq/v2 v2.5.2
|
||||
@@ -440,7 +452,7 @@ golang.org/x/sys/windows/svc/mgr
|
||||
# golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
## explicit; go 1.17
|
||||
golang.org/x/term
|
||||
# golang.org/x/text v0.3.8
|
||||
# golang.org/x/text v0.4.0
|
||||
## explicit; go 1.17
|
||||
golang.org/x/text/cases
|
||||
golang.org/x/text/encoding
|
||||
@@ -638,16 +650,16 @@ gopkg.in/jcmturner/rpc.v1/ndr
|
||||
# gopkg.in/yaml.v3 v3.0.1
|
||||
## explicit
|
||||
gopkg.in/yaml.v3
|
||||
# gorm.io/driver/mysql v1.4.1
|
||||
# gorm.io/driver/mysql v1.4.3
|
||||
## explicit; go 1.14
|
||||
gorm.io/driver/mysql
|
||||
# gorm.io/driver/postgres v1.4.4
|
||||
# gorm.io/driver/postgres v1.4.5
|
||||
## explicit; go 1.14
|
||||
gorm.io/driver/postgres
|
||||
# gorm.io/driver/sqlite v1.4.2
|
||||
# gorm.io/driver/sqlite v1.4.3
|
||||
## explicit; go 1.14
|
||||
gorm.io/driver/sqlite
|
||||
# gorm.io/gorm v1.24.0
|
||||
# gorm.io/gorm v1.24.1-0.20221019064659-5dd2bb482755
|
||||
## explicit; go 1.16
|
||||
gorm.io/gorm
|
||||
gorm.io/gorm/callbacks
|
||||
|
||||
Reference in new issue
Block a user