xss原理解析
xss->跨站指令碼攻擊
xss是指攻擊者在網頁中嵌入客戶端指令碼。通常是指javascript編寫的一個危險程式碼,當用戶使用瀏覽器瀏覽網頁時,指令碼就會在使用者的瀏覽器上執行,從而達到攻擊者的目的。
-->javascript越強,xss就越強
危害:
1.盜取使用者賬號
2.盜取使用者cookie資料,冒充使用者身份進入網站
3.劫持使用者會話,執行任意操作
4.執行彈窗廣告
5.傳播蠕蟲病毒
屬於客戶端攻擊,受害者是使用者與瀏覽器,但由於網站管理人員也是使用者 之一,從而也可以進行服務端攻擊
挖掘xss
尋找指令碼程式的輸出顯示程式,搜尋關鍵字,顯示輸出某個變數,跟蹤變數是否被過濾
一些web安全中常見名詞解釋
exp 漏洞的完整利用工具
poc 漏洞的驗證與檢測
shellcode 利用漏洞時執行的程式碼
payload 攻擊載荷 sqlmap中payload為攻擊程式碼的模板 msf 與shellcode類似,功能是建立與目標的連線
驗證xss是否存在poc常用:
<script>alert(/xss/)</script>
<script>confirm(/xss/)</script>
<script>prompt(/xss/)</script>
若提交的程式碼被當作字串輸出在html頁面中,瀏覽器會根據[<script>]標籤檢測為js語句,並執行它,執行彈窗操作,
從而可執行其他js任意語句,可驗證xss漏洞的存在。
反射型xss
非永續性,引數型的跨站指令碼.
js程式碼在web應用的引數(變數)中,如搜尋框的反射型xss.
儲存型xss
永續性跨站指令碼
體現在xss程式碼不是在某個引數中,而是寫進資料庫或檔案中,可以永久的保持在資料的介質中
通常發現在留言板等地方.
DOM XSS
其中攻擊的payload是由於修改受害者瀏覽器頁面的DOM樹而執行的
特殊的地方在於payload在瀏覽器本地修改dom樹而執行,並不會傳到伺服器上
導致伺服器端無法檢測DOM XSS,導致DOM XSS比較難以發現,原始碼中並無xss程式碼。
如
<script>
var a=document.URL;->變數a為現在的url地址
a=unescape(a);->對現在的url地址進行解碼
document.write(a.substring(a.indexOf("message=")+8,a.length));->將message後的字串擷取然後打印出來
js中substring函式講解
定義和用法
substr() 方法可在字串中抽取從 start 下標開始的指定數目的字元。
與substring()和slice()類似
語法
stringObject.substr(start,length)
引數 | 描述 |
---|---|
start | 必需。要抽取的子串的起始下標。必須是數值。如果是負數,那麼該引數宣告從字串的尾部開始算起的位置。也就是說,-1 指字串中最後一個字元,-2 指倒數第二個字元,以此類推。 |
length | 可選。子串中的字元數。必須是數值。如果省略了該引數,那麼返回從 stringObject 的開始位置到結尾的字串。 |
返回值
一個新的字串,包含從 stringObject 的 start(包括 start 所指的字元) 處開始的 length 個字元。如果沒有指定 length,那麼返回的字串包含從 start 到 stringObject 的結尾的字元。
indexOf函式
定義和用法
indexOf() 方法可返回某個指定的字串值在字串中首次出現的位置。
語法
stringObject.indexOf(searchvalue,fromindex)
引數 | 描述 |
---|---|
searchvalue | 必需。規定需檢索的字串值。 |
fromindex | 可選的整數引數。規定在字串中開始檢索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略該引數,則將從字串的首字元開始檢索。 |
說明
該方法將從頭到尾地檢索字串 stringObject,看它是否含有子串 searchvalue。開始檢索的位置在字串的 fromindex 處或字串的開頭(沒有指定 fromindex 時)。如果找到一個 searchvalue,則返回 searchvalue 的第一次出現的位置。stringObject 中的字元位置是從 0 開始的。