Skip to content

Latest commit

 

History

History
167 lines (94 loc) · 6.84 KB

[snowming]-2021-8-15-测试内网连通性.md

File metadata and controls

167 lines (94 loc) · 6.84 KB

0x01 前言

写作本文的初衷,是在探索 Cobalt Strike 的 C2 隐蔽上线、与 Beacon 通信的过程中,遇到了一些涉及内网机器出网刺探、隧道技术的地方。比如,一般来说 Cobalt Strike 的团队服务器,也就是通常来讲的 C2 一般都开在公网上,这样可以便于团队成员的合作。但是为了避免团队服务器被反制、反捅,我们可以把团队服务器开在本地,借助 SSH 隧道与公网 VPS 之间进行流量转发,这样可以提高我们团队服务器的行为安全。又比如、我们可以通过多级反代,在目标受害机器跟真实的团队服务器中间建立一条隐蔽通道,这样可以增加溯源反制成本。又或者,我们可以加入一些域名前置的方法,或者结合以上两种方法构建更复杂的 Beacon 和 listener 之间的通信路线,当然是在时延可被接受的前提下。

于是我想做一点关于探测内网连通性的总结。在真实的项目中,我也遇到过需要探测内网连通性的场景。探测分为两个方面:

  1. 探测内网中的机器到外网的连通性,也就是通常说的能否正常出网、通过什么协议出网
  2. 探测内网机器之间的连通性

不仅要探测内网中的机器跟外网的连通性,也要探测一些内网机器之间的连通性。比如,一些 172 开头的办公区机器,很显然它不具备与外网之间的连通性,但是它与 DMZ 中的某台边缘机器是否相通?某个内网中如果具备多种不同的内网段、某台机器具有多个网卡,某台可出网的被控机器和这些内网机器之间是否相通?

探测内网机器能否出网很容易理解,因为要跟 C2 通信。但是探测内网机器之间的连通性有什么作用呢?

假设这样一个场景,当前我们已经拿到了目标内网中的一台机器的 beacon,然后又通过其它方式获取了了同内网下的另一台 windows 机器的本地 administrator 密码,并且这台机器的 smb[445 端口]能正常 通信。但是,因为某些设置,这台 windows 机器并不能正常访问外网,也就是说没法再正常的反弹 beacon shell 了。在这种情况下,我依然可以通过当前仅有的这个 beacon shell 把内网那台不能正常访问外网的机器也一块给带出来。比如在 Cobalt Strike 中可以借助 windows/beacon_smb/bind_pipe 监听器,这是一个专门为多层内网正向级联而设计的监听器。

但是这样在内网中借助已控 Beacon 去带出其他纯内网机器的 Beacon shell 的前提是,我们需要对内网环境有更多的了解。所有的 bind 都有个最大的问题就是目标系统各种防火墙的问题,如果目标系统直接阻断了 445 端口通信,很显然就 bind 不过去了。

上面这个例子比较特殊,smb 不属于 7 层协议。这里举这个例子主要是想说明:探测内网机器的连通性,我们主要是探测哪些协议被防火墙允许。

在内网渗透中,「通道构建」是非常重要的一环。包括:常规出网刺探,常规 HTTP 脚本代理,正反向 tcp 端口转发,正反向 socks 4a/5 代理,SSH 加密隧道利用,DNS 隧道利用,ICMP 隧道利用, GRE 隧道利用,基于各类 WEV 服务的正向端口复用等等......

在本文中,主要介绍常规出网探测。只有了解了这个,在后面的构建隐藏通信隧道这些环节,才能根据实际网络情况来选择合适的工具。

0x02 概述

C2 要跟内网目标机器之间进行数据传输,要经过防火墙。防火墙会允许一些协议,禁止一些协议,所以我们要先探测协议开放情况以及端口开放情况:

内网连通性判断:

1、ICMP 协议

  • ping 命令

2、 TCP 协议

  • nc 命令

3、 HTTP 协议

  • curl 命令

4、 DNS 协议

  • nslookup 命令
  • dig 命令

隐藏通信隧道技术:

1、网络层隧道

  • IPv6 隧道
  • ICMP 隧道

2、 传输层隧道:

  • TCP(可能被拦截)
  • UDP(可能被拦截)

3、 应用层隧道:

  • SSH
  • HTTP
  • DNS(基本都开放)

0x03 操作

主要就是我想用我的 C2 对此目标进行命令与控制,使用要探测 C2 机器和目标机器之间的连通性。在实际情况中,可能通过代理进内网,不过基本操作是一样的。

title

假设我的攻击机器(或者C2) IP 为:192.168.168.101

1、使用 ICMP 协议探测连通性

在测试机器中:

shell ping -n 1 -a 192.168.168.101

title

如上图 ICMP 协议不通。

探测是否出外网更简单,直接 ping 外网网站:

ping www.baidu.com

2、使用 HTTP 协议探测连通性

可以使用 curl 命令,这是一个命令行下的文件传输工具,可以用于上传或下载,支持包括 HTTP、FTP、HTTPS 等多种协议。

假设 C2 在80端口开了个 HTTP 网页服务:

curl 192.168.168.101:80

探测目标对外网的 HTTP 协议连通性也很简单:

curl www.baidu.com:80

3、使用 TCP 协议探测连通性

HTTP 通说明 TCP 一定通,HTTP 不通再看 TCP 是不是通。

title

比如在 C2 上用 SimpleHttpServer 在 8080 端口开一个服务器(这里,Http 用的是 tcp 的80端口),然后使用 NC 探测(nc 默认探测 TCP,加上 -u 参数探测 UDP):

nc -zv 192.168.168.101 80

注:

  • -z 参数:zero-I/O mode [used for scanning]

如果可以连通,那么就可以使用 TCP 下的隧道穿透工具。

4、使用 DNS 协议探测连通性

探测 DNS 协议连通性使用两个工具:nslookupdig

探测对外连通性:

nslookup www.baidu.com 1.1.1.2 #指定内网中的DNS服务器
nslookup www.baidu.com 8.8.8.8
nslookup www.baidu.com 233.6.6.6 #指定阿里DNS服务器
nslookup www.baidu.com #不指定DNS服务器,使用默认DNS服务器
dig www.baidu.com #不指定DNS
dig @233.6.6.6 www.baidu.com #指定(阿里)DNS

DNS 协议一般都通。

0x04 总结

总之探测了内网的连通性,之后才能使用协议对应的隧道搭建工具。

比如 Ipv6 隧道,ICMP 隧道,ICMP 隧道工具有 PingTunnelicmptunnelIcmpshpowershell icmp 等。


拓展资料:

  1. Intranet Space - Dns Tunneling,倾旋的博客,倾旋,2018年12月18日

参考资料:

  1. 红队 [ 蓝军 ] 完整战术 生命周期 简述,MITRE | ATT&CK 中文站,Klion,2019年2月15日
  2. 内网通道构建入门实战,MITRE | ATT&CK 中文站,Klion,2019年2月20日