内网有 ACL 策略,如果是白名单如何绕过
1. 利用被允许的协议和端口
这是最直接、最有效的方法。你需要找到 ACL 策略放行的协议和端口,然后利用它们建立隧道
- DNS 隧道:如果 ACL 允许 DNS 流量(通常是放行的,因为网络解析需要),这是首选方法
- 原理:将你的恶意流量(例如 C2 通信)编码成 DNS 查询请求(通常是子域名),发送到你控制的公网 DNS 服务器。你的服务器解析后,再将响应数据编码在 DNS 回复包中返回
- 优点:几乎所有网络都允许 DNS 流量出网,隐蔽性极高
- 工具:
iodine
和dnscat2
是最经典的 DNS 隧道工具
- ICMP 隧道:如果 ACL 允许 ICMP 流量(例如允许
ping
),你就可以利用它- 原理:将你的数据封装在 ICMP Echo 请求包的载荷中,通过
ping
的方式发送出去,并从回复包中接收数据 - 优点:同样利用了网络诊断的合法协议,不易被察觉
- 工具:
ptunnel
或icmpsh
- 原理:将你的数据封装在 ICMP Echo 请求包的载荷中,通过
- HTTP/S 隧道:如果内网允许访问特定网站或端口的 HTTP/S 流量,你可以伪装成这种流量
- 原理:将你的 C2 通信封装在 HTTP/S 请求和响应中。你可以利用 CDN、合法域名或者特定的代理服务器来伪装流量
- 优点:流量看起来像是正常的网页浏览,非常具有迷惑性
- 工具:
reGeorg
/Neo-reGeorg
、sliver
、Cobalt Strike
都可以配置 HTTPS 监听器来绕过
2. 利用白名单 IP 或域名
除了协议和端口,ACL 策略也可能基于 IP 地址或域名进行白名单控制
- 利用合法代理服务器:如果 ACL 允许访问某个合法的代理服务器(例如公司内部的 Web 代理),你可以尝试利用这个代理来转发你的流量
- 原理:配置你的攻击工具,让其通过这个代理服务器进行通信
- 挑战:代理服务器可能会有日志记录和内容审计
- 利用被允许的域名进行 C2 通信:如果 ACL 只允许访问特定的几个域名(比如
*.microsoft.com
),你可以尝试使用域名欺骗(Domain Fronting)技术,将你的 C2 服务器 IP 隐藏在这些域名背后- 原理:将你的 C2 服务器部署在某个云服务商(如 AWS、Azure)上,然后利用这些服务商的合法域名作为流量的“正面”,而你的真实 C2 流量则通过 SNI 等方式悄悄地指向你的服务器
- 挑战:需要深入了解域名欺骗的原理和云服务的配置,且随着安全防御的升级,这种方法越来越难以成功
3. 利用物理或软件层面的漏洞
如果以上网络层面的方法都失败了,你可能需要考虑更底层的绕过方式
- 利用已安装的软件进行通信:有些内网机器上会安装一些特殊的软件,这些软件可能拥有出网的白名单权限
- 原理:例如,一些企业的远程协助软件、杀毒软件、或者特定的企业应用,它们的通信流量是允许的。如果你能劫持或利用这些软件的进程,就可以将你的流量注入其中
- 挑战:需要深入分析目标机器上运行的软件,并找到其漏洞或利用点
- DLL 注入或进程注入:这是一种更高级的攻击方式
- 原理:将你的恶意代码注入到某个拥有出网白名单权限的合法进程中。这样,你的流量就会伪装成该进程的流量,从而绕过 ACL 策略
- 优点:隐蔽性极高,可以有效绕过大多数基于网络层的防御
- 挑战:技术门槛高,需要对进程和内存有深入理解