根据一篇报道 显示,golang 成为继 python 之后最受黑客欢迎的工具语言。而且和 python 的差距正在缩小。golang 具有一些 python 的优势:开发块,跨平台;同时又有 python 不具有的优势:运行效率高,在暴力破解,端口扫描,爬虫等等场景,编程语言的运行效率还是很重要的。
这篇文章从几个知名 golang 安全项目的角度,看看 golang 在安全领域的使用场景和特定。
这里面比较知名的工具是 frp 和 ngrok,gost。这两个工具的使用场景其实不能归类为安全范围【尽管内网穿透也有安全问题,容易被黑客利用】,使用这两个工具的用户都是为了这样的目的:在一个复杂的内网环境中,我想把内网的一个服务器 ip 暴露到公网上。这种 tunnel 类型的服务,原理比较简单,类似 nginx 之类的反向代理,只不过是被代理方主要发起,要求被代理。具体流程如下:
sequenceDiagram
内网ClientA->>tunnel服务: 请给我代理我本地的服务A
tunnel服务->>内网ClientA: OK
外网用户->>tunnel服务: 我想访问 A 服务
tunnel服务->>内网ClientA: 有人要访问,转发给你
内网ClientA->>tunnel服务: 服务A Response
tunnel服务->>外网用户: 服务A Response
Transporter
和 一个 Connector
; 而 本地Node 而用于接受本地请求,需要一个 Listener
和 一个 Handler
, 这几个东西都是针对不同协议,实现不同。// Transporter is responsible for handshaking with the proxy server.
type Transporter interface {
Dial(addr string, options ...DialOption) (net.Conn, error)
Handshake(conn net.Conn, options ...HandshakeOption) (net.Conn, error)
// Indicate that the Transporter supports multiplex
Multiplex() bool
}
// Connector is responsible for connecting to the destination address.
type Connector interface {
// Deprecated: use ConnectContext instead.
Connect(conn net.Conn, address string, options ...ConnectOption) (net.Conn, error)
ConnectContext(ctx context.Context, conn net.Conn, network, address string, options ...ConnectOption) (net.Conn, error)
}
// Listener is a proxy server listener, just like a net.Listener.
type Listener interface {
net.Listener
}
// Handler is a proxy server handler
type Handler interface {
Init(options ...HandlerOption)
Handle(net.Conn)
}
由于不同的需求,代理的种类很多,但是也有一部分危机是隐藏在代理中的,其中最重要的是中间人攻击。事实上,很多代理设计出来,就是为了做中间人攻击/钓鱼。这类代理一般是 TLS-terminating forward proxies
, 即他本身是要解析 tls 协议的,这样才能获取 https 传输中的信息。他会解析用户请求,在访问远程服务器,协议出 https 返回,再做 tls 机密。代理在传输过程中可以任意修改/窃取用户或者服务端数据,比如修改 cookie/ cros 相关选项等等。两个示例的项目为 muraena 和 Modlishka
Reverse shell 不同于 ssh 之类多命令工具,通常由攻击者运行在被攻击者的主机上,主动连接一个服务器,从服务器上接受指令并执行。这种方式很类似内网穿透中使用的方式,好处是可以穿透防火墙.
sequenceDiagram
被攻击者主机->>攻击者主机: 有什么命令要执行的吗
攻击者主机->>被攻击者主机: 执行这些命令
hershell 是一个 go 语言编写的简单 reverse shell 工具。在服务端运行 socat/ncat/openssl server module 等工具都可以创建 server 用来等待 hershell 的连接;除了简单的 reverse shell,hershell 还支持注入 shellcode,对接 meterpreter 进行攻击的功能。
# 服务端
$ ncat --ssl --ssl-cert server.pem --ssl-key server.key -lvp 1234
Ncat: Version 7.60 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 172.16.122.105.
Ncat: Connection from 172.16.122.105:47814.
[hershell]> whoami
desktop-3pvv31a\lab
# 客户端【即被攻击端】
➜ ./hershell
chashell 是一个类似的 reverse shell,不同的是 chashell client/server 端都由自己实现,他使用 dns 进行通信【dns 隧道,这种通信更不易被防火墙识别】,dns 中带了自定义的 protobuf 协议信息。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。