天天看點

8.安全牛PHP代碼審計:代碼審計之XSS漏洞

XSS漏洞的危害

  1. 盜取使用者的cookie
  2. 跳轉的釣魚網站
  3. 蠕蟲
  4. 檢視浏覽器資訊

1.反射型XSS

非持久性XSS,也叫反射性XSS,通過GET和POST方法,向股務器端輸入資料。用

戶輸入的資料通常被放置在URL的 query string中,或者是form資料中,如果服務

器端對輸入的資料不進行過濾,驗證或編碼,就直接将使用者輸入的資訊直接星瑙給

客戶,則可能會造成反射型XSS

反射型XS是比校昔遍的XSS,其危害程度遹常被認為較小,但是某些反射型

XSS造成的後果會很嚴重,如在輸入框的name中輸入metahttp

equI’ refresh’ content="5’/>,殷務器不加處理,将name的值直接送到浏

器,則浏岚器會每5秒自動新一次嚴重者會導緻伺服器崩潰

  1. 測試

    代碼

    <!DOCTYPE html>
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    	<title>測試XSS測試</title>
    </head>
    <body>
    
    <h1>請輸入</h1>
    <form action="" method="post">
    <input type="text" name="fname">
    <input type="submit" value="送出">
    
    <?php 
    if(isset($_POST['fname'])){
    	$a=$_POST['fname'];
    	echo "<br/>"."你輸入的是:".$a;
    }else{
    }
    ?>
    </body>
    </html>
               
    8.安全牛PHP代碼審計:代碼審計之XSS漏洞

    輸入什麼他就傳回什麼,沒有進行過濾

    我們輸入

    <script>alert('a')</script>

    可以看到在web頁面上被執行了
    8.安全牛PHP代碼審計:代碼審計之XSS漏洞
  2. 閉合xss

    代碼

    <?php  
    $a=$_GET['a'];
    ?>
    
    <script>
    	var xss='<?php echo $a; ?>';
    	document.write(xss);
    </script>
               
    代碼介紹

    <script>

    标簽用于定義用戶端腳本,比如 JavaScript,上面就是js代碼

    var

    是定義一個xss變量,裡面是’<?php echo $a; ?>’

    write()

    方法可向文檔寫入 HTML 表達式或 JavaScript 代碼,上面的就是叫輸出出來

    上面這個其實存在xss漏洞的

    URL

    URL介紹

    </script>

    s使用來閉合前面的

    <script>alert('a')</script>

    就可以執行了
    8.安全牛PHP代碼審計:代碼審計之XSS漏洞

存儲型XSS

持久型,也叫存儲型XSS。通常是因為伺服器端将使用者輸入的惡意腳本沒有通過

驗證就直接存儲在資料庫,并且毎次通過調用資料庫的方式,将資料呈現在浏覽器

上。則該XSS跨站腳本攻擊将一直存在。若其他使用者通路該頁面,則惡意腳本就會

被觸發,用于盜取其他使用者的私人資訊。

  1. 測試

    代碼

    寫入資料庫

    檔案

    a.php

    <!DOCTYPE html>
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<title>登陸</title>
    </head>
    <body>
    	<form action="" method="post">
    		請輸入ID:<input type="text" name="id"><br/>
    		要儲存的内容:<input type="text" name="user"><br/>
    		<input type="submit" value="點選"/>
    	</form>
    
    
    <?php
    	if(isset($_POST['id'])&&isset($_POST['user'])){
    	$id=$_POST['id'];
    	$user=$_POST['user'];
    	$s = "127.0.0.1";
    	$u= "root";
    	$p = "123456";
    
    	// 建立連接配接
    	$conn = mysqli_connect($s, $u, $p);	 
    	// 檢測連接配接
    	if (!$conn) {
    	    die("連接配接失敗: " . mysqli_connect_error());
    	}
    	
    	mysqli_select_db($conn,'xss');
    
    	$a="INSERT INTO user VALUES ($id,$user)";
    
    	if(mysqli_query($conn,$a)){
    		echo "建立成功".'<br/>';
    	}else{
    		echo "建立失敗"."<br/>";
    	}
    
    
    	mysqli_close($conn);
    	echo "關閉成功";
    
    }else{
    	
    }
    ?>
    
    
    </body>
    </html>
               
    存儲的内容如下
    8.安全牛PHP代碼審計:代碼審計之XSS漏洞
    檢視一下資料庫已經存入到資料庫裡面了
    8.安全牛PHP代碼審計:代碼審計之XSS漏洞
  2. 輸出資料庫
    <?php
    	$s = "127.0.0.1";
    	$u= "root";
    	$p = "123456";
    
    	// 建立連接配接
    	$conn = mysqli_connect($s, $u, $p);	 
    	// 檢測連接配接
    	if (!$conn) {
    	    die("連接配接失敗: " . mysqli_connect_error());
    	}
    	echo "連接配接成功"."<br/>";
    	
    	mysqli_select_db($conn,'xss');
    	$a="SELECT * FROM user";
    	$b=mysqli_query($conn,$a);
    	echo "目前資料庫有"."<br/>";
    	while ($DuQu=mysqli_fetch_assoc($b)) {
    		echo "\"".$DuQu['id']."\"".$DuQu['user']."<br/>";
    	}
    
    
    	mysqli_close($conn);
    	echo "關閉成功";
    ?>
               
    可以看到直接就執行js代碼了
    8.安全牛PHP代碼審計:代碼審計之XSS漏洞

MOD型XSS

DOM,全稱 Document Object Model,是一個平台和語言都中立的

接口,可以使程式和腳本能夠動态通路和更新文檔的内容、結構以及

樣式。

DOM型ⅩSS其實是一種特殊類型的SS,它是基于DOM文檔對象模

型的一種漏洞。