CVE-2018-6574 Go语言任意代码执行漏洞

2018-05-0314:39:43 发表评论

什么是Go语言?

Go 是一个Google推出的开源编程语言,它能让构造简单、可靠且高效的软件变得更容易,且有着更高的开发效率和运行性能,因此受到了许多开发者的欢迎。

CVE-2018-6574 Go语言任意代码执行漏洞

Go 程序源码 以 *.go 结尾,通过 go build 编译成native代码。

以最简单的hello world程序为例:hello.go

  1. //  hello.go
  2. package main
  3. import "fmt"
  4. func main() {
  5.     fmt.Println("Hello, World!")
  6. }

通过go build编译出可执行程序,再运行 ./hello 。也可以直接通过 go run ./hello.go 直接在/tmp目录下编译生成可执行文件,并运行。

同时Go语言允许与C语言的互操作,即在Go语言中直接使用C代码,因为本身Go在语法等方面和C就很像,其设计者以及其设计目标都与C语言有着千丝万缕的联系。

例如下面的代码,我们可直接在Go源码文件中嵌入了C代码,并用注释包裹起来

  1. package main
  2. /*
  3. #include
  4. #include
  5. void my_print(char *str){
  6.     printf("%s\n",str);
  7. }
  8. */
  9. import "C"
  10. import "unsafe"
  11. import "fmt"
  12. func main() {
  13.     fmt.Println("Hello, World!")
  14.     s:="hello cgo"
  15.     cs:=C.CString(s)
  16.     C.my_print(cs)
  17.     C.free(unsafe.Pointer(cs))
  18. }

我们依然可以直接通过go build或go run来编译和执行,但实际编译过程中,go调用了名为cgo的工具,cgo会识别和读取Go源文件中的C元素,并将其提取后交给C编译器编译,最后与Go源码编译后的目标文件链接成一个可执行程序。

CE安全网

发表评论

您必须登录才能发表评论!