-
Notifications
You must be signed in to change notification settings - Fork 0
dns_rebind
Xiaolin Zhang edited this page Nov 2, 2019
·
1 revision
话说在django官网上浪的时候,发现在news上发现他们修复了DNS Rebinding漏洞,就顺手查了一下这是个什么东西.
能够获取到http://localhost:*/*
下的html,然后可以成功发送到黑客的服务器上.
- 你访问黑客网站
www.A.com
- 黑客老早之前就设置好了DNS过期时间为60秒
- 黑客的网站很吸引你,你成功逗留了60秒
- 黑客通过ajax发起了一个请求
A/info.php
- 浏览器和你都觉得觉得一切都很正常,然后黑客在你访问之后的第0秒就更换ip为127.0.0.1(或者内网ip,怎么拿到内网ip又是另一件事).所以实际访问的是
127.0.0.1/info.php
. - 成功拿到信息.
仔细想想过程,在发起请求A/info.php的时候,浏览器判定为正常,非跨域.所以成功访问了.
- 业内加大DNS过期最小值.(拖延战术没P用)
- 浏览器的可以制定个规则,跨域名不行,跨ip也不行.(不好,跨域名我就不喜欢了,再来个限制更差劲)
- 开发人员不要在local开启任何提权的措施,就当和直接暴露在公网上一样.(🙄)
- 通过判断host,每个请求都有一个host,表明自己想访问的那个域名,然后在localhost启动的服务都校验一下host,只允许localhost或者127.0.0.1等白名单来访问就好了.
又到了http神坑总结时间,现在的规则是:
- 在http 1.0里,host可能不存在.
- http 1.1里host必须存在客户端保证,不存在服务器必须返回400.但是可以为空(呵呵,在我看来又是垃圾协议,毁我青春,为什么会存在为空host?).
没事别开启debug, debug了就会有风险.像这种漏洞完全想不到... 另外,设置ALLOW_HOSTS是个好习惯.