mirror of
https://github.com/BishopFox/sliver
synced 2026-06-08 10:29:05 +00:00
193 lines
5.8 KiB
Go
193 lines
5.8 KiB
Go
package command
|
|
|
|
/*
|
|
Sliver Implant Framework
|
|
Copyright (C) 2023 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 (
|
|
"fmt"
|
|
|
|
"github.com/bishopfox/sliver/client/assets"
|
|
"github.com/bishopfox/sliver/client/command/ai"
|
|
"github.com/bishopfox/sliver/client/command/aka"
|
|
"github.com/bishopfox/sliver/client/command/alias"
|
|
"github.com/bishopfox/sliver/client/command/backdoor"
|
|
"github.com/bishopfox/sliver/client/command/cursed"
|
|
"github.com/bishopfox/sliver/client/command/dllhijack"
|
|
docscmd "github.com/bishopfox/sliver/client/command/docs"
|
|
"github.com/bishopfox/sliver/client/command/edit"
|
|
"github.com/bishopfox/sliver/client/command/environment"
|
|
"github.com/bishopfox/sliver/client/command/exec"
|
|
"github.com/bishopfox/sliver/client/command/extensions"
|
|
"github.com/bishopfox/sliver/client/command/filesystem"
|
|
"github.com/bishopfox/sliver/client/command/hexedit"
|
|
"github.com/bishopfox/sliver/client/command/info"
|
|
"github.com/bishopfox/sliver/client/command/kill"
|
|
"github.com/bishopfox/sliver/client/command/network"
|
|
"github.com/bishopfox/sliver/client/command/pivots"
|
|
"github.com/bishopfox/sliver/client/command/portfwd"
|
|
"github.com/bishopfox/sliver/client/command/privilege"
|
|
"github.com/bishopfox/sliver/client/command/processes"
|
|
"github.com/bishopfox/sliver/client/command/reconfig"
|
|
"github.com/bishopfox/sliver/client/command/registry"
|
|
"github.com/bishopfox/sliver/client/command/rportfwd"
|
|
"github.com/bishopfox/sliver/client/command/screenshot"
|
|
"github.com/bishopfox/sliver/client/command/sessions"
|
|
"github.com/bishopfox/sliver/client/command/shell"
|
|
"github.com/bishopfox/sliver/client/command/socks"
|
|
"github.com/bishopfox/sliver/client/command/tasks"
|
|
"github.com/bishopfox/sliver/client/command/wasm"
|
|
"github.com/bishopfox/sliver/client/command/wireguard"
|
|
client "github.com/bishopfox/sliver/client/console"
|
|
consts "github.com/bishopfox/sliver/client/constants"
|
|
"github.com/reeflective/console"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// SliverCommands returns all commands bound to the implant menu.
|
|
func SliverCommands(con *client.SliverClient) console.Commands {
|
|
sliverCommands := func() *cobra.Command {
|
|
sliver := &cobra.Command{
|
|
Short: "Implant commands",
|
|
CompletionOptions: cobra.CompletionOptions{
|
|
HiddenDefaultCmd: true,
|
|
},
|
|
}
|
|
if !con.IsCLI {
|
|
sliver.SilenceErrors = true
|
|
sliver.SilenceUsage = true
|
|
}
|
|
|
|
// Utility function to be used for binding new commands to
|
|
// the sliver menu: call the function with the name of the
|
|
// group under which this/these commands should be added,
|
|
// and the group will be automatically created if needed.
|
|
bind := makeBind(sliver, con)
|
|
|
|
// [ Core ]
|
|
bind(consts.SliverCoreHelpGroup,
|
|
ai.Commands,
|
|
docscmd.Commands,
|
|
reconfig.Commands,
|
|
// sessions.Commands,
|
|
sessions.SliverCommands,
|
|
kill.Commands,
|
|
// use.Commands,
|
|
tasks.Commands,
|
|
pivots.Commands,
|
|
aka.ImplantCommands,
|
|
)
|
|
|
|
// [ Info ]
|
|
bind(consts.InfoHelpGroup,
|
|
// info.Commands,
|
|
info.SliverCommands,
|
|
screenshot.Commands,
|
|
environment.Commands,
|
|
registry.Commands,
|
|
extensions.SliverCommands,
|
|
)
|
|
|
|
// [ Filesystem ]
|
|
bind(consts.FilesystemHelpGroup,
|
|
edit.Commands,
|
|
hexedit.Commands,
|
|
filesystem.Commands,
|
|
)
|
|
|
|
// [ Network tools ]
|
|
bind(consts.NetworkHelpGroup,
|
|
network.Commands,
|
|
rportfwd.Commands,
|
|
portfwd.Commands,
|
|
socks.Commands,
|
|
wireguard.SliverCommands,
|
|
)
|
|
|
|
// [ Execution ]
|
|
bind(consts.ExecutionHelpGroup,
|
|
shell.Commands,
|
|
exec.Commands,
|
|
backdoor.Commands,
|
|
dllhijack.Commands,
|
|
cursed.Commands,
|
|
wasm.Commands,
|
|
)
|
|
|
|
// [ Privileges ]
|
|
bind(consts.PrivilegesHelpGroup,
|
|
privilege.Commands,
|
|
)
|
|
|
|
// [ Processes ]
|
|
bind(consts.ProcessHelpGroup,
|
|
processes.Commands,
|
|
)
|
|
|
|
// [ Aliases ]
|
|
bind(consts.AliasHelpGroup)
|
|
|
|
// [ Extensions ]
|
|
bind(consts.ExtensionHelpGroup)
|
|
|
|
// [ Post-command declaration setup ]----------------------------------------
|
|
|
|
// Load Aliases
|
|
aliasManifests := assets.GetInstalledAliasManifests()
|
|
for _, manifest := range aliasManifests {
|
|
_, err := alias.LoadAlias(manifest, sliver, con)
|
|
if err != nil {
|
|
con.PrintErrorf("Failed to load alias: %s", err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
// Load Extensions
|
|
extensionManifests := extensions.GetAllExtensionManifests()
|
|
for _, manifest := range extensionManifests {
|
|
mext, err := extensions.LoadExtensionManifest(manifest)
|
|
// Absorb error in case there's no extensions manifest
|
|
if err != nil {
|
|
//con doesn't appear to be initialised here?
|
|
//con.PrintErrorf("Failed to load extension: %s", err)
|
|
fmt.Printf("Failed to load extension: %s\n", err)
|
|
continue
|
|
}
|
|
|
|
for _, ext := range mext.ExtCommand {
|
|
extensions.ExtensionRegisterCommand(ext, sliver, con)
|
|
}
|
|
}
|
|
|
|
// [ Post-command declaration setup ]----------------------------------------
|
|
|
|
// Everything below this line should preferably not be any command binding
|
|
// (although you can do so without fear). If there are any final modifications
|
|
// to make to the server menu command tree, it time to do them here.
|
|
|
|
sliver.InitDefaultHelpCmd()
|
|
sliver.SetHelpCommandGroupID(consts.SliverCoreHelpGroup)
|
|
|
|
// Compute which commands should be available based on the current session/beacon.
|
|
con.ExposeCommands()
|
|
|
|
return sliver
|
|
}
|
|
|
|
return sliverCommands
|
|
}
|