XSS跨站指令碼攻擊讀書筆記
0x00測試環境
1、firefox瀏覽器、firebug外掛。
2、Apache伺服器,php環境。
3、背景知識:跨站指令碼攻擊XSS,(cross site script)縮寫是CSS,但是為了和層疊樣式表(cascading style sheet ,css)區別,在安全領域叫做“XSS”。
XSS攻擊,通過HTML注入修改網頁,插入惡意指令碼,從而在使用者瀏覽時候,控制使用者瀏覽器的一種攻擊。由於剛開始攻擊演示的案例是跨域的,所以叫做“跨站指令碼”
(1)第一種型別,反射型XSS(非持久型XSS)
將下列php編輯好命名為test.php,放在Apache目錄下,在瀏覽器執行該檔案。
<?php $input = $_GET["param"]; //注入點 echo "<div>".$input."</div>"; //注入輸入資料顯示 echo "這是一個測試XSS程式碼!!"; ?>
我提交一個引數在地址後面localhost/test.php?param=這是一個XSS測試,
可以用firebug外掛看到網頁程式碼發生了改變。(圖中紅色框框)
我在嘗試改變一下後面的引數localhost/test.php?param=<script>alert(/xss/)</script>
出現注入提示。點選確定後,網頁程式碼放生了變化。
使用者輸入的script指令碼已經寫入了網頁中,這就是反射型XSS攻擊,把使用者輸入的資料放射給瀏覽器,也叫非持久型XSS。攻擊者將惡意程式碼填入請求的引數中,頁面輸出執行了攻擊者輸入的惡意程式碼(反射型 XSS,非持久化,需要欺騙使用者自己去點選連結才能觸發 XSS 程式碼)
(2)儲存型XSS(持久型XSS)
儲存型 XSS,持久化,程式碼是儲存在伺服器中的,如在個人資訊或發表文章等地方,加入程式碼,如果沒有過濾或過濾不嚴,那麼這些程式碼將儲存到伺服器中,使用者訪問該頁面的時候觸發程式碼執行。
(3)DOM Base XSS
反射型XSS的一個分支,通過修改頁面DOM節點形成的XSS。該漏洞是基於文件物件模型(Document Objeet Model,DOM)的一種漏洞。DOM 是一個與平臺、程式語言無關的介面,它允許程式或指令碼動態地訪問和更新文件內容、結構和樣式,處理後的結果能夠成為顯示頁面的一部分。DOM 中有很多物件,其中一些是使用者可以操縱的,如 URI ,location,refelTer 等。客戶端的指令碼程式可以通過 DOM 動態地檢查和修改頁面內容,它不依賴於提交資料到伺服器端,而從客戶端獲得 DOM中的資料在本地執行,如果 DOM 中的資料沒有經過嚴格確認,就會產生 DOM-based XSS 漏洞。
測試DOM程式碼如下:
<script> function test() { var str=document.getElementById("text").value; document.getElementById("t").innerHTML="<a href='"+str+"' >testLink</a>"; //呼叫innerHTML將使用者資料當中HTML寫入到網頁中,注入點 } </script> <div id="t" ></div> <input type="text" id ="text"value="" /> //取文字框裡面的值 <input type="button" id="s"value="write" onclick="test()" /> //呼叫test()函式網頁中會出現一個文字框和一個按鈕,當點選按鈕就會出現一個連線(test()函式)。執行該javascript程式碼。
點選按鈕後會呼叫test()函式,在文字框上出現一個連結。
我構造一個數據' onclick=alert(/xss/) // ,寫入的資料中前一個單引號閉合了href 語句中第一個單引號,最後//註釋掉最後一個單引號。
輸入完資料後,點選按鈕,再點選連結地址teskLink,就會出現如下圖:
另外一種注入測試:
構造一個新的事件,選擇閉合掉原來程式碼中<a>,插入一個新的HTML標籤。'><img src=# onerror=alert(/xss2/) /><'
**********************************************************************
by:答案
time:2017-2-28
**********************************************************************