理解URL很难?(uXSS)

但凡对网络有一些了解,很容易理解一个URL地址。我们理解的结构是:
protocol://domain/path?parameters

URL,"统一资源定位符"是URI(统一资源标识符)的子集
  我们通常的认为:它只是一个字符串,每个人都能理解它的定义,我们都应该能够区分钓鱼网站和真实网址,我们理算当然的认为它就应该是这样。
  但事实并非如此,我们发现了许多问题?

下边来研究一个公开的漏洞:CVE-2018-6128

  • 漏洞描述:在67.0.3396.62之前的iOS上的谷歌浏览器中,WebKit中的URL解析不正确允许远程攻击者通过精心设计的HTML页面执行域欺骗。
  • 参考资源:https://bugs.chromium.org/p/chromium/issues/detail?id=841105
    在这里插入图片描述
    引用自Tomasz Bojarski的一篇报告,该问题的标题是"IOS上Chrome中的uXSS(通用XSS)"。
    什么是uXSS?
      通常在我们基本的认知中,XSS就是一个网站可以以某种方式注入自己的恶意Javascript代码。然后,javascript基本上可以冒充用户做一些事情。
      现在假设我们想要从mail.163.com中窃取某些电子邮件。javascript只能访问当前运行的域上的内容,因此,必须找到mail.163.com网站中XSS漏洞,我们不能在自己的网站上写javascript来访问其它人的电子邮件。可以使用控制台进行模拟测试.
    在这里插入图片描述  尝试在CSDN上边访问 mail.163.com,在控制台执行javascript的payload从mail.163.com获取数据,不出意外的我们得到一个报错:跨源请求被阻止,我们无法加载https://mail.163.com,这就必须要有一个mail.163.com域上的XSS漏洞。
      然而,universal XSS通常会滥用浏览器中的错误并以某种方式绕过来源检查。正常情况下浏览器会阻止从CSDN站点到mail.163.com域的访问。这时,我们以某种方式欺骗浏览器允许我们执行该请求并加载响应内容,这就是一个通用XSS。这样,我们就可以在任何地方放置javascript来访问任何其它的网站上的数据。如果Chrome中有uXSS,那么Chrome无法正确检查域名并阻止跨域访问的发生,所有的恶意站点都可以从任意的站点窃取数据,这是非常糟糕的事情。
      
    Tomasz在IOS上的Chrome中发现了一个uXSS错误:
  • 通用XSS的使用 “…;@ within the url ”
  • 举例:运行javascript代码"history.replaceState(",",’…;@mail.163.com:%3443/’) "网站地址将修改
  • HTML5引入了history.pushState()和history.replaceState()方法,它允许我们添加和修改历史记录条目。replaceState()修改当前历史记录条目,而不是创建新条目。当我们想要更新状态或URL时,响应某些用户操作,此时replaceState()特别有用。上边代码的执行后,网址将被替换为https://mail.163.com.但实际还是由我们控制。因此,我们能运行不受限制的XHR请求.浏览器在内部看到的URL看起来像是web-safety.net/..;@mail.163.com,不知何故,这让浏览器误以为目前的网站是mail.163.com,这就意味着javascript具有访问该网页的权限,就像在mail.163.com上运行一样
  • 这个bug似乎是URL解析中的一个错误。在webkit中,“https://web-safety.net/…;…;@mobile.twitter.com/robots.txt”被正确解析为以下部分:
    -主机:“web-safety…net”
    -路径:“/…;…;@mobile.twitter.com/robots.txt”
    -用户:“”
    -密码:“”
    但是,当此URL发送到网络层时,返回的数据来自https://mobile.twitter.com/robots.txt。因此,我怀疑当在webkit->networkprocess ipc中序列化该URL时会发生错误,并且在重新解析时,它的解释会有所不同。
    在处理替换状态URL时,WebKit可能应该转义“;”和“@”。这似乎就是当“https://web safety.net…;…;@mobile.twitter.com/robots.txt”直接输入iOS Safari中的地址栏时发生的情况。
      同样类型的错误也出现在SSRF中,
      一个快速有趣的例子:考虑使用一个典型的python库来解析一个URL:
      http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
      python将访问哪个地址?
    在这里插入图片描述  
    不同的python库以不同的方式使用相同的URL。
    在RFC 3986中有对URI的定义,参考链接:https://tools.ietf.org/html/rfc3986
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值