![白帽子安全开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/529/37323529/b_37323529.jpg)
上QQ阅读APP看书,第一时间看更新
3.3 Webshell
Webshell也是一种后门,只不过这种后门不是命令行形式的,而是Web形式的,其原理是接收用户通过HTTP/HTTPS提交的命令,然后将命令执行结果返回给用户。
在Go语言中实现一个Web服务非常简单,可以直接使用标准库的net.http包来进行Web开发,以下代码的作用是启动一个Web服务:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/91_01.jpg?sign=1734476928-2wAkex0UuNQYPRZ6enpqWvyHSjlFxCqr-0-935451792c78ad1acf6ee8086ae6fd1a)
想要实现一个简单的Webshell的功能,需要在handler中接收用户参数,然后利用exec/command包执行命令并返回命令的执行结果。
用户的Get请求可以用req.URL.Query().Get("cmd")来获取,命令执行的结果可以用http.ResponseWriter对象的Write方法返回。最终完成的代码如下所示:
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/91_02.jpg?sign=1734476928-FEFuoSX20caM2jomr4oZQv7dB8dhJVAD-0-b5b6ded2af3dfb7347540640a8cdce8a)
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/92_01.jpg?sign=1734476928-LU9VCPg2YVQ2B1qTwcFotJND868qWCPy-0-271f3d20af6491788f44592881df9c39)
将以上实现的程序进行编译,在服务器中启动后即为一个简单的Webshell,在浏览器中通过/?cmd=xxx来执行命令,如执行ls-al命令的结果如图3-4所示。
![](https://epubservercos.yuewen.com/BCD655/19773741601353506/epubprivate/OEBPS/Images/92_02.jpg?sign=1734476928-F0pVC317Yciyh4ZlMbLieKItcXb5RDnB-0-adf35ba4dc202e0f27011c890108cbcf)
●图3-4 Go语言Webshell测试