Hacking with Golang

背景

根据一篇报道 显示,golang 成为继 python 之后最受黑客欢迎的工具语言。而且和 python 的差距正在缩小。golang 具有一些 python 的优势:开发块,跨平台;同时又有 python 不具有的优势:运行效率高,在暴力破解,端口扫描,爬虫等等场景,编程语言的运行效率还是很重要的。

这篇文章从几个知名 golang 安全项目的角度,看看 golang 在安全领域的使用场景和特定。

内网穿透

这里面比较知名的工具是 frp 和 ngrok,gost。这两个工具的使用场景其实不能归类为安全范围【尽管内网穿透也有安全问题,容易被黑客利用】,使用这两个工具的用户都是为了这样的目的:在一个复杂的内网环境中,我想把内网的一个服务器 ip 暴露到公网上。这种 tunnel 类型的服务,原理比较简单,类似 nginx 之类的反向代理,只不过是被代理方主要发起,要求被代理。具体流程如下:

代码语言:txt
复制
sequenceDiagram
内网ClientA->>tunnel服务: 请给我代理我本地的服务A
tunnel服务->>内网ClientA: OK
外网用户->>tunnel服务: 我想访问 A 服务
tunnel服务->>内网ClientA: 有人要访问,转发给你
内网ClientA->>tunnel服务: 服务A Response
tunnel服务->>外网用户: 服务A Response
  • ngrok 是一个比较老的工具了,目前已经5年未更新了。原理和上面的流程图说的类似,远程的 tunnel 服务为 ngrokd,本地使用 ngrok client;目前还有一些免费的 tunnel 服务,用户只需要本地使用 ngrok 注册到免费公开的 tunnel 服务上,就可以通过一个分配的域名访问自己的内部服务了,当然这种方式有极大的安全风险,很容易收到下面一节讲的中间人攻击。
  • frp 现在更为流行,支持的功能更多,一直也在维护更新中。frp 不仅支持 http 的转发,还支持 tcp/udp/dns 等请求转发。为了保证安全性,支持管理界面,token/OIDC 鉴权

代理/中间人攻击

  • gost 是个代理工具,设计得比较简单,但是提供得核心能力 http/https/sock5/quic 等代理能力却一个不少,还支持基于 iptables 的透明代理。
    • gost 中一个重要的概念是 Node, 一个 ProxyNode 代表了一个转发链路中的一环,Node 可以是不同的 Protocol 和 Transport。Node 分为 LocalNode 和 ChainNode,chain node 是远程的,需要一个 Transporter 和 一个 Connector; 而 本地Node 而用于接受本地请求,需要一个 Listener 和 一个 Handler, 这几个东西都是针对不同协议,实现不同。
    • 实际的运行流程如:LocalNode.Listener.Accept => LocalNode.Handle => 找到 Chain 里面的一个 Node,用 里面的 Client【即 Transporter/Connector 】连接到 proxy
代码语言:txt
复制
// 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)
}

  • dnscrypt-proxy 是一个支持 encrypted DNS 协议的 dns 代理
  • chisel 也是一个代理工具,功能比 gost 简单一些,主要用于通过 http 转发内网 tcp/udp 流量以穿透防火墙。

由于不同的需求,代理的种类很多,但是也有一部分危机是隐藏在代理中的,其中最重要的是中间人攻击。事实上,很多代理设计出来,就是为了做中间人攻击/钓鱼。这类代理一般是 TLS-terminating forward proxies, 即他本身是要解析 tls 协议的,这样才能获取 https 传输中的信息。他会解析用户请求,在访问远程服务器,协议出 https 返回,再做 tls 机密。代理在传输过程中可以任意修改/窃取用户或者服务端数据,比如修改 cookie/ cros 相关选项等等。两个示例的项目为 muraena 和 Modlishka

  • muraena: 用作中间人攻击的代理
  • Modlishka:和 muraena 类似,但是成熟度更高,可以用于伪造钓鱼网站,比如某些知名网站

Reverse Shell

Reverse shell 不同于 ssh 之类多命令工具,通常由攻击者运行在被攻击者的主机上,主动连接一个服务器,从服务器上接受指令并执行。这种方式很类似内网穿透中使用的方式,好处是可以穿透防火墙.

代码语言:txt
复制
sequenceDiagram
被攻击者主机->>攻击者主机: 有什么命令要执行的吗
攻击者主机->>被攻击者主机: 执行这些命令

hershell 是一个 go 语言编写的简单 reverse shell 工具。在服务端运行 socat/ncat/openssl server module 等工具都可以创建 server 用来等待 hershell 的连接;除了简单的 reverse shell,hershell 还支持注入 shellcode,对接 meterpreter 进行攻击的功能。

代码语言:txt
复制
# 服务端
$ 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 协议信息。

网络扫描

  • goscan 是一个内网扫描的工具,他会扫描内网的 ip 空间,发送 arp 包,获取主机的 ip, mac 地址,主机名,厂商等信息
  • xray 是一个对某个域名进行 OSINT【公开来源情报】信息收集的工具。具体的原理是:
    • 对于一个给定的域名,先进行子域名的扫描,扫描方式是结合一个 wordlist 和 dns 请求
    • 对于找到多子域名/ip 使用 Shodan 的 api进行信息收集(比如端口)
    • 对找到的 ip 端口,进行信息收集,比如收集 http header/https 证书/html title/dns version.hostname/ mysql/ssh 等端口的测试
  • bettercap: 支持对 wifi, 蓝牙,无线设备等进行扫描

更多

  • pspy: 一个不需要 root 权限就可以监控 linux 进程的工具
  • cameradar: RTSP(实时流传输协议,很多摄像头设备如安防监控支持这个协议) 攻击工具
  • hetty: 可以看成一个用于安全审计的反向代理
  • gocrack: 密码破解任务管理工具
  • x-crack: 弱密码破解工具
  • GoAT: 使用 Twitter 作为 C&C server 的 Trojan 木马

参考

  • Offensive_Go