破解无线网WEP/WPA密码

Tags: 安全

这篇文章其实是我做计算机安全实验课TA给学生写的一个Tutorial。写的很费力,花了不少时间。我把这个文档翻译成中文,发在博客上,希望对别人学习网络安全有所帮助,并且让大家认识到无线网络的的密码并不安全。

我在这里首先鼓励大家自己动手实践,但是未经许可,千万别去破解别人的无线路由器密码。一切责任后果自行承担

废话不多说,正文开始。 

1. 准备工作

网卡。首先,你得有一个至少支持monitor模式的网卡(内置的,外接的均可),如果支持packet injection更好。检查网卡是否支持monitor模式,可以用以下命令。(在这里假定你的操作系统是Linux并且安装好相应程序,如果没有,请看后面教程)

iwconfig

这个时候,屏幕上会显示你的无线接口。

lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bg  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on

wlan0 即是我们所用网卡的接口。输入以下命令开启monitor模式:

iwconfig wlan0 mode monitor; iwconfig

如果成功,屏幕上会显示wlan0已经是运行在monitor模式下。

lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bg  Mode:Monitor  Tx-Power=0 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:on


测试网卡是否支持数据包注入(Packet Injection),可以参考这个说明

这里 有一个很详细的网卡介绍,大家可以参考.

操作系统(OS)

由于大多数网卡的Windows驱动不支持monitor模式并且多数黑客工具都只有Linux版(或者有Windows版,但是功能跟Linux版本相比很弱),建议大家都是用Linux。如果对Linux不熟悉的话,请自行Google各种教程。

Ubuntu是一个很好用(易用)的Linux发行版,你可以选用它。但是在这里,我推荐大家使用BackTrack Linux来玩破解。BackTrack是一个专门针对安全实验和入侵检测的Linux发行版。它集成了几乎所有我们破解WEP/WPA密码所需要用到工 具。(如果你用Ubuntu,你可以学习如何安装这些工具)你可以从BackTrack的Homepage上下载最新版本的BackTrack。你可以安装它,创建Live CD,用虚拟机玩等等。

驱动跟工具

某些网卡支持Injection,但是驱动并不支持。如果没有通过之前提到的Injection test,可以试着参考这个教程给网卡驱动打个补丁。

在本文中,我们最主要用到的工具是aircrack-ng。 Aircrack-ng是一个 802.11 WEP/WPA-PSK密码破解工具包. 它包含了许多工具比如airodump-ng,aireplay-ng。我会在后文的实例中进行介绍。如果你用BackTrack,Aircrack- ng工具已经安装好了。如果你是使用其他Linux发行版,参考这个教程来安装Aircrack-ng.

我们可能会用到Kismet。Kismet是一个很棒的无线网络抓包工具。由于篇幅关系,我就不在这里进行详细介绍了。大家可以前往Kismet的homepage进行了解。这里还有一个关于Kismet的教程

另外,如果你的显卡够牛逼,在破解WPA密码的时候,你可以使用pyrit来加速破解。它的homepage同样有很好的教程。

2. 破解WEP密码

现在进入正题。

首先要说的是:WEP is weak。由于WEP在每个数据包中都加入一个24-bit的被称作Initalization Vector(IV)的向量,所以我们如果能够捕获足够的IV,破解的难度将会大打降低。不过简单的被动式捕获很难在短时间内捕获足够的IV,我们这个时 候将使用Injection技术来加速这一个过程。Injection的远离是往无线网中发送大量的假数据包,从而产生大量的IV。

现在,我会一步一步详细的介绍如何来破解WEP密码。

首先,你需要记录一下这些信息(有一些信息你可以从后文中了解如何获取)。

  • MAC address of wirless card (我的网卡MAC地址是00:0E:3B:1E:2F:71)

  • BSSID ?(目标接入点Access Point的MAC地址,是C0:C1:C0:01:81:2D)

  • ESSID (无线网名称,这里是“hackme”)

  • Access point channel (无线网络信道,我这里是6)

  • Wireless interface (无线网接口,wlan0,开启monitor模式之后是mon0)

