内网穿透初探
学习一下网络知识
主要学习下DNS,因为在后续的内网渗透与应急感觉用的会比较多
DNS解析流程有个大致的了解 这里就不一一细谈了主要还是学习一下域名解析记录
域名解析记录
A记录(快递地址簿)****
代表Address,用来指定域名对应的IP地址,如将item.taobao.com指定到115.238.23.xxx,将switch.taobao.com指定到121.14.24.xxx。A****记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址
例子:item.taobao.com
指向115.238.23.xxx
,相当于告诉快递员“淘宝商品页的快递送到这个地址”
特点:
- 一个域名只能对应一个IP,但多个域名可以指向同一个IP(比如淘宝的多个子页面共用服务器)
- 如果服务器搬家(换IP),得手动改地址簿
MX记录(邮局分拣员)
Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如taobao.com域名的A记录IP地址是115.238.25.xxx,如果将MX记录设置为115.238.25.xxx,即xxx@taobao.com的邮件路由,DNS会将邮件发送到115.238.25.xxx所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址
功能:专门管邮件的“快递路线”。告诉别人发到你这个域名的邮件该送到哪个邮局(邮件服务器)。例子:xxx@taobao.com
的邮件会被送到115.238.25.xxx
的服务器,而网页访问还是走A记录的地址
特点:
- 可以设多个邮局,优先级数字小的先送(比如优先级5的服务器优先于10的)
- 邮件服务器坏了,备用的会自动顶上
CNAME记录(连锁店别名)
Canonical Name,即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将aaa.com解析到bbb.net、将ccc.com也解析到bbb.net,其中bbb.net分别是aaa.com和ccc.com的别名
功能:给域名起外号,多个名字指向同一个地方
例子:aaa.com
和ccc.com
都指向bbb.net
,就像“肯德基”和“KFC”是同一家店
特点
换服务器地址时,只用改主域名(比如bbb.net
的IP),所有别名自动更新,不用一个个改
必须带前缀(比如www.taobao.com
不能直接叫taobao.com
,得用A记录
NS记录(快递公司总部)
为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器取解析
功能:指定谁负责你家域名的“快递分拣”(DNS解析)。
例子:如果你用腾讯云的DNS服务,NS记录会写成ns1.dnspod.com
,相当于把快递分拣工作外包给腾讯
特点
一个域名可以有多个分拣中心(比如主备DNS服务器)
改NS记录后,全球生效需要24-48小时(因为各地快递公司更新地址簿要时间)
TXT记录(店铺留言板)
为某个主机名或域名设置说明,如可以为ddd.net设置TXT记录为”这是XXX的博客”这样的说明
功能:给域名贴个“备注标签”,用来验证身份或防垃圾邮件
例子:
验证域名所有权:加一条TXT记录google-site-verification=xxxxx
,证明你是网站主人
防垃圾邮件:设置SPF记录v=spf1 include:aliyun.com ~all
,告诉别人“只有阿里云的服务器能代表我发邮件
特点
内容随便写,但格式要对(比如SPF记录必须以v=spf1
开头)
简单学习了这个协议的基础知识之后就准备学习内网穿透的知识
内网渗透系列:内网穿透(隧道)学习
内网穿透概述
内网穿透
利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。
简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1指向的Web站点。举例子我的世界你想要进行局域网联机同时要和你远在天边的朋友进行游玩那么盆友就可以利用内网穿透来达成与你玩的目的
这里简单了解下NAT协议
**NAT 协议(Network Address Translation)** 的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。 |
那么想要实现内网穿透就得进行一个搭建桥梁
常见实现方式(怎么搭桥?)****
端口映射 反向代理,vpn隧道,NAT进行穿透
端口映射就是把内网的ip都映射到一个公网的端口上面所有的流量就会从公网ip端口进入到你的内网ip
反向代理 就比如说我们租一个云服务器,别人对云服务的公网ip进行访问,服务器会把别人访问的流量转接到我们内网的设备
例子:用frp工具把内网摄像头画面通过云服务器暴露给外网
vpn就是开一条新的隧道 直接到公网不会经过运营商
内网穿透(NAT穿透)蒋NAT设备记录用来把内部网络的私有IP地址映射到外部网络的合法IP地址上去
搞清楚内网穿透的基本原理
终于到隧道技术了
隧道技术
一种通过使用互联网络的基础设施在网络之间传递数据的方式,包括数据封装、传输和解包在内的全过程。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。
用大白话解释隧道技术,可以想象成给数据包穿马甲过安检的过程
整个过程就像快递员要把违禁品送过安检,必须套个合法的包装,过了检查再拆开还原。具体分三步走
第一步:穿马甲(封装)
伪装需求:比如你想从公司内网传文件到家里,但公司防火墙只允许HTTP流量通过(其他协议全被拦截)
套外壳:隧道技术会把你的文件数据(比如SSH协议)塞进HTTP协议的“快递箱”里,并贴上新标签(如目标地址、端口)
就像把私密信件塞进月饼盒,外面写上“节日礼品”蒙混过关。
第二步:过安检(传输)
走公共通道:伪装后的数据包通过公共网络(比如互联网)传输,防火墙看到的是合法的HTTP流量,直接放行比如用微信发文件,实际走的是微信的服务器通道,而不是直连对方电脑。
路由中转:数据包可能经过多个路由器跳转,但全程保持“马甲”不脱落类似快递从北京发广州,中间经过郑州、长沙中转站,但月饼盒始终完好
第三步:拆包裹(解包)
目的地验收:数据包到达目标服务器后,隧道端点(如家里的VPN服务器)会拆掉HTTP的“马甲”,还原出原始数据(SSH协议文件)
就像收到月饼盒后拆开,取出里面的私密信件精准投递:解包后的数据按原始协议送到最终设备(如你的家用电脑)
按所处的协议层分层:
- 网络层隧道:ICMP隧道等
- 传输层隧道:TCP隧道、UDP隧道
- 应用层隧道:HTTP、DNS、SSH等隧道
那么内网里面除了刚才了解到的http协议可以通过防火墙进行出网还有哪些协议呢
内网主机所有可能的出网方式
允许ICMP协议出网
ICMP隧道原理
首先了解下ICMP这个协议
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
简单来说就是一个检查网络可不可达的协议
原理
由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。
通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。
进行隐蔽传输的时候,肉鸡(防火墙内部)运行并接受外部攻击端的ICMP_ECHO数据包,攻击端把需要执行的命令隐藏在ICMP_ECHO数据包中,肉鸡接收到该数据包,解出其中隐藏的命令,并在防火墙内部主机上执行,再把执行结果隐藏在ICMP_ECHOREPLY数据包中,发送给外部攻击端。
比如:攻击者把指令whoami
藏在数据区,发到内网机器,内网机器执行whoami
后,把结果藏在回应的ICMP包里发回去
ICMP隧道能干啥?
绕过防火墙:
内网机器被限制只能ping
外网,但通过ICMP隧道可以偷偷传文件或远程控制
- 例子:公司内网禁止SSH,但允许
ping
,员工用ICMP隧道传敏感文件。
反弹Shell
攻击者通过ICMP包向受害机器发送指令,受害机器执行后通过ICMP包返回结果,实现远程控制
内网穿透
内网主机通过ICMP隧道将流量转发到公网代理,实现访问外网资源(类似早年免费上网的“黑科技”)
三、ICMP隧道的优缺点
优点
隐蔽性强:数据藏在ping
包里,防火墙一般不管
无需端口:直接利用系统内核处理ICMP协议,不依赖特定端口
缺点
速度慢:ICMP包默认数据量小(Windows 32字节、Linux 48字节),大文件传输像蚂蚁搬家
不稳定:ICMP是无连接协议,容易丢包,适合传小指令,不适合高清视频
权限要求高:修改ICMP数据需要管理员权限(普通用户玩不转)
检测
检测同一来源 ICMP 数据包的数量。一个正常的 ping 每秒最多只会发送两个数据包,而使用 ICMP隧道的浏览器在同一时间会产生上千个 ICMP 数据包。
寻找那些响应数据包中 payload 跟请求数据包不一致的 ICMP 数据包。
注意那些 ICMP 数据包中 payload 大于 64 比特的数据包。当然 icmptunnel 可以配置限制所有数据包的 payload 为 64 比特,这样会使得更难以被检测到。
检查ICMP数据包的协议标签,例如icmptunnel 会在所有的 ICMPpayload 前面增加 ‘TUNL’ 标记以用于识别隧道,这就是特征。
允许特定的TCP或UDP协议端口出网
络防火墙允许特定的TCP或者UDP端口出网,比如连接外网的22、53、80、443、3389等常见应用的默认监听端口。
在一个不能出网的网络环境里面,将所有的TCP和UPD端口都探测一遍,通常都能发现有一两个常见的端口能出网。这通常是由于网络管理员的错误配置和偷懒行为导致:
比如配置的防火墙规则前后矛盾,解析的时候遇到匹配规则就退出执行
比如网络管理员配置允许web服务器访问另一子网的mysql数据库的3306端口。网络管理员配置时偷懒,可能会直接放行web服务器到任意ip地址的3306端口
DNS隧道
允许特定的应用层协议出网(比如HTTP、SSH、DNS等应用层协议)
这种网络防火墙能识别应用层的协议,放行允许出网的协议,比如HTTP、SSH、DNS、RDP等应用层协议
原理
端口不和服务绑定,可以传输任何数据。
详细聊聊这段文字 端口不和服务绑定是什么意思呢,意思就是DNS的53号端口它如果只能传递带有DNS头的数据包的流量这个就叫做端口和服务进行绑定但是DNS端口可以传输文件,指令甚至可以传输电影 这个意思就是端口和服务没有进行绑定 这就造成了我们对DNS隧道的一个利用
C&C服务器在建立连接后将指令传递给客户端上的后门程序。
客户端后门程序进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果,如果互联网上有一台攻击者设置的服务器,那么服务器就可以依靠域名解析的响应进行数据包的交换,从DNS协议的角度来看,这样的操作只是反复查询某个或者某些特定的域名并且得到解析结果,但其本质是,DNS预期的返回结果应该是一个IP地址,而事实上返回的可以是任意字符串,包括加密的C&C指令,从而将其他协议封装在DNS协议中进行传输。
DNS隧道(直联型)木马的通信结构如下:
直连也就是客户端直接和指定的目标DNS Server(Authoritative NS Server)连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度更快,但是隐蔽性较差,容易被WAF或者IDS设备探测到,另外限制比较高,很多实际场景下不允许攻击者来自定义DNS Server,否则很容易被发现。
名中继型:
通过DNS递归查询实现的中继隧道,比较隐蔽,但同时因为数据包到达目标DNS Server前需要经过多个节点,所以速度上较直连慢很多(其实就类似伪造一台私有DNS Server,当然也许大佬神仙们真有一台权威DNS Server也说不一定哈),同时我们还需要规避本地客户端的DNS缓存,这里可以使用随机域名生成算法(DGA)。很多恶意软件利用该算法生成随机域名,有效绕过黑名单检测,通过轮询的方式尝试连接,寻找C2控制中心。(DGA算法的检测测方法也有不少,这里按下不表)
①受到木马控制的PC将数据封装到DNS数据报文里,向位于内网的本地域名服务器请求查询baidu.com
②本地域名服务器透过防火墙向根域名服务器发送查询请求
③经过大量的递归重定向,查询请求发到baidu.com的(伪造)权威域名服务器
④baidu.com(伪造)权威域名服务器是在攻击者控制下,解析并发送响应包
⑤dns响应包穿透内网防火墙
⑥进入内网
⑦本地域名服务器将响应包返回给受控客户端检测:
缺点:
- 速度慢:DNS查询需要来回多次,传大文件会急死人。
- 可能被检测:防火墙发现大量异常DNS请求会报警。
- 需要自建NS服务器:得有个服务器随时待命处理查询。
检测
- 每个IP地址的DNS流量异常,DNS报文数量大
- DNS消息中TXT或NULL等不常用的记录类型多
- DNS消息中域名有部分固定不变
- DNS服务器的地理位置异常
- 访问非受信的DNS服务器
- 基于请求域名长度及请求频率统计分析方法
- dnscat 查询中包含了dnscat 字符串
SMB隧道
SMB(Server Message Block)协议是一种在计算机网络中共享文件、打印机和其他资源的通信协议。它最初由微软开发,用于在局域网中的计算机之间共享文件和资源,445端口运行