掘金 后端 ( ) • 2021-06-22 18:55
.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:30px;margin-bottom:5px}.markdown-body h2{padding-bottom:12px;font-size:24px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:18px;padding-bottom:0}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:15px}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body ul li{margin-bottom:0;list-style:inherit}.markdown-body ol li .task-list-item,.markdown-body ul li .task-list-item{list-style:none}.markdown-body ol li .task-list-item ol,.markdown-body ol li .task-list-item ul,.markdown-body ul li .task-list-item ol,.markdown-body ul li .task-list-item ul{margin-top:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:3px}.markdown-body ol li{padding-left:6px}.markdown-body .contains-task-list{padding-left:0}.markdown-body .task-list-item{list-style:none}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}

注意:本文只用于技术交流,请勿用于恶意用途。

平时我们都喜欢连接公共的免费 WIFI,其实公共 WIFI 是非常危险的,因为黑客可以连接到公共 WIFI,然后使用 ARP欺骗 的攻击手法来获取到你所有的上网数据。本文主要介绍怎么使用 ARP欺骗 来入侵公共 WIFI,让大家知道使用公共 WIFI 的危险。

上网的过程

一般来说,我们使用手机上网都需要连接无线路由器(WIFI),如下图:

图片

从上图看出,我们上网都需要连接到路由器,而且所有的数据都需要经过路由器。

那么,手机是怎样通过路由器把数据发送出去呢?

手机要把数据发送到互联网,首先需要把要发送的数据打包成 以太网帧,然后再把 以太网帧 发送给路由器,路由器收到 以太网帧 后,会把此 以太网帧 发送出去。以太网帧 由 以太网头部 和 数据 部分组成,如下图:

图片

从上图可以看到,以太网协议 的头部由 源MAC地址目标MAC地址 和 上层协议类型 组成,MAC地址 就是指机器(手机)网络接口的物理地址,比如手机可以从无线局域网信息中查看,如下图所示:

图片

源MAC地址 就是我们手机的 MAC 地址,而 目标MAC地址 就是路由器的 MAC 地址。如下图所示:

图片

但通常来说,路由器的 MAC 地址我们是不知道的,需要通过 ARP协议 来获取路由器的 MAC 地址。ARP协议 的功能就是通过目标机器的 IP地址 来获取其 MAC地址,所以我们只需要知道路由器的 IP地址 即可通过 ARP协议 来获取其 MAC地址

ARP协议 在之前的文章介绍过:ARP协议,所以这里就不再作介绍。

ARP欺骗原理

从上面的分析可知,手机要上网首先要连接到路由器,然后把要发送的数据包打包成 以太网帧,再把 以太网帧 发送给路由器。

以太网帧 需要知道路由器的 MAC地址,但通常来说我们只知道路由器的 IP地址(通常路由器的 IP地址 为 192.168.1.1),所以需要通过 ARP协议 把 IP地址 转换成 MAC地址

ARP欺骗 就是通过使用 ARP协议 把路由器的 IP地址 转换成 中间人机器 的 MAC地址,如下图所示:

图片

从上图可以看出,电脑A发送了一个 ARP消息 给手机A,告诉它 IP地址 为 192.168.1.1 的 MAC地址 为 AE:12:BD:8C:92,也就是电脑A的 MAC地址

这样,手机A就误以为路由器的 MAC地址 是 AE:12:BD:8C:92,从而每次发送数据到互联网时,都需要先把数据发送给电脑A,从而电脑A成为了 中间人,所以这个攻击也叫 中间人攻击。数据流向如下图:

图片

这样,电脑A就可以截获手机A发送的所有数据。电脑A截获到手机A的数据后,就可以修改手机A发送的数据,从而达到攻击的效果。试想一下,如果当手机使用支付宝支付时,把收款的账号改为攻击人的账号,那就会把钱转到攻击人的账号。

ARP欺骗实验

本来我想自己写个程序来实现 ARP欺骗 攻击的,但是这样可能会导致这篇文章变得枯燥,所以这里直接使用开源的 ARP欺骗 工具来做试验,这个工具就是 arpspoof,下载地址在:github.com/alandau/arp…

首先,我们把 arpspoof 下载到本机,然后确认要攻击的目标机器的 IP地址,如:192.168.1.13,然后使用 arpspoof 开始攻击,如下:

C:\> arpspoof.exe 192.168.1.13
Resolving victim and target...
Redirecting 192.168.1.13 (00:11:22:33:44:55) ---> 192.168.1.1 (AE:12:BD:8C:92)
        and in the other direction
Press Ctrl+C to stop
复制代码

看到上面的输出说明 arpspoof 已经开始工 (攻) 作 (击)。

然后,我们打开 wireshark 抓包攻击来查看手机A的上网数据包,如下图:

图片

从抓包工具的结果可以看出,IP地址 为 192.168.1.13 的数据包都经过了我们的机器,如果这时对这些数据包稍作修改,就可能会导致很严重的问题。

所以,使用公共 WIFI 是非常危险的行为,有以下几个风险:

  • 泄露账号密码。

  • 数据可能被恶意修改。

  • 收到一些奇怪的消息(如广告)。

那么,怎么杜绝这个问题呢?很简单,就是使用手机卡流量上网(笑...)。

其实,除了 中间人攻击 外,ARP欺骗 还能让连接同一个路由器的所有机器都不能上网,就是通过 ARP欺骗 将路由器的 IP地址 映射为一个不存在的 MAC地址,这样就会导致内网的机器因为把数据发送给不存在的路由器而丢包,从而导致其不能上网。

总结

这篇文章主要通过 ARP欺骗 这种攻击手段来说明,使用公共 WIFI 是一种危险的行为,所以在使用公共 WIFI 时最好不要使用移动支付,否则就可能会被盗取账号或者钱财等。

当然,看完这篇文章也不要做恶意的用途,否则后果自负(当然做恶意用途也需要点技术含量的)。