这段代码放到服务器,是什么后果?如果是阿里云会直接报警,封掉服务器?

2023-04-04 17:22:34 +08:00
 gitxuzan
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)
	}
}

3977 次点击
所在节点    Go 编程语言
13 条回复
InDom
2023-04-04 17:25:17 +08:00
首先要搞清楚的是:

你是放在你自己买的服务器上?
还是放在别人买的(并且没有授权给你的)服务器上?

你只要没放在 阿里云买的(并且没有授权给你)的服务器上, 我猜阿里云不会报警.

不然我装 vnc 不得把牢底坐穿了?
gitxuzan
2023-04-04 17:32:01 +08:00
@InDom 自己的服务器,以前其他方式搞封过,检测出漏洞,必须联系客服才能解封,自己给自己上传一个漏洞,哈哈
opengps
2023-04-04 17:36:52 +08:00
阿里这种大厂带有检测服务,会扫描检测,至少会安全工具被测出高危漏洞提示你
pusheax
2023-04-04 17:45:21 +08:00
阿里云报警,是因为直接把 /bin/sh 绑到某个端口,很像黑客的行为。
黑客可能通过某些漏洞,比如 Weblogic 反序列化,获得了执行代码的权限。
那么下一步,他就会想办法提权,拿到系统 shell 的权限,常见的方法就是上面这样。
再说了,直接把 Shell 开在某个端口上,不加验证,本身就是个高危操作。
liaotuo
2023-04-04 17:49:01 +08:00
ChatGPT: 这段代码是一个基于 TCP 协议的简单的反向 shell 实现。它监听来自远程主机的连接,在接受连接后,通过创建一个新的 goroutine 来处理该连接,并在该 goroutine 中执行 shell 命令 "/bin/sh"。同时,它还将标准输出传输到 wp 管道中,并通过 io.Copy() 方法将管道中的数据写回到连接中,以便远程客户端可以查看命令执行的结果。这个程序漏洞很大,因为用户可以直接输入危险的命令来控制服务器。
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 连接中,因此该程序可以模拟交互式的命令行会话。请注意,该程序需要在高度信任的环境中使用,否则可能会被滥用攻击者破坏或者非法及未经授权访问目标主机。
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 命令的简单服务器。
sosilver
2023-04-04 18:34:23 +08:00
gpt 回复真多啊
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)
}
}
dnsaq
2023-04-04 18:37:46 +08:00
真够无聊的,吃饱了撑着是吧。
daimaosix
2023-04-04 20:54:33 +08:00
neochen13
2023-04-05 07:26:25 +08:00
管理员好,楼里连续几个 gpt 回复,不一一点出了……真反感
@Livid
Livid
2023-04-05 12:06:11 +08:00
@daimaosix
@neochen13

谢谢,那几个账号现在已经被彻底 ban 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/929790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX