美文网首页
03.XSS基础

03.XSS基础

作者: 新一mghc | 来源:发表于2019-03-02 17:54 被阅读0次

    一、成因

    程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。

    二、分类

    1. 反射型

    交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。

    • GET方式的XSS漏洞更加容易被利用,一般利用的方式是将带有跨站脚本的URL伪装后发送给目标
    • 而POST方式由于是以表单方式提交,

    2. 存储型

    交互的数据会被存在在数据库里面,永久性存储,一般出现在留言板,注册等页面。

    3. DOM型

    不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。

    三、跨站脚本漏洞测试流程

    1. 在目标站点上找到输入点,比如查询接口留言板等
    2. 输入一组“特殊字符+唯一识别字符”,点击提交后,査看返回的源码,是否有做对应的处理
    3. 通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)
    4. 提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在ⅩSS漏洞
    TIPS
    1. 一般査询接口容易出现反射型XSS,留言板容易岀现存储型XSS
    2. 由于后台可能存在过滤措施,构造的 script可能会被过滤掉,而无法生效或者环境限制了执行(浏览器)
    3. 通过变化不同的 script,尝试绕过后台过滤机制;

    四、环境实操

    1.反射型xss(get)

    1. 转译过滤判断
    提交框.png 返回源码.png

    输入一组“<>6666”,点击提交后,査看返回的源码,未对输入信息进行过滤

    2. 尝试进行攻击
    进行注入.png

    发现前端对字符数进行了限制,打开F12调试工具修改前端代码。

    前端源码.png

    的确进行了限制,将20修改为足够大,输入

    <script>alert(1)</script>
    
    弹窗成功.png

    注入成功

    3. 源码审计
    源码.png

    在第一个框中对信息进行判断,若信息不为空且不为Kobe,则将参数传入{$_GET['message']},未对信息进行适当过滤

    2.存储型型xss

    1. 转译过滤判断
    提交判断未进行过滤.png 转移判断.png

    未进行过滤与转译

    2. 进行攻击
    尝试攻击.png

    成功弹窗,并且在刷新页面后,依然弹窗,储存型xss触发成功

    3. 源码审计
    语句保存代码.png

    将数据存入了后台数据库

    <p class="line">留言列表:</p>
      <?php echo $html;
      $query="select * from message";
      $result=execute($link, $query);
      while($data=mysqli_fetch_assoc($result)){
      echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>删除</a>";
                        }
    
    

    查看留言展示节目界面,未对{$data['content']}进行过滤

    3.1. DOM型xss

    1.攻击前准备
    test.png

    随便输入,提交出现what do you see?,查看源代码

                <div id="xssd_main">
                    <script>
                        function domxss(){
                            var str = document.getElementById("text").value;
                            document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
                        }
                        //试试:'><img src="#" onmouseover="alert('xss')">
                        //试试:' onclick="alert('xss')">,闭合掉就行
                    </script>
                    <!--<a href="" onclick=('xss')>-->
                    <input id="text" name="text" type="text"  value="" />
                    <input id="button" type="button" value="click me!" onclick="domxss()" />
                    <div id="dom"></div>
                </div>
    

    str 接收传入值;写入a href标签;最后传入倒数第二行 id="dom";可以考虑在a herf标签构造语句进行攻击

    攻击.png

    点击what do you see 出现弹窗

    3.2. DOM型xss-x

    1.查看源代码
     <div id="xssd_main">
                    <script>
                        function domxss(){
                            var str = window.location.search;
                            var txss = decodeURIComponent(str.split("text=")[1]);
                            var xss = txss.replace(/\+/g,' ');
    //                        alert(xss);
    
                            document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
                        }
                        //试试:'><img src="#" onmouseover="alert('xss')">
                        //试试:' onclick="alert('xss')">,闭合掉就行
                    </script>
                    <!--<a href="" onclick=('xss')>-->
                    <form method="get">
                    <input id="text" name="text" type="text"  value="" />
                    <input id="submit" type="submit" value="请说出你的伤心往事"/>
                    </form>
                    <div id="dom"></div>
                </div>
    

    window.location.search:获取url参数

    与第一个类似

    相关文章

      网友评论

          本文标题:03.XSS基础

          本文链接:https://www.haomeiwen.com/subject/tdwhuqtx.html