![白帽子安全开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/529/37323529/b_37323529.jpg)
上QQ阅读APP看书,第一时间看更新
3.1 正向后门
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/86_01.jpg?sign=1738874674-yluXdJWVSAcmarsA7qWN8VJqRgpFlenm-0-8358ec2effb0bac994bc7be6b08ae1c6)
正向后门也叫Bind shell,后门程序通过Socket的bind函数监听一个特定的端口,攻击者连接后可以得到一个shell。
传统的Socket编程中实现一个TCP服务器的流程如下。
1)使用socket()创建一个Socket。
2)使用bind()绑定Socket。
3)使用listen()监听一个端口。
4)使用accept()接受客户端的连接。
5)使用send()与receiver()与客户端进行通信。
Go语言标准库的net包对Socket进行了封装,实现TCP服务只需使用net.Listen监听端口,然后用listen对象的Accept()方法接受连接并返回一个net.Conn对象,之后用net.Conn对象的Read()与Write()方法即可进行通信。
以下为一个TCP服务器的示例,正向后门就在这个示例的基础上开发的。
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/87_01.jpg?sign=1738874674-1YoVyOf0k67yFuumO9kKiZlalYMK10ne-0-314934bda463361a6bf8d0beacba1a22)
这个示例的功能是接收客户端的数据,并原样返回给客户端,用telnet或nc连接后可以看到效果,如图3-1所示。
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/88_01.jpg?sign=1738874674-vrfn8S8bzdB21TjbAH7KgScYu0dpv7DZ-0-fd34cf29094ff9a63c10c2398ca55e8b)
●图3-1 TCP回声程序
Go语言标准库的os/exec包可以执行系统命令,也可以为标准输入、输出及错误指定处理对象,将net.Conn对象分别赋值给Stdin、Stdout与Stderr,即可实现命令的发送以及执行结果的返回,代码如下所示:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/88_02.jpg?sign=1738874674-J9YK8TqLcX2e73ZhAKW4rk0N1pLHER9n-0-da0195895cfc9e75a9329850cb1f0959)
将以上程序进行编译,执行./main :99表示后门监听在99端口,然后用nc连接到该端口就可以看到效果了,如图3-2所示。
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/88_03.jpg?sign=1738874674-baZSw5yvHxqb7WxcVGTsjcDUYJGbJaNz-0-00a81544a99db8b1b8aed9a1fc27883d)
●图3-2 正向后门测试