大多数网站,在登陆后会通过Cookie来保存登陆状态如果你能够得到其他人的Cookie,你就可以以他的身份来访问网站.
如果你得到了管理员的Cookie,那么你就可以以管理员的身份来进入后台
访问一个网站时,当一条Cookie满足下面三个规则的时候,这个Cookie就会被发送:
- 该网站的域名与Cookie要求的域名相同
- 该网页的路径与Cookie要求的路径相同
- 该网页的连接方式(HTTP/HTTPS)与Cookie的要求相同
注意!这其中没有与端口有关的要求!
也就是说,浏览器认为 http://xxoo.xo/
和 http://xxoo.xo:1234/
是同一个网站
在 http://xxoo.xo/
设置的Cookie,在访问 http://xxoo.xo:1234/
时也会被发送
这意味着,如果你能够在 xxoo.xo
对应的ip上的其他端口建立Web服务器,并欺骗 xxoo.xo
的管理员访问你的Web服务器,那么你就可以窃取到管理员的Cookie,进而以管理员的身份来访问网站,进入后台.
如果 xxoo.xo
被托管在一个公用的虚拟主机服务器上,这会非常简单,你可以在相同的服务器上购买一份虚拟主机,甚至试用。然后在其他端口建立一个Web服务器。当然,国内的大多低端主机商恐怕不会提供这个功能。
所以我要给我的神马终端(http://what.jybox.net)打个广告,这是一个权限非常灵活,而价格又非常低的虚拟主机.
很好,现在你在 xxoo.xo
所在的服务器上的 1234 端口建立了一个Web服务器,并写了一个记录Cookie的脚本
下面你只需要欺骗 xxoo.xo
的管理员访问 http://xxoo.xo:1234/
即可
他会随便访问别人发来,而且看起来很奇怪的地址么?
其实你可以做得很隐蔽,你可以去他的网站,发表一个帖子(如果是论坛)或评论(如果是博客),发一个地址为 http://xxoo.xo:1234/xxoo.png
的图片,图片是会在网页打开的时候自动加载的,而 xxoo.png
是你写的记录Cookie的脚本.
如此一来,竟做得神不知鬼不觉,没几个人会检查网页上每个图片的地址的…
我想我有必要再给 xxoo.xo
的管理员一点忠告,想避免这种攻击也并不是很困难
方案1.不要和别人共用服务器,自己购买独立的服务器,独立的IP.
这一条是最简单的解决方案,只要你有钱
方案2. 整个网站都使用HTTPS协议,并设置Cookie仅通过HTTPS发送,不得不说,HTTPS是非常有效的,避免信息泄露的技术。不过SSL证书是非常贵的….
所以,我有必要在这里给JySSL(https://github.com/jybox/JySSL)打一个广告,这是我创立的,(目前)免费的SSL证书颁发机构
方案3. 使用CDN,CDN相当于一个代理,你需要将你的域名指向CDN,而CDN一般只开放80端口,其他端口的通讯都会被丢弃.