web漏洞挖掘之点击劫持漏洞

web漏洞挖掘之点击劫持漏洞

0x00 点击劫持的概念

点击劫持clickjacking,也叫UI-覆盖攻击(UI redress attack);最早是在2008年,由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼首创。

百度百科上对其的定义如下: 它是通过覆盖不可见的框架误导受害者点击。 虽然受害者点击的是他所看到的网页,但其实他所点击的是被黑客精心构建的另一个置于原网页上面的透明页面。 这种攻击利用了HTML中<iframe>标签的透明属性

图片中,都是进行了iframe嵌套,构成一个页面 来诱使用户进行点击。 以上就是点击劫持的一个基本概念

0x01点击劫持攻击的原理

点击劫持实际上是一种视觉上的欺骗手段,攻击者通过利用一个透明的、不可见的iframe,覆盖在某网页上,然后诱导用户在该网页上进行点击等操作,而此时用户在不知情的情况下点击了透明的iframe页面 。攻击者通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。 如使用css调整图片大小位置,通过设置opacity参数调整元素透明度等;目的都是让用户就无法看到含恶意代码的目标网页。

这是点击劫持的原理,关键在于构造不可见的透明iframe来进行利用;

0x02 挖掘的思路

1.我们只需要创建一个iframe的页面嵌套就可以简单的测试

如果目标应用支持iframe进行页面嵌套,那么基本断定网站存在点击劫持攻击漏洞 比如<iframe src="http://target.com"/> ,假设该页面上显示hello world 如果通过iframe嵌套后能显示为

基本就能确定存在点击劫持风险

2.通过目标的HTTP响应头是否设置好了X-Frame-Options字段,是否有JavaScript的Frame Busting机制,也可以进行判断 ,比如在用常见的WVS进行网站扫描时,会经常看到这样的信息:

这就是通过判断是否存在X-Frame-Options响应头来处理 其他辅助工具进行clickjacking漏洞探测的时候,也都基本上基于以上情况进行处理

0x03 举列子

这两处代码截图是github上的clickjacking扫描的代码,可以参考:https://github.com/D4Vinci/Clickjacking-Tester https://github.com/LTF1633242320/D-TECT

点击劫持 主要是靠点击,也有通过拖拽进行劫持实现的

这种点击劫持的案例,比较知名的包括:Facebook 的‘likejacking’攻击、Adobe Flash Player 网站漏洞、Twitter 的 Don’t click 攻击、谷歌账户点击劫持攻击等

在诸多点击劫持案例中,最为经典的案例是攻击者通过flash构造出点击劫持,最终控制用户电脑摄像头事件;

首先,攻击者构造一个flash小游戏,并贴心逼真地显示了游戏得分以及游戏耗时,诱导用户试玩;在试玩过程中引导用户点击不停变换位置的“click”按钮, 而其实在游戏界面中隐藏了一个看不见的iframe

攻击通过诱导用户使用鼠标点击看似随意的位置,来完成较为复杂的操作。

并最终开启了用户的摄像头

某浪博客关注点击劫持

在新浪博客的“加关注”处:

通过简单构造的html页面,如下,

通过构造iframe 从而进行博客关注数量的刷新

当然可以再对html页面进行精心美化调整,从而大面积进行点击劫持攻击的实施。 分享一个github上的类似开启摄像头的一个demo,可以在做安全意识培训是当演示了https://github.com/thomaspatzke/Clickjacking-Exploit

低版本IE时代的东西了吧 用浏览器插件

html5可以直接调用摄像头 前段时间有朋友搞得一个xss用HTML5调用摄像头,直接可以看到使用者照片

0x04 点击劫持与其他漏洞结合效果

可以配合CSRF

反射型xss可以和点击劫持一起形成差不多储存型xss的效果

反射XSS直接利用需要对方点击,如果直接把包含反射XSS的链接发送给受害者,比较唐突难以利用,所以如果将点击劫持与反射xss结合起来,利用iframe嵌套诱导,也就基本能达到存储XSS的效果

0x05 点击劫持漏洞的防御方法

点击劫持漏洞的防御 主要是两种,一个是通过Frame busting防御、一种是通过添加X-Frame-Options属性进行防御

frame busting防御,通过js代码禁止iframe的嵌套,如判断顶层窗口跳转:

下面是一些常见Frame busting:

但frame busting存在被绕过的可能,如多层iframe嵌套等; 在HTML 5中iframe的sandbox属性、IE中iframe的security属性等,都可以限制iframe页面中的脚本执行,从而可以使得frame busting失效 ,比如在html5中进行绕过:设置

当sandbox 仅设置为allow-forms时,js是不被执行的

设置

第二种方式,设置X-Frame-Options属性; X-Frame-Options是一个微软提出的一个HTTP响应头;用来给浏览器指示允许一个页面可否在 ,

通过设置X-Frame-Options 阻止站点内的页面被其他页面嵌入从而防止点击劫持;这是目前处理点击劫持攻击的最优且最可靠的手段; X-Frame-Options 的三个可选值: Ø DENY Ø SAMEORIGIN Ø ALLOW-FROM origin

以下是这三个可选值的表义: 如果设置为 DENY,表示该页面不允许在 frame 中展示,即便是在同源域名的页面中嵌套也不允许;

如果设置为 SAMEORIGIN,表示该页面可以在同源域名页面的 frame 中嵌套展示; 如果设置为 ALLOW-FROM,表示该页面可以在指定来源的 frame 中嵌套展示(origin为允许frame加载的页面地址);

在各个平台中间件中X-Frame-Options的配置不一样, 在IIS环境中,在web站点的web.config中配置。

在apache中: 先开启mod_headers.so,即在httpd.conf中去掉“LoadModule headersmodule modules/modheaders.so”前的#; 再.修改httpd.conf,添加下面内容:Header always append X-Frame-Options DENY 修改完如下:

如果同一台apache服务器上有多个站点,只想针对其中一个站点进行配置,可以修改.htaccess文件,添加如下内容: Header append X-FRAME-OPTIONS “DENY”

如果是nginx,则修改nginx.conf,在server下添加下面内容: add_header X-Frame-Options “DENY”; 添加完成如下:

以上主要是针对服务端的防御,如果是客户端的话,那就是保持浏览器的及时升级更新, 最新版浏览器通常具备更好更多的安全机制保护客户的信息安全,及时升级更新浏览器,可从一定程度上进行漏洞攻击的有效防范

另一方面,作为客户端,可以通过安装浏览器的扩展插件,达到对潜在威胁进行阻止及警告,及时判断页面中的不安全因素; 如果你使用的是Firefox,则可以安装插件NoScript,在选项中设置禁止

有了X-Frame-Options的http头差不多就是不能进行点击劫持了吧

这里顺便分享几个关于点击劫持的PoC工具,师傅们可以玩玩:

https://github.com/enddo/CJExploiter

https://github.com/sensepost/jack

https://github.com/samyk/quickjack


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 951207194@qq.com

文章标题:web漏洞挖掘之点击劫持漏洞

文章字数:2,029

本文作者:Mang0

发布时间:2018-10-11, 14:13:02

最后更新:2018-11-02, 21:52:15

原始链接:http://mang0.me/archis/95d370e7/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