白帽子講web安全第三章筆記


這一章主要講的是XSS(cross site scipt)跨站腳本攻擊,這種攻擊方式主要是在客戶端(瀏覽器)中通過非法的JavaScript腳本來更改頁面
 
例如:在php頁面中有如下代碼:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
$input = $_GET["param"];
echo "<div>".$input."</div>";
 ?>
 
</body>
</html>

 

這段代碼主要功能是顯示Param變量,如果在瀏覽器中輸入:http://localhost/test.php?param=這是一個測試
 
頁面就會顯示:

 

 
如果將param變量換成<script>alert(/xss/)</script>頁面是顯示:

 

 
P.S.如果在chrome中會報錯,chrome會顯示: Chrome 在此網頁上檢測到了異常代碼。為保護您的個人信息(例如密碼、電話號碼和信用卡信息),Chrome 已將該網頁攔截。
 
分成幾種類型:
1.反射型 XSS(非持久型Non-persisitentXSS)
把用戶輸入的數據反射給瀏覽器
2.存儲型XSS(持久型 peristen XSS)
將惡意JavaScript腳本存儲在服務器,每個訪問這個服務器網站的用戶都會執行這段代碼。這種方法比上面的更加復雜。
3.DOM based XSS
根據DOM的XSS,實際上是一種反射型的xss。
例如如下的代碼:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>XSS test</title>
</head>
<body>
    <script type="text/javascript">
    function test () {
        var str=document.getElementById("text").value; //str獲取來自text中的內容
        document.getElementById("t").innerHTML="<a href='"+str+"' >testlink</a>"; //在html中id等於t的地方顯示這個鏈接。
    }
    </script>
    <div id="t"></div>
    <input type="text" id="text" value=""/>
    <input type="button" id="s" value="write" onclick="test()"/>
</body>
</html>

  

如果在輸入框中輸入的內容是普通的內容,此時<a>標簽的內容就是

 

這樣,因為localhost里面沒有相應的資源,此時會返回一個頁面錯誤。
可是,如果在input標簽里輸入的內容是如下內容的話:
' onclick=alert(/這是一個xss/)//
此時鏈接的內容就變成這樣:
 

 

點擊鏈接,就會發生

 

因為testLink此時就變成了
<a href '' onclick=alert(/這是一個XSS/)//

  

因為構造輸入的文本為:
' onclick=alert(/這是一個xss/)// 

  

前面一個單引號與JavaScript中的單引號配對,而且后面一個單引號也會被注釋不會顯示。
同理,如果輸入的文本為:
'><img src=# onerror=alert(/xss/) /><'

  

,將顯示以下內容:

 

 
P.S.這是在Chrome下完成的。
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM