HTTP/1.1 200 OK Date: Wed, 24 Oct 2018 16:20:21 UTC Server: HTTP Server X-Frame-Options: DENY Connection: Keep-Alive Keep-Alive: timeout=15, max=15 Last-Modified: Thu, 23 Aug 2018 08:59:55 UTC Cache-Control: must-revalidate, private Expires: -1 Content-Language: en Content-Type: text/html Content-Length: 182 <html><head> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="refresh" content="0;url=/ui/status"> </head></html>
响应包含X-Frame-Options并设置为了DENY(感谢上帝),这意味着如果我不能通过在iframe标签中渲染路由器主页。此外,由于恶意JavaScript代码将被注入到与路由器不同的域中,因此Same-Origin-Policy将阻止与路由器本身的任何交互。对于这些问题,我提出我所想到的一个简单的解决方案,不过注意我的方法可能不是唯一的解决方案,思路如下:
注入两段不同的JavaScript代码。第一段JavaScript代码将iframe在受感染的页面中添加内容。将iframe的src参数指向路由器的IP地址。如前所述,路由器的IP地址X-Frame-Options设置为DENY。因此iframe将无法加载路由器的页面。但是,当创建iframe的JavaScript代码执行时,受害者仍然连接的是虚假访问点(还记得我前面提到的优势点吗?)。这意味着对路由器IP地址的请求将由虚假接入点处理……多么方便。因此,虚假接入点可以拦截对路由器IP地址执行的任何请求,并通过以下网页进行响应:
1.包含第二段JavaScript代码,这段代码将真正执行对真实路由器的请求
2.响应中没有X-Frame-Options HTTP 头
3.响应中包括用于缓存页面的HTTP头。
由于虚假接入点被当成了合法的路由器,因此浏览器将缓存一个页面,该域名是路由器的IP地址,从而绕过了Same-Origin-Policy和X-Frame-Options。最后,一旦受感染的客户端回到家连接到家庭路由器时:
1.第一个JavaScript代码将添加一个iframe指向路由器的IP地址,
2.在iframe中会加载已缓存的包含了第二段恶意的JavaScript路由器主页
3.第二段恶意JavaScript会被执行并攻击路由器。
第一段恶意JavaScript非常简单,它只需附加一个iframe。第二段恶意JavaScript有点棘手,因为它必须执行多个HTTP请求来强制登录,然后访问包含Wi-Fi密码的页面并将密码发送给攻击者。在我测试D-Link时,登录请求如下所示:
POST /ui/login HTTP/1.1 Host: 192.168.1.1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:63.0) Gecko/20100101 Firefox/63.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://192.168.1.1/ui/login Content-Type: application/x-www-form-urlencoded Content-Length: 141 DNT: 1 Connection: close Upgrade-Insecure-Requests: 1 userName=admin&language=IT&login=Login&userPwd=e8864[REDACTED]6df0c1bf8&nonce=558675225&code1=nwdeLUh
内容版权声明:除非注明,否则皆为本站原创文章。