浏览器的安全模型

浏览器不给你的,你拿不到,拿不到就是拿不到,你拿到了你就找到了浏览器的漏洞
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

浏览器安全限制

禁止主动读写本机文件

可以读取的操作

可以透过<input type=file>让使用者选择档案,选完以后用FileReader把档案内容读出来

<input type="file" onchange="show(this)">

<script>
function show(input) {
  const reader = new FileReader();
  reader.onload = (event) => {
    alert(event.target.result);
  };
  reader.readAsText(input.files[0]);
  
}
</script>
  1. fetch('file:///data/index.html')
  2. window.open('file:///data/index.html')
  3. 报错:Not allowed to load local resource: file:///data/index.html
  4. 如果可以 etc/passwd ssh密钥
主动读取本地文件漏洞案例:

# Bug Bounty Guest Post: Local File Read via Stored XSS in The Opera Browser

  1. Opera 是以Chromium 为基础打造的浏览器,而其中有一个「Opera Pinboards」的功能,可以建立一些笔记然后分享给其他使用者,而笔记页面的网址是:opera:pinboards 是属于特殊的协定,通常会给予一些特别的权限。
  2. 在建立笔记的时候,可以包含一个连结,例如说:https://blog.huli.tw,而Renwa 发现了除了可以使用正常的连结以外,也可以使用javascript:alert(1)这种类型的连结去执行程式码,因此就可以得到一个opera:pinboards底下的XSS 漏洞!
  3. 前面有提过在opera:底下会有一些特殊的权限,例如说可以开启file://的网页,还可以帮网页截图并得到截图的结果,因此就可以利用刚刚讲的XSS 去开启本机的档案并且截图,传到攻击者的伺服器,达成偷取档案的目的。

禁止交互系统API

浏览器没有提供给网页前端相对应的API,使Javascript与系统进行交互

被允许的API
  1. 浏览器提供了用于与蓝牙设备通信的Web Bluetooth API,因此在网页上的JavaScript中实际上可以创建与蓝牙相关的应用程序。
  2. 另一个MediaDevices API 允许JavaScript获取麦克风和摄像头等数据,因此也可以创建相关的应用程序。

当浏览器提供这些API时,它还会实现权限管理机制,通常会弹出通知,要求用户主动同意并授予相应权限,然后网页才能获取所需的数据。

禁止存取其他网页的内容

同源策略:每个网页都只有针对自己的权限,可以修改自己的HTML,执行所需的JavaScript代码,但不应获取其他网页的数据,这就是同源政策(同源策略,有时缩写为SOP)。如果需要从不同源的框架中获取数据,通常需要使用一些跨域通信技术,例如跨域资源共享(CORS)或跨文档消息传递(Cross-document Messaging)

在github.com执行以下程序

var win = window.open('https://blog.huli.tw')
setTimeout(() => {
  console.log(win.location.href)
}, 3000)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Uncaught DOMException: Blocked a frame with origin "[https://github.com"](https://github.com%22/) from accessing a cross-origin frame.

这个错误消息是浏览器的安全机制触发的,它指示一个网页框架(frame)试图访问另一个不同源(cross-origin)的框架,但被浏览器阻止了。

绕过案例
  • Issue 1359122: Security: SOP bypass leaks navigation history of iframe from other subdomain if location changed to about:blank,可以利用一個 iframe 的漏洞讀到 cross-origin 的網址。
    • 假设当前网页是 a.example.com,其中包含一个 iframe,其网址为 b.example.com。通过执行 frames[0].location = 'about:blank' 将 iframe 重新定向后,iframe会变成与 a.example.com 具有相同源(same-origin),此时尝试读取 iframe 的浏览历史记录:frames[0].navigation.entries(),会从中获取到原本的 b.example.com 网址。
    • 然而,这种情况不应该发生。当 iframe 被重新定向到其他网址后,navigation.entries() 应该被清空,这是一个bug。

参考链接

  1. https://aszx87410.github.io/beyond-xss/ch1/browser-security-model/
  2. https://www.chromium.org/Home/chromium-security/site-isolation/
  3. https://securitylab.github.com/research/in_the_wild_chrome_cve_2021_30632/
  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐先生的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值