Skip to content

Commit

Permalink
Merge branch 'master' into portfwd2
Browse files Browse the repository at this point in the history
  • Loading branch information
moloch-- committed Apr 8, 2021
2 parents d218081 + deef600 commit 2a0b919
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 17 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -3,7 +3,7 @@ Sliver

⚠️ __Notice:__ Sliver is currently in __beta__, you've been warned :) and please consider [contributing](/CONTRIBUTING.md)

Sliver is an open source, cross-platform adversary simulation/red team platform, it can be used by organizations of all sizes to perform security testing. Sliver's implants support C2 over Mutual-TLS, HTTP(S), and DNS. Implants are dynamically compiled with unique X.509 certificates signed by a per-instance certificate authority generated when you first run the binary.
Sliver is an open source, cross-platform adversary simulation/red team platform, 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. Implants are dynamically compiled with unique X.509 certificates signed by a per-instance certificate authority generated when you first run the binary.

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).

Expand Down
15 changes: 11 additions & 4 deletions server/c2/tcp-wg.go
Expand Up @@ -39,7 +39,8 @@ func StartWGListener(port uint16, netstackPort uint16, keyExchangeListenPort uin
1420,
)
if err != nil {
wgLog.Panic(err)
wgLog.Errorf("CreateNetTUN failed: %v", err)
return nil, nil, nil, err
}

// Get existing server wg keys
Expand Down Expand Up @@ -78,20 +79,26 @@ func StartWGListener(port uint16, netstackPort uint16, keyExchangeListenPort uin
return nil, nil, nil, err
}

dev.Up()
err = dev.Up()
if err != nil {
wgLog.Errorf("Could not set up the device: %v", err)
return nil, nil, nil, err
}

// Open up key exchange TCP socket
keyExchangeListener, err := tnet.ListenTCP(&net.TCPAddr{IP: net.ParseIP(tunIP), Port: int(keyExchangeListenPort)})
if err != nil {
wgLog.Panic("Failed to setup up wg key exchange listener: ", err)
wgLog.Errorf("Failed to setup up wg key exchange listener: %v", err)
return nil, nil, nil, err
}
wgLog.Printf("Successfully setup up wg key exchange listener")
go acceptKeyExchangeConnection(keyExchangeListener)

// Open up c2 comms listener TCP socket
listener, err := tnet.ListenTCP(&net.TCPAddr{IP: net.ParseIP(tunIP), Port: int(netstackPort)})
if err != nil {
wgLog.Panic("Failed to setup up wg sliver listener: ", err)
wgLog.Errorf("Failed to setup up wg sliver listener: %v", err)
return nil, nil, nil, err
}
wgLog.Printf("Successfully setup up wg sliver listener")
go acceptWGSliverConnections(listener)
Expand Down
19 changes: 11 additions & 8 deletions server/cli/cli.go
Expand Up @@ -73,15 +73,15 @@ func initLogging(appDir string) *os.File {
func init() {

// Unpack
cmdUnpack.Flags().BoolP(forceFlagStr, "f", false, "Force unpack and overwrite")
rootCmd.AddCommand(cmdUnpack)
unpackCmd.Flags().BoolP(forceFlagStr, "f", false, "Force unpack and overwrite")
rootCmd.AddCommand(unpackCmd)

// Operator
cmdOperator.Flags().StringP(nameFlagStr, "n", "", "operator name")
cmdOperator.Flags().StringP(lhostFlagStr, "l", "", "listener host")
cmdOperator.Flags().Uint16P(lportFlagStr, "p", uint16(1337), "listener port")
cmdOperator.Flags().StringP(saveFlagStr, "s", "", "save file to ...")
rootCmd.AddCommand(cmdOperator)
operatorCmd.Flags().StringP(nameFlagStr, "n", "", "operator name")
operatorCmd.Flags().StringP(lhostFlagStr, "l", "", "listener host")
operatorCmd.Flags().Uint16P(lportFlagStr, "p", uint16(1337), "listener port")
operatorCmd.Flags().StringP(saveFlagStr, "s", "", "save file to ...")
rootCmd.AddCommand(operatorCmd)

// Certs
cmdExportCA.Flags().StringP(saveFlagStr, "s", "", "save CA to file ...")
Expand All @@ -94,8 +94,11 @@ func init() {
fmt.Sprintf("ca type (%s)", strings.Join(validCATypes(), ", ")))
rootCmd.AddCommand(cmdImportCA)

// Daemon
rootCmd.AddCommand(daemonCmd)

// Version
rootCmd.AddCommand(cmdVersion)
rootCmd.AddCommand(versionCmd)
}

var rootCmd = &cobra.Command{
Expand Down
15 changes: 15 additions & 0 deletions server/cli/daemon.go
@@ -0,0 +1,15 @@
package cli

import (
"github.com/bishopfox/sliver/server/daemon"
"github.com/spf13/cobra"
)

var daemonCmd = &cobra.Command{
Use: "daemon",
Short: "Start server in daemon mode",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
daemon.Start()
},
}
2 changes: 1 addition & 1 deletion server/cli/operator.go
Expand Up @@ -29,7 +29,7 @@ import (
"github.com/spf13/cobra"
)

var cmdOperator = &cobra.Command{
var operatorCmd = &cobra.Command{
Use: "operator",
Short: "Generate operator configuration files",
Long: ``,
Expand Down
2 changes: 1 addition & 1 deletion server/cli/unpack.go
Expand Up @@ -25,7 +25,7 @@ import (
"github.com/spf13/cobra"
)

var cmdUnpack = &cobra.Command{
var unpackCmd = &cobra.Command{
Use: "unpack",
Short: "Unpack assets and exit",
Long: ``,
Expand Down
2 changes: 1 addition & 1 deletion server/cli/version.go
Expand Up @@ -25,7 +25,7 @@ import (
"github.com/spf13/cobra"
)

var cmdVersion = &cobra.Command{
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print version and exit",
Long: ``,
Expand Down
2 changes: 1 addition & 1 deletion server/daemon/daemon.go
Expand Up @@ -43,7 +43,7 @@ func Start() {
if err != nil {
fmt.Printf("[!] Failed to start daemon %s", err)
daemonLog.Errorf("Error starting client listener %s", err)
return
os.Exit(1)
}

done := make(chan bool)
Expand Down

0 comments on commit 2a0b919

Please sign in to comment.