这文章很老了,起码是 2010-3-27 之前的……

    在过去的一年中,在不同家用路由器上发现很多的漏洞。在这里应该指出的是,几乎所有的SOHO路由器容易受到CSRF的攻击。通过认证绕过漏洞或者默认登录,攻击者可以修改路由器的任何设置。

    WPS的本质是帮助分配WPA密钥,而你所要做的只是按一下按钮。从攻击者的角度来看,想远程按下这个按钮是完全不可能的。幸运的是,路由器不仅提供物理WPS的按钮,还在Web管理界面上提供虚拟按钮。

    当您单击这个按钮时,它就向路由器发出了一个标准的HTTP请求,这会导致路由器激活WPS并开始为客户端提供一个WPA的Key。这是一个关键点,攻击者可以利用CSRF攻击激活WPS的,并且使用带有WPS功能的无线网卡获取并设置WPA握手包和对应的密码。

    下面我们开始对Belkin路由器进行攻击。首先制作一个如下的HTML页面:

使用 CSRF 攻击破解 WPA 密码 的方法

    这里有一个隐藏的img标记,内容是用于激活WPS功能的链接,由于Belkin路由器很容易绕过身份验证,任何内网的客户端只要浏览该网页都会在不知情的情况下激活WPS功能。当他打开我们制作的页面是,会有如下显示:

使用 CSRF 攻击破解 WPA 密码 的方法

    此时我们可以用wpspy.py查看路由器WPS的状态。我们可以清楚地看到,路由器WPS功能已经开启,并且路由器正在寻找按下WPS按钮的客户端。

使用 CSRF 攻击破解 WPA 密码 的方法

    攻击者现在可以轻松伪装成按下WPS按钮的客户端,路由器将会向我们提供了WPA密钥:

使用 CSRF 攻击破解 WPA 密码 的方法

    应该指出的是,不仅Belkin路由器受到这种攻击的影响,其他各种路由器也有相同的漏洞。如果没有认证绕过漏洞,攻击者可以简单地创建两个img标记,第一个用于设置路由器的登录用户名和密码,而第二个用于激活WPS。

    这种攻击是很难解决,即使你禁用WPS,攻击者可以使用第二个img标记来激活WPS。禁用JavaScript也毫无用处,因为你不需要使用JavaScript来执行CSRF的攻击。最好的办法就是不断学习相关知识,购买不具有认证绕过漏洞路由器,并更改默认登录用户名和密码。