几个常见而实用的 XSS 和 CSRF 漏洞和利用方式
安全界有个圈,圈外人可以分两派:黑客们太牛了 vs 安全其实没啥。 我其实觉得可以哪来类比的就是:盖茨太伟大了 vs 就是个卖软件的;类似的:Linus 是改变世界的伟人 vs 就是个 Minux 抄袭狗。
不废话了,在我理解的安全人员来说,手握几个漏洞是很常见的,这些漏洞如果公开出来,大部分都很好理解。相反,不公开,就很可能不会被修复,积累一些,哪天有必要了再出手用,外人就会觉得 “好厉害,怎么做到的”。
对于我们这些非专业的人来说,XSS 漏洞是比较好理解和容易发现的,介绍几个常见的 XSS 漏洞和利用方式,平时注意观察,经常能收集到一些。
Cross-site scripting (XSS)
XSS 原指通过一定方式,实现在指定的网站上执行攻击者自己的脚本。(即客户端脚本注入) 其实不用太纠结概念的问题,在实际圈内交流中 1. 通过浏览器 2. 达到自己的目的 都可以概称为 XSS。
XSS 常见目的
- 以被注入的网页作为跳板,绕过浏览器域机制。(在浏览器,域是很重要的概念,域内和跨域的权限区别是很大的。)
- 以被注入的网页作为跳板,向服务器伪造正常用户的请求,窃取信息,或滥用资源。
- 以被注入的网页作为跳板,攻击其他网站。
- 在指定网站展示伪造信息,欺骗网名。(大部分网名已经有识别域名的能力,但就算域名没有假,也是有危险的哟。。。)
客户端脚本注入
这也是 XSS 最原始的概念。关键是如果让指定网页上出现我希望的脚本。 有很多方式,比如附件上传、比如参数。
附件上传
这是最淳朴的方式,但一直非常有效,很多不成熟的系统都会简单的上传文件,并且下载不对 mime 做修改。
URL参数、用户变量
变量如果要显示在网页上,无论来源是什么,都必须做防御。
iframe 交互
这个要求比较高,但经常让人意想不到。有些网页本身设计为 iframe 使用,为了跟父级交互,会有一些特殊的实现。 你要做的就是伪装好一个爹。
HTTPS 利用
HTTPS 定位是确保使用 HTTPS 链接的情况下,通讯完全保密。但传统的 HTTP 的一些东西,如 referer,javascript 在不知不觉中破坏这些关系。因此大家商定了一些规律。 凡事从 HTTPS 跳转到 HTTP 的东西,均需要屏蔽掉跟 HTTPS 相关的任何东西,比如 referer。 这一点非常关键,前端防外链没有什么太好的方案,安全和影响用户体验就是一张纸的区别。为了保证用户体验,一般网站的防外链会允许空 referer,而这一点,HTTPS iframe 嵌套 HTTP 即可实现。 不过现在,浏览器(特别是 Chrome)越来越多的开始强推一些安全策略,比如禁止 HTTPS iframe 嵌套 HTTP。所以。。。以后就渐渐不能用了。
IMAGE 标签利用
浏览器里很多元素会在下载之前做安全判断。比如脚本该不该下载,比如 iframe 该不该载入。 但有个东西比较特别 那就是 img 标签(也许以后 video 也可以)。 img 标签里的内容需要下载(至少下载一个 HTTP 头)之后才能判断是否合法,而在这之前,HTTP 头已经发过去了。 HTTP 头已经发过去了。 已经发过去了。 发过去了。 意味着什么呢,意味着,对应域名的 Cookie 已经发过去了,目标服务器上的程序理论上也获取了 Cookie。 意味着什么呢,看这样一个技巧
<img src="http://user.qzone.qq.com/10000" />
还看不出来了么,此时你的 QQ 号很可能已经被泄露了。 不能提示更多了,QQ 网站上拥有大量类似漏洞,很多知名的网站都来使用这些漏洞来追踪用户。