前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rbndr:一款功能强大的DNS重绑定服务

rbndr:一款功能强大的DNS重绑定服务

作者头像
FB客服
发布2023-02-24 12:55:03
6070
发布2023-02-24 12:55:03
举报
文章被收录于专栏:FreeBuf

关于rbndr

rbndr是一款功能强大的DNS重绑定服务,该工具的使用非常简单,主要针对DNS重绑定漏洞而设计。rbndr的服务器可以通过随机选择主机名中指定的一个地址并以非常低的ttl作为回复来响应查询。

工具运行机制

DNS重绑定是TOCTOU漏洞的一种形式,也是计算机攻击的一种形式。在这种攻击中,恶意网页会导致访问者运行客户端脚本,攻击网络上其他地方的计算机。从理论上讲,同源策略可防止发生这种情况:客户端脚本只能访问为脚本提供服务的同一主机上的内容。比较域名是实施此策略的重要部分,因此DNS重新绑定通过滥用域名系统(DNS)来绕过这种保护。

比如说,我们可以使用一个拥有API的浏览器插件来实现漏洞利用:

代码语言:javascript
复制
AllowUntrustedAccess("foobar.com");SendArbitraryRequests("foobar.com");

此时,AllowUntrustedAccess()将会向主机发送一个preflightHTTP请求:

代码语言:javascript
复制
GET /CanIDisableSecurity HTTP/1.1

如果服务返回200,则插件允许主页完全访问该主机名。这可能是一个安全漏洞,因为你可以指定一个rbndr主机名,该主机名将在你控制的主机和您不控制的主机之间切换。该插件可能允许完全访问任意ip地址(例如内部服务或本地主机),即使该服务通常不允许preflight检查。

工具下载

广大研究人员可以使用下列命令将该项目源码克隆至本地:

代码语言:javascript
复制
git clone https://github.com/taviso/rbndr.git(向右滑动,查看更多)

工具使用

对于易受此类攻击的软件,rbndr是一种简单的测试方法,无需修改/etc/hosts或设置自己的名称服务器。如果软件只将结果与主机名关联,而不与主机名和ip地址关联,那么你就可以授权自己访问任何ip地址。

主机名的格式很简单:

代码语言:javascript
复制
<ipv4 in base-16>.<ipv4 in base-16>.rbndr.us(向右滑动,查看更多)

比如说,如需在127.0.0.1和192.168.0.1之间切换,则需要将它们编码为dword,并按下列方式使用:

代码语言:javascript
复制
7f000001.c0a80001.rbndr.us

测试结果如下:

代码语言:javascript
复制
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 192.168.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 192.168.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 192.168.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 127.0.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 127.0.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 192.168.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 127.0.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 127.0.0.1
$ host 7f000001.c0a80001.rbndr.us
7f000001.c0a80001.rbndr.us has address 192.168.0.1(向右滑动,查看更多)

正如我们所看到的,服务器会随机返回其中一个地址,接下来就可以使用下列方法进行额外处理:

代码语言:javascript
复制
// 持续调用API直到它解析到你可以控制的地址并拿到访问权
while (AllowUntrustedAccesss("7f000001.c0a80001.rbndr.us") != true)  ;// 访问授权后,就可以等待其完成重绑定
while (ConnectToPort("7f000001.c0a80001.rbndr.us", 123) != true) ; // 现在,我们就拿到了localhost:123的访问权了 
 SomethingEvil();(向右滑动,查看更多)

许可证协议

本项目的开发与发布遵循GPL-3.0开源许可证协议。

项目地址

rbndr:https://github.com/taviso/rbndr

参考资料:

https://en.wik1pedia.org/wiki/DNS_rebinding https://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html https://lock.cmpxchg8b.com/rebinder.html

精彩推荐

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于rbndr
  • 工具运行机制
  • 工具下载
  • 工具使用
  • 许可证协议
  • 项目地址
  • 参考资料:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档