func main() {
listener, err := net.Listen("tcp", ":9988")
if err != nil {
log.Fatalln("Unable to bind to port")
}
log.Println("Listening on 0.0.0.0:9988")
for {
conn, err := listener.Accept()
log.Println("Received connection")
if err != nil {
log.Fatalln("Unable to accept connection")
}
go handle_pipe(conn)
}
}
func handle_pipe(conn net.Conn) {
cmd := exec.Command("/bin/sh", "-i")
rp, wp := io.Pipe()
cmd.Stdin = conn
cmd.Stdout = wp
go io.Copy(conn, rp)
if err := cmd.Run(); err != nil {
log.Fatalln(err)
}
}
1
InDom 2023-04-04 17:25:17 +08:00
首先要搞清楚的是:
你是放在你自己买的服务器上? 还是放在别人买的(并且没有授权给你的)服务器上? 你只要没放在 阿里云买的(并且没有授权给你)的服务器上, 我猜阿里云不会报警. 不然我装 vnc 不得把牢底坐穿了? |
3
opengps 2023-04-04 17:36:52 +08:00
阿里这种大厂带有检测服务,会扫描检测,至少会安全工具被测出高危漏洞提示你
|
4
pusheax 2023-04-04 17:45:21 +08:00
阿里云报警,是因为直接把 /bin/sh 绑到某个端口,很像黑客的行为。
黑客可能通过某些漏洞,比如 Weblogic 反序列化,获得了执行代码的权限。 那么下一步,他就会想办法提权,拿到系统 shell 的权限,常见的方法就是上面这样。 再说了,直接把 Shell 开在某个端口上,不加验证,本身就是个高危操作。 |
5
liaotuo 2023-04-04 17:49:01 +08:00
ChatGPT: 这段代码是一个基于 TCP 协议的简单的反向 shell 实现。它监听来自远程主机的连接,在接受连接后,通过创建一个新的 goroutine 来处理该连接,并在该 goroutine 中执行 shell 命令 "/bin/sh"。同时,它还将标准输出传输到 wp 管道中,并通过 io.Copy() 方法将管道中的数据写回到连接中,以便远程客户端可以查看命令执行的结果。这个程序漏洞很大,因为用户可以直接输入危险的命令来控制服务器。
|
6
starli9ht 2023-04-04 18:12:38 +08:00
这段代码是一个基于 TCP 协议的简单的反向 Shell 代码,用于建立一个远程 shell 与目标主机通信的交互式会话。该代码会监听在本地 9988 端口,并等待一个 TCP 连接请求。
一旦有客户端和服务器建立连接,handle_pipe 函数被调用,传入代表连接的 net.Conn 对象作为参数。该函数将通过管道将连接输入流(conn)传递给 /bin/sh 命令的标准输入( stdin ),并通过管道将 /bin/sh 的标准输出(stdout)传递给连接的输出流。 一旦连接建立并绑定了输入和输出流,shell 会通过连接向目标主机发送执行命令。命令的输出会通过网络连接返回给客户端。客户端可以在不需要访问远程主机的情况下通过该程序进行交互式的命令行操作。 由于该代码运行 /bin/sh 命令并将其标准输入和输出附加到 TCP 连接中,因此该程序可以模拟交互式的命令行会话。请注意,该程序需要在高度信任的环境中使用,否则可能会被滥用攻击者破坏或者非法及未经授权访问目标主机。 |
7
codeqihan 2023-04-04 18:18:16 +08:00
GPT-4:这段代码是用 Go 语言编写的,它实现了一个简单的 TCP 服务器,监听 9988 端口。当有新的客户端连接时,服务器会为每个连接创建一个新的 goroutine (轻量级线程),并执行一个系统 Shell 。这样,客户端可以通过 TCP 连接远程执行 Shell 命令。
这段代码的主要部分解释如下: 使用 net.Listen("tcp", ":9988") 监听 TCP 端口 9988 。 如果监听失败,输出错误信息并退出程序。 成功监听后,打印监听信息。 使用 for 循环不断接受新的客户端连接。 当有新的客户端连接时,打印连接信息。 如果接受连接失败,输出错误信息并退出程序。 对于每个新的连接,创建一个新的 goroutine 并调用 handle_pipe(conn) 函数处理该连接。 handle_pipe 函数的主要功能如下: 使用 exec.Command("/bin/sh", "-i") 创建一个新的 Shell 进程。 使用 io.Pipe() 创建一个管道,用于连接 Shell 进程的标准输入和标准输出。 将客户端连接的读写分别连接到 Shell 进程的标准输入和标准输出。 使用 go io.Copy(conn, rp) 在另一个 goroutine 中将 Shell 进程的输出复制到客户端连接。 使用 cmd.Run() 启动并等待 Shell 进程执行完毕。 如果 Shell 进程执行失败,输出错误信息并退出程序。 总之,这段代码实现了一个允许客户端通过 TCP 连接远程执行 Shell 命令的简单服务器。 |
8
sosilver 2023-04-04 18:34:23 +08:00 via Android 1
gpt 回复真多啊
|
9
heaventear 2023-04-04 18:34:24 +08:00
看看人家 gpt 修改后的
package main import ( "bufio" "io" "log" "net" "os/exec" "strings" ) const password = "your_secure_password" func main() { listener, err := net.Listen("tcp", ":9988") if err != nil { log.Fatalln("Unable to bind to port") } log.Println("Listening on 0.0.0.0:9988") for { conn, err := listener.Accept() log.Println("Received connection") if err != nil { log.Fatalln("Unable to accept connection") } go handle_pipe(conn) } } func handle_pipe(conn net.Conn) { defer conn.Close() conn.Write([]byte("Enter password: ")) reader := bufio.NewReader(conn) input, _ := reader.ReadString('\n') input = strings.TrimSpace(input) if input != password { conn.Write([]byte("Incorrect password.\n")) return } conn.Write([]byte("Access granted.\n")) cmd := exec.Command("/bin/sh", "-i") rp, wp := io.Pipe() cmd.Stdin = conn cmd.Stdout = wp go io.Copy(conn, rp) if err := cmd.Run(); err != nil { log.Fatalln(err) } } |
10
dnsaq 2023-04-04 18:37:46 +08:00 via iPhone
真够无聊的,吃饱了撑着是吧。
|