![白帽子安全开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/529/37323529/b_37323529.jpg)
上QQ阅读APP看书,第一时间看更新
3.2 反向后门
反向后门也叫Reverse shell,是指被控制的机器作为客户端主动连接控制端的服务器,然后控制端Server就可以对被控制端Client进行操作了。
Go语言的网络客户端实现起来非常方便,只需调用net包中的Dial()即可,它的原型如下:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/89_01.jpg?sign=1739373802-agTGCqKH7ubNMbrUblU3wkkpI3F4sbLV-0-e48c9c225b4ffbb11c6d3eeb3def40ef)
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"等,使用方式如下所示:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/89_02.jpg?sign=1739373802-i4rPgyqwD5dF0PLlLTfjFM1hvB1r17kt-0-2fbf2f249e50b7959f8d58b8ec21116c)
正向后门是将exec/command包的cmd对象的Stdin、Stdout与Stderr的值赋值为服务器端net.Conn对象,而反向后门正好相反,需要全部赋值为客户端的net.Conn对象,完整的代码如下所示:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/89_03.jpg?sign=1739373802-2UI31jhoJ4dpcqdJ25IAXFYWdB8pW5j7-0-c878536dc43a102594f316baffd1fec5)
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/90_01.jpg?sign=1739373802-6IDI2NEPfHElW5SHfNi1fF0H4EgFCm6x-0-8211e4fab95352db2bb0ecac26b683a5)
将以上程序进行编译,用nc-p 99监听本地99端口,执行./main 127.0.0.1:99即可得到一个反向的shell,效果如图3-3所示。
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/90_02.jpg?sign=1739373802-HBLHXjUlN1BqQDKkkibxTHDMoti34Ri6-0-6f5dad6b4e1d536773e4fe03d6904780)
●图3-3 反向后门测试