界面操作劫持
1.定义:
界面操作劫持是一种基于视觉欺骗的Web会话劫持攻击,它通过在网页的可见输入控件上覆盖一个不可见的框,使得用户误以为在操作可见控件,而实际上用户操作行为被其不可见的框( iframe),使得用户误以为在操作可见控件,而实际上用户操作行为被其不可见的框所劫持,执行不可见框中的恶意劫持代码,从而完成在用户不知情的情况下窃取敏感信息,篡改数据等攻击。
2.分类:
点击劫持:劫持用户的鼠标点击操作,
拖放劫持:
触屏劫持:多发生在移动,智能设备上
3.技术实现
i.点击劫持透明层+iframe
这里注意几个css属性
<!DOCTYPE html>
<html>
<head>
<title>CLICK JACK!!!</title>
<style>
#click{
width:100px;
left:20px;
top:20px;
position:absolute;
z-index: 2
}
#hidden{
height:40px;
width:120x;
position:absolute;
filter:alpha(opacity=100);
opacity:0.5;
z-index:0
}
</style>
</head>
<body>
<input id="click" style="width:100px;" value="Click Me" type="button"/>
<iframe id="hidden" src="inner.html" scrolling="no"></iframe>
</body>
</html>
filter:alpha(opacity=50)数值从0到50,数值越小,透明度越高。用于IE
opacity:0.5 数值从0到1,数值越小,透明度越高。用于firefox,Chrome
z-inex:1数值可以是负数,高数值的控件更贴近用户
以及postion:absolute可以让两者有重合的可能。
同时,再通过
top,left控制位置,最终导致click的button和login完全吻合
ii.拖放劫持
1.dataTransfer对象
在拖放劫持攻击中,还需要一种数据传递的方法才能真正达到攻击效果。为了能协助通过拖放操作传递数据,
在IE 5.0以后引入了dataTransfer对象。它作为event对象的一个属性出现,用于从被拖动的对象传递字符串到放置对象,dataTransfer现在是HTML5草案的一部分。
dataTransfer 对象定义了两个主要方法:getData和setData,语句如下:
event.dataTransfer.setData("text","sometext");
event.dataTransfer.setData("URL","http://www.123.com");
var url=event.dataTransfer.getData("URL");
var text=event.dataTransfer.getData("text");
setData操作完成向系统剪贴板中存储需要传递的数据,传递数据分为两种类型:文本数据和URL数据。
在html5的扩展中,其允许指定任意的MIME类型
getData操作完成获取由setData所存储的数据
有了dataTransfer
拖放函数
当鼠标拖动了一个控件,源对象将依次触发以下函数
ondrag 在从drag动作开始,到drop动作结束的过程中,源对象触发的一个事件
ondragstart 在drag动作开始时,源对象上触发的一个事件
ondragend 在drop动作结束时,源对象上触发的一个事件
===============================================
当拖动对象到一个有效的目标上时,目的对象上触发的一个事件
ondragenter 在drag动作进入某一有效目的对象时,该目的对象上触发的一个事件
ondragover 在drag动作进入某一有效的对象后,该目的对象上触发的一个事件
ondragleave 在drag动作离开某一有效的目的对象时,该目的对象上触发的一个事件
ondrop 在任何有效目的对象上进行drop操作时,该目的对象上触发的一个事件
2.触屏劫持技术
移动设备的触摸屏更加微小,在视觉欺骗上,更胜一筹
eg:IPhone 在iPhone,iPad,iTouch的safari上可以使用添加到主屏按钮将网站添加到主屏幕
i. 添加桌面图标的语句为:
<link rel="apple-touch-icon" href="icon.png"/>
添加启动画面的语句为
<link rel="apple-touch-startup-image" href="startup.png"/>
全屏显示的语句为
<meta name="apple-mobile-web-app-capable" content="yes">
改变状态栏
<meta name="apple-mobile-web-app-statu-bar-style" content="black">
ii.
可视区域viewport
<meta name="viewport" content="width=320;initial-sscale=1.0,maximum-scale=1.0;user-scalable=no;"/>
想通过改变viewpoin改变可视区域
参数如下
width viewport的宽度(范围从200到10000,默认为980像素)
initial-scale(初始的缩放比例)
maximum-scale 允许用户缩放的最大比例
user-scalable 用户是否可以手动收缩
隐藏URL地址栏
除了用全屏模式隐藏URL地址栏,还可以通过以下方式
<body onload="seTimeout(function(){window.scrollTo(0,1)},100);">
</body>
========================================================================================
目标的http响应头是否设置好了X-Frame-Option字段
X-Frame-Option配置
在返回报文中有这个http头
该配置有三个选项
1.DENY:浏览器拒绝当前页面加载任何Frame页面
2.SAMEORIGIN: frame页面的地址只能为同源名下的页面
3.ALLOW-FROM:origin为允许iframe加载的页面地址
Allow-From-origin
具体的设置方法
具体的设置方法:
Apache配置:
Header always append X-Frame-Options SAMEORIGIN
nginx配置:
add_header X-Frame-Options SAMEORIGIN;
IIS配置:
<<span class="title">system.webServer> ... <<span class="title">httpProtocol> <<span class="title">customHeaders> <<span class="title">add name="X-Frame-Options" value="SAMEORIGIN" /> </<span class="title">customHeaders> </<span class="title">httpProtocol> ... </<span class="title">system.webServer>
ii.目标是否有JavaScript的Busting 机制

浙公网安备 33010602011771号