Motorola/Netopia 2210 DSL调制调解器是由AT&T公司于2007年推出的一款产品。 研究发现,这个设备特别容易受到跨站请求伪造攻击的影响,所以我们就用它来演示如何通过CSRF攻击本地网设备。跨站请求伪造漏洞不仅仅只有Motorola/Netopia DSL调制调解器才有,其他DSL调制调解器也难逃厄运。默认时,大部分DSL调制调解器都没有要求对配置菜单的访问进行身份验证。之所以这样,是因为一个错误的假设,即只有受信任的设备才会出现在本地网络上。很不幸,这种假设是错误的,因为用户以及他们的浏览器都在本地网络上,但是他们并非总是可信的。人们在web上冲浪时,会有大量的内容展现在他们面前,但是好像从未注意到他们的浏览器正在不断发送的各种请求,问题就在这里,这些请求可能是用户想要发出的,但是也可能是攻击者挟持用户的浏览器发出的。
一、调制调解器的跨站请求伪造漏洞
我们之所以利用Motorola/Netopia DSL调制调解器进行演示,不仅因为它采用了一个假想的信任关系,并且允许请求转换等特性。当本地网上的用户浏览http://192.168.1.254时,他就会看到DSL的配置主页。在默认的情况下,这根本不需要身份验证——对攻击者来说,这太惬意了。
图1 进入DSL的配置主页注意,DSL的配置主页右方有一个名为“Remote Access”的菜单选项,我们点击该选项时,将进入下一画面:
图2 启用远程管理功能如您所见,默认情况下远程管理功能是禁用的,然而,好在仍然有一个缺省用户名、空密码以及一些其他选项,这些足以启用永久性远程管理功能。那还犹豫什么:我们直接单击“Enable”按钮,这会向该设备发送一个POST,这个POST看上去是这样的:
POST /Forms/remoteRES_1 HTTP/1.0
Host: 192.168.1.254
NSS_RemotePassword=blehblah&NSS_EnableWANAdminAccessRES=on&
timeoutDisable=0&Enable=Enable
这个POST将在该DSL调制调解器的远程管理功能,将密码设为blehblah,同时启用永久性远程访问功能。看到了吧,这都是不要求身份验证惹得祸,否则,我们很难做到这些。 因此如果某人精心策划了一个自动提交的JavaScript表单,那么人们就能够利用它来提交各种值,并启用它们自己的密码。所以,这会使的事情变得更糟。看起来这个DSL调制调解器不仅允许我们转换各种请求,还能接受各种值。所以,您可以将前面的POST请求转换成一个GET请求,并得到同样的效果。这意味着,只要设法让用户向下列URL发送一个请求,我们就能能够搞定这个调制解调器:
http://192.168.1.254/Forms/remoteRES_1?NSS_RemotePassword=blehblah&
NSS_EnableWANAdminAccessRES=on&timeoutDisable=0&Enable=Enable
如您所见,对用户来说,情况更加不妙了。只要用户点击了该链接,就会发出一个伪造的请求,从而启用远程管理功能,并将密码设为攻击者选择的字符串。呵呵,实际上,我们还可以通过多种不同的方式来达此目的,最简单的一个就是使用HTML的img标签,并将图像大小设为1x1像素,这样,当找不到图像时,就不会出现小红x了。
<img src="http://192.168.1.254/Forms/remoteRES_1?NSS_RemotePassword=blehblah&
NSS_EnableWANAdminAccessRES=on&timeoutDisable=0&Enable=En