web基础漏洞-界面操作劫持
1、介绍
界面操作劫持攻击是一种基于视觉欺骗的web会话劫持攻击,它通过在网页的可见输入控件上覆盖一个不可见的框iframe,使得用户误以为在操作可见控件,而实际上用户的操作行为被不可见的框所劫持,执行不可见框中的恶意劫持代码,从而完成在用户不知情的情况下窃取敏感信息、篡改数据等攻击。
- 关于界面操作劫持,网络上资料相对较少,建议参考《web前端黑客技术揭秘》(钟晨鸣 徐少培)
- 界面操作劫持实际上突破了csrf的防御策略,这是一种社工色彩很强的跨域操作,而这种跨域正好是浏览器自身的特性。
- 可以分为点击劫持clickjacking、拖放劫持drag&drop jacking、触屏劫持tapjacking
- 拖放劫持不受同源策略限制,cookiejacking攻击是拖放劫持的代表
2、实现
(1)攻击者在控制域的页面中,创建iframe元素,其src指向目标域的某页面。
(2)目标域接收到请求后,未检查referer进行第三方跨域阻断。也未在响应中设置X-Frame-Options字段,使得目标域页面在iframe中成功加载
(3)设置iframe为透明层,同时创建可见层,透明层覆盖可见层。一般,两者存在映射关系,比如可见层的某按钮对应透明层的某按钮
(4)用户操作可见层,但实际操作的是透明层。达到劫持效果
3、防护
(1)X-Frame-Options头部字段
X-Frame-Options是微软提出的一个http响应头部字段,专门用来防御利用iframe嵌套的点击劫持攻击。
并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。
这个头有三个值:(只要设置任意一种即可有效防止操作劫持漏洞)
DENY // 拒绝任何域加载
SAMEORIGIN // 允许同源域下加载
ALLOW-FROM // 可以定义允许frame加载的页面地址
php中设置示例:
header ( "X-FRAME-OPTIONS:DENY");
(2)检查referer
当iframe元素发出请求时,referer字段携带当前页面的地址,服务端接收后代码进行检查,禁止跨域请求目标url