03.XSS基础

2019-03-02  本文已影响0人  新一mghc

一、成因

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

二、分类

1. 反射型

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

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参数

与第一个类似

上一篇下一篇

猜你喜欢

热点阅读