ICMP和DNS隧道
ICMP隧道
扩展知识面(大多数时候用的是应用层隧道)
ICMP介绍
ICMP(InternetControl MessageProtocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协 议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用 11月漏洞挖掘.md 主要概念有:
1.确认ip数据包是否成功到达目的地
2.通知源主机发送ip数据包丢失的原因
3.ICMP是基于IP协议工作的
4.ICMP只能作用于IPV4,IPV6下
类型
3 终点不可达
11 时间超过
12 参数问题
5 改变路由
8或0 回送请求或回答
13或14 时间戳请求或回答
代码
进一步区分某种类型中的几种不同情况。
检验和
用于检验整个ICMP报文。但是IP首部检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP 报文不产生差错。
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文
ICMP抓包分析
一般PING命令就是使用ICMP的协议执行 ping 8.8.8.8
第一个包是请求的数据包
第二个数返回的数据包
可以看到data 中的字段数固定的值(windows可能是abcd…… linux可能是!”#$%………)
ICMP隧道原理
由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。把数据隐藏在ICMP数据包包头的data字段中,建立隐蔽通道。实现绕过防火墙和入侵检测系统的阻拦。
优点:
1.ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低
2.利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限
ICMP隧道实验
反弹shell
ICMP做隧道一般有这么几种,一种是反弹shell 的形式
icmpsh使用简单,使用的是python,项目地址:https://github.com/bdamele/icmpsh
该工具安装起来比较复杂,使用的是python2,
1、下载工具,然后执行安装依赖的命名
1 |
|
2、执行禁用icmp回复
1 |
|
3、开启监听命令
1 |
|
4、在受害者机器执行反弹命令
1 |
|
5、收到反弹shell的内容

6、查看流量(没有加密)
搭建隧道
ICMP可以用作反弹shell,也可以用作隧道,这里我们使用工具:pingtunnel
下载地址;https://github.com/esrrhs/pingtunnel/releases/tag/2.7
首先将需要的版本下载下来然后进行隧道搭建
1、开启服务端
1 |
|
2、开启客户端
1 |
|
3、可以查看他的用法
来看一下网络拓扑才能更好理解这个隧道
1、开启服务端,在VPS执行
1 |
|
2、靶机执行开启转发的命令
1 |
|
将来自和本地9999端口连接的流量,转发给118.178.134.226的7777端口,然后我们就可以创建一个 CS的监听器完成操作
3、设置监听器
4、生成木马然后看一下点击链接
5、查看流量
DNS隧道
DNS协议介绍
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一 级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址,DNS除了提供主机名到IP地址转换外,还提供如下服务:主机别名、邮件服务器别名、负载分配等。
DNS报文格式
DNS 定义了两种报文 ,一种为查询报文;另一种是对查询报文的响应,称为响应报文。无论是查询报文还是响应报文
1 |
|
PING一下百度看一看流量
请求数据包
返回数据包

一般DNS隧道中通信的内容隐藏在请求区域和回答区域中,可能在不同的type类型中隐藏的地方不同
DNS隧道搭建(dnscat)
dnscat是可以用来进行DNS隧道进行通信的,工具有客户端和服务端,下载地址:https://github.com/iagox86/dnscat2
工具安装非常简单
服务端安装:
1 |
|
客户端安装
1 |
|
1、在kali 中执行如下命令开启服务端
1 |
|
2、在windows使用powercat连接
1 |
|
3、收到反弹shell的隧道

DNS隧道流量分析
分析上述隧道的流量
通过分析发现DNS请求类型是TXT,为某个主机名或域名设置的说明。并且域名的有所变化,通过观看应该是16进制加密的,分期其中一段为(C:\Users\Ad.ministrator>.pc.test)