新姿势传输payload:使用VID

0x00 前言

今天我们来介绍一种使用VLAN中的VID来上传/下载文本文件或者Payload的方法(这种方法及脚本仅适用于Linux环境中)。

0x01 LAN ARP与VLAN ARP帧格式对比

0x01.1 LAN ARP

0x01.2 VLAN ARP

0x01.3 对比

VLAN ARPLAN ARP多了TAG字段,TAG字段由4部分组成:

Tag字段总长4 Bytes。其中Type部分固定值为0x8100,用于将帧标记为IEEE 802.1Q帧。

上述二者的DATA字段都没有进行具体说明,本文重点不在于此,感兴趣者可自行查阅资料。

0x02 利用VID传输Payload原理

这里以传输一个文本文件为例:

  1. 查看文本文件每个字符的十六进制表示
  1. 建立一个不存在的VLAN,并设置其VID为上面的数字
  2. ping该VLAN中任意一台主机,这时会发送ARP广播报文,其中的VID字段会被填充为上面的设置值
  3. 接收端将接收到的报文组合起来便可还原文本文件

0x03 Do it!

0x03.1 建立VLAN,并设置VID

 ip link add link wlo1 name VLAN type vlan id 53

建立VLAN后,你需要为这个VLAN设置IP,并启用:

 ip addr add 192.168.110.1/24 brd 192.168.110.255 dev VLAN
 ip link set dev VLAN up

0x03.2 PING任意一台主机

ping 192.168.110.5

这时需要192.168.110.5这台主机的MAC地址,才能进一步发送ICMP报文,所以会发出ARP Request广播报文来询问192.168.110.5的MAC地址。

抓包,可以看到:

成功地将指定数据插入到了VID字段内。

0x03.3 Client接收报文

Client需要设置一定的过滤规则,才能接收这些报文。

首先,应该抓取的是广播报文:

 tcpdump -XX broadcast

其次,应该将这些报文中的ARP Request提取出来,同时VID字段位于其上一行,也应该一并提取出来:

 tcpdump -XX broadcast | grep -E '0x0010.*0806|0x0000.*8100'

最后,将VID字段提取出来:

 tcpdump -XX broadcast | grep -E '0x0010.*0806|0x0000.*8100' | grep '0x0000:' | awk  {'print $9'}

注意:在脚本实现中tcpdump使用了-c参数指定长度,这样才能避免接收无用报文。

0x04 Shell脚本及参考文章

  • NativePayload_ARP2.sh
  • Sending DATA via ARP broadcast Traffic to all systems in (LAN) by (vid tag).pdf

原文发布于微信公众号 - 渗透云笔记(shentouyun)

原文发表时间:2019-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券