点击劫持学习

什么是点击劫持

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

将iframe页面透明度调至最透明,将看不到iframe页面
在这里插入图片描述
但其实页面是这样的在这里插入图片描述
在登录页面输入其实内容被输入到了iframe页面在这里插入图片描述
代码在这里插入图片描述

危害

1.盗取用户资金
2.获得用户的敏感信息
3.与XSS或CSRF等其他攻击手段配合

检验是否有点击劫持

burp抓包,查看是否有X-Frame-Options;若有证明无点击劫持

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 < frame >, < /iframe > 或者 < object > 中展现的标记
网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持的攻击

X-Frame-Options三个参数:
DENY 表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也不允许

SAMEORIGIN 表示该页面可以在相同域名页面的frame中展示

ALLOW-FROM uri 表示该页面可以在指定来源的frame中展示

换一句话说,如果设置为DENY,不光在别人的网站frame嵌入时会无法加载,在同域名页面中同样会无法加载
另一方面,如果设置为SAMEORIGIN,那么页面就可以在同域名页面的frame中嵌套
正常情况下我们通常使用SAMEORIGIN参数

防御手段

1.Javascript中禁止内嵌
因为普通页面的top对象为window,而iframe的top对象不等于window对象
这样如果存在嵌套的iframe,页面就会进行跳转,避免的点击劫持
但是这种防御方式并不完善,如果攻击者设置ifame的属性sandbox=“allow-forms” 时防御就失效。

   JS代码:
    if (top.location !== window.location){
        top.location == window.location
    }

2.X-FRAME-OPTIONS 防止内嵌
服务器端可设置HTTP头 "X-Frame-Options:DENY"来让浏览器主动禁止iframe内嵌
不过这种方式在HTTP中不可靠,黑客可以窃听篡改HTTP请求来修改HTTP头。

3.对于Firefox的用户,使用 NoScript 扩展
NoScript 能够在一定程度上检测和阻止点击劫持攻击。

4.其他辅助手段
如XSS和CSRF的防御方法,也可以防御点击劫持后对服务器端的攻击

frame busting

通常可以写一段JavaScript代码,以禁止iframe的嵌套。这种方法叫frame busting。比如下面这段代码:

if (top.location != location){
    top.location = self.location;
}

常见的frame busting有以下这些方式:

if (top != self)
if (top.location != self.location)
if (top.location != location)
if (parent.frame.length >0 )
if (window != top)
if (window.top !== window.self)
if (window.self != window.top)
if (parent && parant != window)
if (parent && parent.frames && parent.frames.length>0)
top.location = self.location
top.location.href = document.location.href
top.location.href = self.location.href
top.location.replace(self.location)
top.location.href = window.location.href
top.location.replace(document.location)
top.location.href = windows.location.href
top.location.href = "URL"
document.wirte(‘’)
top.location = location
top.location.replace(document.location)
top.location.replace('URL')
top.location.href = document.location
top.location.replace(window.location.href)
top.location.href = location.href
self.parent.location = document.location
parent.location.href = self.document.location
top.location.href = self.location
top.location = window.location
top.location.replace(window.location.pathname)
window.top.location = window.self.location
setTimeout(function(){document.body.innerHTML='';},1)
window.self.onload = function(evt){document.body.innerHTML='';}
var url = window.location.href; top.location.replace(url)

但是frame busting 也存在一些缺陷。由于它是用JavaScript写的,控制能力并不是特别强,因此有许多方法可以绕过它。

比如针对parent.location 的 frame busting,就可以采用嵌套多个 iframe 的方法绕过。假设frame busting 代码如下:

if ( top.location != self.location) {
    parent.location = self.location;
}

那么通过以下方式即可绕过上面的保护代码:

Attacker top frame:
<iframe src="attack2 .html">
Attacker sub-frame:
<iframe src="http://www.victim.com">

此外,像HTML5中iframe的sandbox属性、IE中iframe的security属性等,都可以限制iframe页面中的JavaScript脚步执行,从而可以使得frame busting 失效。

例题

看题吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值