• 点击劫持:X-Frame-Options 未配置


    前言

    X-Frame-Options作为HTTP头的一部分,是一种用于保护网站免受点击劫持攻击的安全措施。网站可以通过设置X-Frame-Options或csp报头来控制网站本身是否可以被嵌套到iframe中。

    漏洞描述

    Clickjacking(点击劫持)是一种安全漏洞,通常出现在网站未配置适当的安全标头时,该漏洞由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼在2008年提出的。当网站未配置X-Frame-Options头时,它可能受到点击劫持攻击的威胁。这意味着攻击者可以在其恶意网站中将目标网站嵌套到iframe中,并引导用户执行未经授权的操作,使用户不知情地与目标网站互动。

    漏洞危害

    未配置X-Frame-Options头可能导致以下危害:

    • 用户被欺骗执行不希望执行的操作。
    • 用户的敏感数据(如用户名和密码)可能被窃取。
    • 网站的访问量可能被滥用,用于刷点击量或推广不良内容。
    • 攻击者可能传播恶意软件或进行其他恶意活动。

    利用场景

    点击劫持的利用场景如:刷点击量、骗取关注、点击广告或链接、点击广告或链接等。以刷点击量为例,假设存在某个场景,并描述其利用方式

    假设a博客网站未配置X-Frame-Options头,小明在该博客网站上发布了一篇博客,现在小明想利用点击劫持来刷该博客的访问量,那小明可能采用的点击劫持攻击来刷博客访问量的过程如下:

    1. 博客网站未配置X-Frame-Options头:博客网站的管理员未正确配置X-Frame-Options头,这意味着博客网站的内容可以被嵌套到iframe中。
    2. 小明创建恶意网站:小明创建了一个恶意网站,其中包含了点击劫持攻击的代码。
    3. 在恶意网站上嵌套博客:小明在他的恶意网站中创建一个透明的iframe,将博客网站的URL嵌套到iframe中。用户访问小明的恶意网站时,他们可能看到一个吸引人的内容,而不知道博客网站的内容也被加载到了iframe中。
    4. 引导用户进行点击操作:小明可能在恶意网站上提供吸引人的内容,例如奖品抽奖、免费资源等,并引导用户执行点击操作。
    5. 触发点击劫持:当用户在恶意网站上执行点击操作时,iframe中的博客网站也会接收到相同的点击操作。
    6. 用户点击被计入博客网站访问量:尽管用户认为他们只是在小明的恶意网站上与吸引人的内容互动,但实际上他们的点击操作也被重定向到了博客网站上。这将导致博客网站的访问量增加。
    7. 小明达到他的目标:小明的目标是刷博客的访问量,他可能通过引导更多用户来访问他的恶意网站,从而增加博客网站的访问量。

    这个过程说明了如何利用点击劫持攻击来增加博客网站的访问量,尽管用户不清楚他们的点击操作实际上也在访问博客网站。

    判断是否存在点击劫持问题

    1. 查看响应头是否存在“X-Frame-Options: ”或 “Content Security Policy”报头,如果在响应头中找不到"X-Frame-Options"报头,并且不存在Content Security Policy(CSP)报头。那么网站可能存在点击劫持漏洞。

    为了判断的准确性,可以进行下一步判断

    1. 在本地新建一个html文件,src = 'url' 中填写要测试的网站
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>点击劫持示例</title>
    6. </head>
    7. <body>
    8. <h1>点击劫持示例页面</h1>
    9. <button id="clickMe">点击我</button>
    10. <iframe id="evilIframe" style="opacity: 0;"></iframe>
    11. <script>
    12. document.getElementById('clickMe').addEventListener('click', function() {
    13. // 在点击按钮时,触发iframe中的操作
    14. document.getElementById('evilIframe').style.opacity = '1';
    15. document.getElementById('evilIframe').src = 'https://stack.chaitin.com';
    16. });
    17. </script>
    18. </body>
    19. </html>

    代码说明: