Compare commits

...
Author SHA1 Message Date
rkervella ee9d203d24 Slack transport WIP 2022-10-26 09:00:40 -07:00
rkervella 6489ae7de1 Update vendor 2022-10-25 16:09:17 -07:00
rkervella c3beb171c2 Add slack dep 2022-10-25 16:08:37 -07:00
moloch-- 6b43991619 Added some basic file parsers 2022-10-24 22:38:40 -07:00
moloch-- c91a2ce822 Updated readme 2022-10-24 21:39:38 -07:00
moloch-- da6c11f259 Updated help 2022-10-24 21:25:23 -07:00
moloch-- 82a9e7fc9a Cred crud fixes 2022-10-24 20:05:50 -07:00
moloch-- e7f03babaa Cred crud 2022-10-24 19:29:03 -07:00
moloch-- 0af718beea Go mod tidy/vendor 2022-10-24 09:21:03 -07:00
moloch-- 16f96c5add Merge branch 'master' into feature/creds 2022-10-24 09:20:34 -07:00
Joe 84c56f3c4e Merge pull request #967 from BishopFox/30d7dependabot/go_modules/gorm.io/driver/postgres-1.4.5
Bump gorm.io/driver/postgres from 1.4.4 to 1.4.5
2022-10-24 11:20:10 -05:00
dependabot[bot] 14553f9a5a Bump gorm.io/driver/postgres from 1.4.4 to 1.4.5
Bumps [gorm.io/driver/postgres](https://github.com/go-gorm/postgres) from 1.4.4 to 1.4.5.
- [Release notes](https://github.com/go-gorm/postgres/releases)
- [Commits](https://github.com/go-gorm/postgres/compare/v1.4.4...v1.4.5)

---
updated-dependencies:
- dependency-name: gorm.io/driver/postgres
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-10-24 15:26:40 +00:00
Joe 441038a508 Merge pull request #968 from BishopFox/01f2dependabot/go_modules/github.com/stretchr/testify-1.8.1
Bump github.com/stretchr/testify from 1.8.0 to 1.8.1
2022-10-24 10:25:39 -05:00
Joe 4bf328edd9 Merge pull request #969 from BishopFox/0370dependabot/go_modules/gorm.io/driver/sqlite-1.4.3
Bump gorm.io/driver/sqlite from 1.4.2 to 1.4.3
2022-10-24 10:25:20 -05:00
Joe f7d5d5f4c6 Merge pull request #971 from BishopFox/d52bdependabot/go_modules/gorm.io/driver/mysql-1.4.3
Bump gorm.io/driver/mysql from 1.4.1 to 1.4.3
2022-10-24 10:25:03 -05:00
Joe ea764705f1 Merge pull request #970 from BishopFox/f6e5dependabot/go_modules/golang.org/x/text-0.4.0
Bump golang.org/x/text from 0.3.8 to 0.4.0
2022-10-24 10:24:45 -05:00
moloch-- 3f00c639dd Merge branch 'master' into feature/creds 2022-10-24 08:24:35 -07:00
moloch-- f5c75eba83 Tweak pb 2022-10-24 08:24:16 -07:00
moloch-- 2a86250fd4 Fix spelling 2022-10-23 23:25:33 -07:00
moloch-- c4616ff43c wip on hashcat protobuf 2022-10-23 23:01:31 -07:00
moloch-- c3a28dcf7a wip on hashcat protobuf 2022-10-23 22:53:23 -07:00
dependabot[bot] 0417fc16f6 Bump gorm.io/driver/mysql from 1.4.1 to 1.4.3
Bumps [gorm.io/driver/mysql](https://github.com/go-gorm/mysql) from 1.4.1 to 1.4.3.
- [Release notes](https://github.com/go-gorm/mysql/releases)
- [Commits](https://github.com/go-gorm/mysql/compare/v1.4.1...v1.4.3)

---
updated-dependencies:
- dependency-name: gorm.io/driver/mysql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-10-24 03:40:19 +00:00
dependabot[bot] 901e9fd9e1 Bump golang.org/x/text from 0.3.8 to 0.4.0
Bumps [golang.org/x/text](https://github.com/golang/text) from 0.3.8 to 0.4.0.
- [Release notes](https://github.com/golang/text/releases)
- [Commits](https://github.com/golang/text/compare/v0.3.8...v0.4.0)

---
updated-dependencies:
- dependency-name: golang.org/x/text
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-10-24 03:40:13 +00:00
dependabot[bot] c5b3250d17 Bump gorm.io/driver/sqlite from 1.4.2 to 1.4.3
Bumps [gorm.io/driver/sqlite](https://github.com/go-gorm/sqlite) from 1.4.2 to 1.4.3.
- [Release notes](https://github.com/go-gorm/sqlite/releases)
- [Commits](https://github.com/go-gorm/sqlite/compare/v1.4.2...v1.4.3)

---
updated-dependencies:
- dependency-name: gorm.io/driver/sqlite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-10-24 03:40:07 +00:00
dependabot[bot] 9f72364e54 Bump github.com/stretchr/testify from 1.8.0 to 1.8.1
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.8.0...v1.8.1)

---
updated-dependencies:
- dependency-name: github.com/stretchr/testify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-10-24 03:40:00 +00:00
moloch-- b1b6f8186c Implement core crackstation mgmt 2022-10-23 14:10:39 -07:00
Ronan Kervella 184dde22ad Merge pull request #965 from BishopFox/moloch---patch-4
Update autorelease.yml
2022-10-23 13:29:46 -07:00
Joe 0f5262ef87 Update autorelease.yml
Remove goreleaser branch trigger

Signed-off-by: Joe <[email protected]>
2022-10-22 13:21:15 -05:00
moloch-- f68932ab3f Add kerb and net ntlm hashes 2022-10-21 14:08:08 -07:00
moloch-- 8a669d1d84 Merge branch 'master' into feature/creds 2022-10-21 13:44:09 -07:00
Joe bb8b7111b7 Merge pull request #964 from BishopFox/stage
Remove ioutil usage
2022-10-21 15:21:24 -05:00
rkervella 567e51ca46 Remove ioutil usage 2022-10-21 11:46:29 -07:00
Joe 05166e896f Merge pull request #962 from BishopFox/moloch---patch-3
Remove status badge until github fixes
2022-10-21 12:01:47 -05:00
Joe 3cfe6435f3 Remove status badge until github fixes
https://github.com/actions/runner/issues/1830

Signed-off-by: Joe <[email protected]>
2022-10-21 11:23:57 -05:00
Ronan Kervella 48c65108d6 Merge pull request #960 from BishopFox/moloch---patch-2
Update badge
2022-10-21 09:00:01 -07:00
Ronan Kervella a271932c8a Merge pull request #961 from BishopFox/fix/garble-linux-arm64
Download the correct garble executable for linux arm64
2022-10-21 08:28:13 -07:00
moloch-- 90b3c7bca4 Merge branch 'master' into feature/creds 2022-10-21 08:17:00 -07:00
moloch-- 8c6fe18280 Download the correct garble executable for linux arm64 2022-10-21 07:38:41 -07:00
Joe 97dbae571c Update badge
Signed-off-by: Joe <[email protected]>
2022-10-20 15:44:48 -05:00
Joe b5e629c4a6 Merge pull request #959 from BishopFox/test/code-ql
Test/code ql
2022-10-20 15:04:24 -05:00
Joe 53593be73f Merge pull request #958 from BishopFox/fix/action-go
Switch actions to Go ^1.19
2022-10-20 12:35:21 -05:00
moloch-- cf5ae8bd07 Merge branch 'master' into feature/creds 2022-10-20 09:58:46 -07:00
moloch-- 4d3ac9177a Added new models to orm 2022-10-18 17:13:24 -07:00
moloch-- 92a9bc4da9 Update help 2022-10-18 16:55:35 -07:00
moloch-- 4b3a9dad8a Refactoring loot/creds schemes 2022-10-18 16:45:41 -07:00
65 changed files with 6676 additions and 2177 deletions

No files matched your search

+1 -1
View File
@@ -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:
+16 -18
View File
@@ -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).
![Go](https://github.com/BishopFox/sliver/workflows/Go/badge.svg?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/BishopFox/sliver)](https://goreportcard.com/report/github.com/BishopFox/sliver) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Build & Test](https://github.com/BishopFox/sliver/actions/workflows/go.yml/badge.svg)](https://github.com/BishopFox/sliver/actions/workflows/go.yml) [![Code Scanning](https://github.com/BishopFox/sliver/actions/workflows/codeql-scanning.yml/badge.svg)](https://github.com/BishopFox/sliver/actions/workflows/codeql-scanning.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/BishopFox/sliver)](https://goreportcard.com/report/github.com/BishopFox/sliver) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](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.
+3 -4
View File
@@ -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
View File
@@ -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 ] ------------------------------------------------------------
}
+196
View File
@@ -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
}
+69
View File
@@ -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())
}
+62
View File
@@ -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)
}
+72
View File
@@ -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
}
+1 -1
View File
@@ -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
View File
@@ -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
}
+1 -10
View File
@@ -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")
}
}
+1 -6
View File
@@ -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)
+504 -17
View File
@@ -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 (
-85
View File
@@ -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)
}
+1 -11
View File
@@ -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 {
+10 -98
View File
@@ -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()
+8 -33
View File
@@ -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
View File
@@ -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.
+14 -49
View File
@@ -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)
}
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+3 -3
View File
@@ -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
+9 -1
View File
@@ -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
View File
@@ -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
+8 -6
View File
@@ -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
+18 -159
View File
@@ -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=
File diff suppressed because it is too large. Load diff
+313 -30
View File
@@ -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
View File
@@ -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
+16 -3
View File
@@ -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);
+374 -17
View File
@@ -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,
+4 -1
View File
@@ -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)
}
+73
View File
@@ -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),
})
}
}
+56
View File
@@ -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
}
+74
View File
@@ -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
}
+62
View File
@@ -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
}
+1 -1
View File
@@ -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
+15 -5
View File
@@ -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
+3
View File
@@ -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
View File
@@ -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
}
+609
View File
@@ -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
*/
-7
View File
@@ -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 -86
View File
@@ -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)
}
+2
View File
@@ -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
+127
View File
@@ -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
}
}
}
}
+143
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+18 -6
View File
@@ -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