打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何窃取开发人员的本地数据库
userphoto

2016.08.07

关注

如果你正在阅读本文并且你是一个软件开发人员,你很有可能在本地运行一些服务。Redis, Memcached和Elasticsearch 都是许多开发者常用的软件产品。但你可能不知道的是,这些运行在本地的服务通过任何你访问过的网站就能访问到,也就是为那些想要窃取你的本地数据的坏人提供了途径。

如何操作

虽然我没有用到任何新的方法,但是还从没有人像我即将展示的这样把攻击手段这样结合起来的。我结合了两种不同的攻击方式,分别是“跨协议脚本”和“DNS Rebinding(

DNS重绑定)”。

关于Redis, Memcached和Elasticsearch

第一个所用的技术比较古老,叫做“跨协议脚本”。2001年所发表的一片论文详细介绍了此攻击方法,主要是利用了Redis和Memcached都有的一个基于行的协议,该协议忽略任何无效指令。这意味着如果一个浏览器发送了如下的HTTP请求到localhost:6379 (Redis通常运行的地址),Redis会自然执行SET命令。

POST / HTTP/1.1

Host: localhost:6379

SET abc 123

QUIT

我们可以发送一个请求如下所示:

Elasticsearch的协议是完全基于HTTP的,所以不需要任何把戏就能和它通信。

虽然我们可以执行任何的命令,我们实际上不能取回结果。这是因为浏览器的同源策略(same-origin policy),该策略确保无法从来自其他域的请求中读数据。这时就用到我们的第二个技术了!

DNS Rebinding

为了绕过原先的保护策略,我们可以使用一项叫做DNS Rebinding的技术。DNS Rebinding能够以极低的TTL通过公共域获得任意服务器的访问权限。一旦一个浏览器连接了这个站点,这个站点就会立即修改DNS记录,将它指向一个不同的IP地址(比如120.0.0.1)。这会指向站点运行攻击者代码的地址,一个私人的IP地址。之后,就可以利用这个站点窃取服务器上的任何数据了,不过只对通过授权的客户端有效。

PoC

我将此攻击的原理放在extractdata.club上了。这个站点会连接Redis, Memcached和Elasticsearch 运行在localhost的默认端口。

一分钟之后该链接应该显示如下图所示:

虽然我的PoC只能取回每个服务器的版本信息,不难想象创造一些scraper

插件就可以爬取整个数据库并抓取所有的数据。代码可以点击这里获取。

解决方法

不幸的是,我们没有从数据库的结构上解决这个问题的方法。你可以为你的服务器设置密码,但是只要服务器的默认设置有漏洞,还是会有很多用户的数据被窃取。针对Redis

和Memcached我能想到的唯一方法就是添加Host:作为QUIT的同义词,这样只要它被识别成为一个HTTP请求,连接就会立刻终止。

另一个可以改善的地方在浏览器中。浏览器供应商可以使用“DNS pinning”,从而自动忽略网址加载之后的DNS修改。

或者浏览器供应商可以把Redis和Memcached的端口添加到他们的端口黑名单上,这个名单已经包括了一些常见协议比如SMTP和IRC。这并不算一个一劳永逸的结构上的解决方法,且新涌现的服务还是容易受到攻击。

深入讨论

对有些人来说他们的开发数据库中有数据被盗可能不是什么大事,但是读和写权限可能会导致远程代码的执行。举例说明,攻击者可能在自己的payload上覆盖一些看起来像是Ruby或Python处理数据的东西,而这其实会对开发者的计算机造成危害。

总结

我们想要证明的是为什么信息安全极难保证。这个攻击针对于多个软件产品,不仅针对它们的正确工作方法给出了充分的指示,还指出了正是它们之间的通信导致了漏洞的出现。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
StackOverflow 这么大,究竟在用什么硬件设备?
反制 Webdriver - 从 Bot 到 RCE 进发
1 分钟抗住 10 亿请求!某些 App 是怎么做到的? | 原力计划
数据多的时候为什么要使用redis而不用mysql?
网络目前较先进技术
APP直播源码,是时候对分布式缓存系统进行比较了
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服