我这里使用的是BackTrack的VMware镜像,你可以从它的官方网站下载。下载好之后,用VMware Player打开,选择“I copied it”。

   

接下来BackTrack启动。使用用户名”root”以及密码”toor”登录。如果你是用的Live CD,不需要输入用户名密码。

输入’startx‘进入图形界面。

OK,接下来做一些例行测试,如果你已经做过了,可以跳过。打开一个控制台窗口(Konsole)输入’ifconfig -a‘来查看所有的网络接口,如果你的网卡被正常识别,可以从这里看到你的网卡MAC地址。(wlan0)就是我的网卡。

   

接下来,输入’iwconfig‘来查看所有无线网接口。

接下来,用airmon-ng来尝试打开monitor模式。

airmon-ng start wlan0 6


这条命令中,wlan0参数是我们的无线网卡接口,6是我们要监听的信道。这里我们必须把监听的信道设成我们所要破解 Access Point的信道,否则无法破解成功。(关于如何查看AP的信道,可以用后文中的aireplay-ng的-9参数)。如果成功开启monitor模式, 屏幕将显示如下信息。(注意,monitor的接口是?mon0而不是wlan0)。

如果airmon-ng报告可能有其他进程会引起冲突,你可以用’kill PID'来干掉那些进程。

下一步是Injection测试,当然如果已经做过,也可以跳过。

aireplay-ng -9 mon0


参数-9表示injection test mode,而mon0是monitor接口名。输入’aireplay-ng‘可以看到详细的使用说明。(这个工具很强大,我们之后还会用到,建议大家读读说明)

当然也可以指定一个AP。

aireplay-ng -9 -e hackme mon0


接下来我们使用airodump-ng来捕获IV.

airodump-ng -c 6 --bssid C0:C1:C0:01:81:2D -w output mon0


-c 6 表示信道。 --bssid C0:C1:C0:01:81:2D 是AP的MAC地址?-w capture 捕获的包的文件名前缀。

当开始捕获,屏幕会显示如下信息。

接下来我们又要用到aireplay-ng。这一次,我们用它来做一个假验证把自己的网卡接口接入到AP。开启另外一个控制台(让airodump-ng继续抓包),输入:

aireplay-ng -1 0 -e hackme -a C0:C1:C0:01:81:2D -h 00:0E:3B:1E:2F:71 mon0


-1表示伪造验证。参数是重新验证的时间(0秒)。-e hackme是无线网的名称。看到这个画面,就说明接入成功了。

接下来,我们用aireplay-ng来进行Replay攻击。

aireplay-ng -3 -b C0:C1:C0:01:81:2D -h 00:0E:3B:1E:2F:71 mon0


当开始运行,aireplay-ng会捕获ARP请求,并不停的会放。如果你像我一样只是做实验(不是在真正的网络环境中),可能会出现以下的画面。

注意到了么,捕获到 0 ARP requests和 0 ACKs。这是因为这个无线网没有任何的Traffic。现在我用另外一台电脑接入无线网,并且ping随便什么IP。这会让aireplay-ng捕获到ARP请求,从而开始Replay attack!

当我们切换到airodump-ng的屏幕,我们也能发现,数据在暴涨!”#/s”的意思就是每秒捕获多少个包(IVs)。不过这个速度取决与很多因素,如果是运行在虚拟机里面,速度可能会很慢。正常情况下,速度一般在200-400左右。

20分钟之后,我们已经捕获到327531个数据包。这么多IV已经足够我们破解WEP密码了。

接下来,我们开始破解WEP密码。

aircrack-ng -b C0:C1:C0:01:81:2D output*.cap

很快,密码就宣告破解了。hackme的密码是ABCDE54321(谁设的密码这么简单啊?)

当然,我们还可以用FMS/Korek方式来破解。

aircrack-ng -K -b C0:C1:C0:01:81:2D output*.cap

参数-K就是使用Korek的意思。

最后,测试一下是否这个密码是有效的,我们用这个密码来连这个网络。用这组命令:

