3.2 反向后门
反向后门也叫Reverse shell,是指被控制的机器作为客户端主动连接控制端的服务器,然后控制端Server就可以对被控制端Client进行操作了。
Go语言的网络客户端实现起来非常方便,只需调用net包中的Dial()即可,它的原型如下:

network为网络协议的名称,支持常见的协议,如"tcp" "tcp4" (IPv4-only) "tcp6" (IPv6-only)、"udp" "udp4" (IPv4-only)、"udp6" (IPv6-only)、"ip" "ip4" (IPv4-only)、"ip6" (IPv6-only)、"unix" "unixgram" "unixpacket"等,使用方式如下所示:

正向后门是将exec/command包的cmd对象的Stdin、Stdout与Stderr的值赋值为服务器端net.Conn对象,而反向后门正好相反,需要全部赋值为客户端的net.Conn对象,完整的代码如下所示:


将以上程序进行编译,用nc-p 99监听本地99端口,执行./main 127.0.0.1:99即可得到一个反向的shell,效果如图3-3所示。

●图3-3 反向后门测试