Files

156 lines
5.1 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 (
"os"
"github.com/bishopfox/sliver/client/command/alias"
"github.com/bishopfox/sliver/client/command/armory"
"github.com/bishopfox/sliver/client/command/beacons"
"github.com/bishopfox/sliver/client/command/builders"
"github.com/bishopfox/sliver/client/command/c2profiles"
"github.com/bishopfox/sliver/client/command/certificates"
"github.com/bishopfox/sliver/client/command/clean"
"github.com/bishopfox/sliver/client/command/crack"
"github.com/bishopfox/sliver/client/command/creds"
"github.com/bishopfox/sliver/client/command/exit"
"github.com/bishopfox/sliver/client/command/generate"
"github.com/bishopfox/sliver/client/command/hosts"
"github.com/bishopfox/sliver/client/command/info"
"github.com/bishopfox/sliver/client/command/jobs"
"github.com/bishopfox/sliver/client/command/licenses"
"github.com/bishopfox/sliver/client/command/loot"
"github.com/bishopfox/sliver/client/command/monitor"
"github.com/bishopfox/sliver/client/command/operators"
"github.com/bishopfox/sliver/client/command/reaction"
"github.com/bishopfox/sliver/client/command/sessions"
"github.com/bishopfox/sliver/client/command/settings"
sgn "github.com/bishopfox/sliver/client/command/shikata-ga-nai"
"github.com/bishopfox/sliver/client/command/socks"
"github.com/bishopfox/sliver/client/command/taskmany"
"github.com/bishopfox/sliver/client/command/update"
"github.com/bishopfox/sliver/client/command/use"
"github.com/bishopfox/sliver/client/command/websites"
"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"
)
// ServerCommands returns all commands bound to the server menu, optionally
// accepting a function returning a list of additional (admin) commands.
func ServerCommands(con *client.SliverClient, serverCmds func() []*cobra.Command) console.Commands {
serverCommands := func() *cobra.Command {
server := &cobra.Command{
Short: "Server commands",
CompletionOptions: cobra.CompletionOptions{
HiddenDefaultCmd: 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(server, con)
if serverCmds != nil {
server.AddGroup(&cobra.Group{ID: consts.MultiplayerHelpGroup, Title: consts.MultiplayerHelpGroup})
server.AddCommand(serverCmds()...)
}
// [ Bind commands ] --------------------------------------------------------
// Below are bounds all commands of the server menu, gathered by the group
// under which they should be printed in help messages and/or completions.
// You can either add a new bindCommands() call with a new group (which will
// be automatically added to the command tree), or add your commands in one of
// the present calls.
// Core
bind(consts.GenericHelpGroup,
exit.Command,
licenses.Commands,
settings.Commands,
alias.Commands,
armory.Commands,
update.Commands,
operators.Commands,
creds.Commands,
crack.Commands,
certificates.Commands,
clean.Command,
)
// C2 Network
bind(consts.NetworkHelpGroup,
jobs.Commands,
websites.Commands,
wireguard.Commands,
c2profiles.Commands,
socks.RootCommands,
)
// Payloads
bind(consts.PayloadsHelpGroup,
sgn.Commands,
generate.Commands,
builders.Commands,
)
// Slivers
bind(consts.SliverHelpGroup,
use.Commands,
info.Commands,
sessions.Commands,
beacons.Commands,
monitor.Commands,
loot.Commands,
hosts.Commands,
reaction.Commands,
taskmany.Command,
)
// [ 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.
// Only load reactions when the console is going to be started.
if !con.IsCLI {
n, err := reaction.LoadReactions()
if err != nil && !os.IsNotExist(err) {
con.PrintErrorf("Failed to load reactions: %s\n", err)
} else if n > 0 {
con.PrintInfof("Loaded %d reaction(s) from disk\n", n)
}
}
server.InitDefaultHelpCmd()
server.SetHelpCommandGroupID(consts.GenericHelpGroup)
return server
}
return serverCommands
}