![白帽子安全开发实战](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=1739522513-OBN62xVOdlts8fjpSUG8y3uTWSof7Xmr-0-4bfe0f93f0c8d4e66ce42e4bd0de4a14)
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=1739522513-WeYaY0ojOG196xklDvMpR6jSs8Wl3Ojt-0-9f79dff43ee4f0ec60c6b14e683449b7)
正向后门是将exec/command包的cmd对象的Stdin、Stdout与Stderr的值赋值为服务器端net.Conn对象,而反向后门正好相反,需要全部赋值为客户端的net.Conn对象,完整的代码如下所示:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/89_03.jpg?sign=1739522513-6zMZtepVaTE8QqtFgCd8brrYSqL1ytVQ-0-13ebf05fa905d06a334e602a879ef53c)
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/90_01.jpg?sign=1739522513-UrlWpMnO2aFSegzywM2zyExNMq92o8ej-0-e550880385fc6b3b56ec3c161fdffb18)
将以上程序进行编译,用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=1739522513-b6ZnAVUDhm3GQOPwmrvgcQKk7AveXdOu-0-8f6a8397806f714da58236c0cfb6b6b0)
●图3-3 反向后门测试