ifconfig wlan0
iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY
dhclient wlan0

如果能连上,说明密码正确,破解成功!

3. 破解WPA/WPA2密码

这里我简单的介绍一下如何破解WPA密码。WPA是一种比WEP高级的无线网标准。它避免了再数据包中嵌入IV。坦率的说,破解WPA的成功率不是 很大,而且耗费的时间相当长。破解WPA密码的基本原理是,当一个合法用户连接Access Point是,会产生一个四方认证的握手包,我们捕获这个包,然后对其暴力破解。如果猜密的字典中有合法用户设置的密码,即可被破解。建议用户在加密时尽 可能使用无规律的字母与数字,以提高网络的安全性。破解WPA密码相对于破解WEP密码有一个优势,就是我们捕获了这个包之后可以离线破解,不容易被发 现。劣势是,如果我们运气不好,在我们捕获的过程中,没有合法登录,我们就要伪装成合法用户对路由器进行攻击,迫使合法用户掉线重新连接,在此过程中获得 一个有效的握手包。

下面我依然用试验中的例子来讲解如何破解WPA密码。

首先,我假定你已经做完之前的各项例行检查程序。

然后,我们开始用airodump抓包。需要注意的是,如果output前缀已经有文件存在,airodump-ng会继续往里面写入。所以开始之前删除之前的文件或者换一个前缀。

Airodump-ng开始抓包。

你必须等到”WPA handshake: C0:C1:C0:01:81:2D”在屏幕的右上方出现,即airodump-ng成功捕获到握手包。

现在我们用aireplay-ng来让合法用户掉线。

aireplay-ng -0 1 -a C0:C1:C0:01:81:2D -c 00:0F:B5:FD:FB:C2 mon0

如果捕获到数据包,按下 ‘Ctrl+C‘ 来让airodump-ng停止抓包。

现在可以离线暴力破解了。

在破解之前,我们需要准备暴力破解的字典。Aircrack-ng有一篇介绍如何获取字典。它提供了两个选择,下载别人制作好的或者自己制作。如果是下载的话,这里有一些好东东。如果你想自己生成字典,推荐使用crunch,你可以从它的homepage下载。不幸的是,它的主页压根就没什么介绍(至少目前是),你需要读源代码来了解它是怎么工作的。 (P.S. 我找到一个介绍crunch命令的网页,或许会有些帮助)

接下来,我们要用aircrack-ng来破解WPA密码:

aircrack-ng -w wordlist.lst -b C0:C1:C0:01:81:2D output*.cap

Aircrack-ng开始运行,它循环测试字典中每一个词。如果你足够幸运,WPA密码正好在你的字典里面,你会看见最后的密码。

程序运行的时间取决于字典大小和CPU速度。

如果你GPU很强大,也可以用来帮助加速破解WPA。我们使用pyrit这个工具。这里有一个关于pyrit的教程,大家可以学习学习。

你可以使用 ‘pyrit list-cores‘ 来查看所有可用的CPU/GPU核。

在你真正进行破解之前,我建议你先来个benchmark.

pyrit benchmark

如果你的总时间跟我一样还不到2000PMKs/s的话,还是用aircrack-ng吧。

如果你再一次证明你的显卡很牛逼,那接着往下看:

首先分析一下我们的包里面有没有握手包(这步也可以跳过,因为我们已经有了……)

pyrit -r output*.cap analyze

需要注意的是,如果你的.cap文件不止一个,pyrit可能会报错。这个时候,你可以用tar命令来打包这些cap文件。

成功之后,开始破解。输入:

pyrit -r output*.cap -i wordlist.lst -b C0:C1:C0:01:81:2D attack_passthrough

如果破解成功,会出现以下画面。

至此,WPA密码破解成功!

参考

原文出处:http://ruilinliu.com/blog/2010/12/how-to-crack-wep-wpa-key/

本文链接:http://www.4byte.cn/learning/53372/po-jie-wu-xian-wang-wep-wpa-mi-ma.html