【34】WEB安全學習----XSS攻擊2
一、JavaScript事件
在構造XSS程式碼時,如果對<>進行了編碼或過濾,那麼無法結束和新建HTML元素,此時可以用事件進行觸發(這裡不討論利用HTML標籤屬性值進行觸發,因為只支援少部分瀏覽器)。
JavaScript指令碼中的事件是指使用者載入目標頁面直到該頁面被關閉期間瀏覽器的動作,以及該頁面對使用者操作的響應。
視窗事件
當用戶執行某些會影響瀏覽器視窗的操作時,就會發生視窗事件。
onload:頁面載入完成觸發
onunload:關閉頁面時觸發
onresize:調整視窗大小時觸發
onmove:移動視窗時觸發
onabort:取消網頁上的影象載入時觸發
onerror:當發生JavaScript錯誤時觸發
onscroll:當向上或向下滾動頁面時觸發
滑鼠事件
onmousemove:移動滑鼠觸發
onclick:單擊觸發
常用HTML元素事件
<a>連結
onclick:滑鼠單擊連結
ondbclick:滑鼠雙擊連結
onmouseDown:滑鼠在連結的位置按下
onmouseOut:滑鼠移出連結所在的位置
onmouseOver:滑鼠經過連結所在的位置
onmouseUp:滑鼠在連結的位置放開
onKeyDown:鍵被按下
onkeyPress:按下並放開該鍵
onkeyUp:鍵被鬆開
<img>圖片
onerror:載入圖片出現錯誤時觸發
onload:圖片載入時觸發
onkeyDown:鍵被按下
onkeyPress:按下並放開該鍵
onkeyUp:鍵被鬆開
<input>文字欄位
onblur:文字框失去當前輸入焦點
onchange:文字框內容發生改變並且失去當前輸入焦點
onfocus:文字框得到當前輸入焦點
onselect:選擇文字框中的文字
<textarea>文字區
onblur:文字區失去當前輸入焦點
onchange:文字區內容發生改變並且失去當前輸入焦點
onfocus:文字區得到當前輸入焦點
onselect:選擇文字區中的文字
onkeyDown:在文字區中鍵被按下
onkeyPress:在文字區中按下並放開該鍵
onkeyUp:在文字區中鍵被鬆開
<form>表單
onreset:復位
onchange:修改表單欄位時觸發
onsubmit:提交表單
onclick:單擊按鈕時觸發
在構造XSS程式碼時,首先嚐試輸入<>'"等符號,看看編碼或過濾了什麼。一般首當其衝會對<>進行處理,如果返回值是在html元素裡,那麼此時可利用事件進行觸發,下一步就是單引號或雙引號的閉合問題。
二、DOM
在挖掘DOM型XSS漏洞時,首先需要了解DOM。
DOM(文件結構模型)中頂級物件及其作用:
Windows:表示與當前瀏覽器視窗相關的頂級物件,包括最大小化、新建視窗與關閉等。
Frames:表示文件頁面中框架陣列物件,每個框架都包含一個Windows物件。
Location:以URL的形式載入當前視窗,並儲存正在瀏覽的文件位置及構成。
Document:包含HTML文件中的HTML標記和構成文件的文字的物件,客戶端瀏覽器中的每個載入的HTML文件都有一個Document物件。
History:包含當前視窗的歷史列表物件。
Navigator:包含當前瀏覽器的相關資訊的物件。
Screen:包含當前瀏覽器允許的物理環境資訊的物件,如解析度等。
這裡主要學習下Document物件。
Document 物件
Document 物件使我們可以從指令碼中對 HTML 頁面中的所有元素進行訪問。
Document 物件屬性
屬性 | 描述 |
---|---|
body |
提供對 <body> 元素的直接訪問。 對於定義了框架集的文件,該屬性引用最外層的 <frameset>。 |
cookie | 設定或返回與當前文件有關的所有 cookie。 |
domain | 返回當前文件的域名。 |
lastModified | 返回文件被最後修改的日期和時間。 |
referrer | 返回載入當前文件的文件的 URL。 |
title | 返回當前文件的標題。 |
URL | 返回當前文件的 URL。 |
Document 物件方法
方法 | 描述 |
---|---|
close() | 關閉用 document.open() 方法開啟的輸出流,並顯示選定的資料。 |
getElementById() | 返回對擁有指定 id 的第一個物件的引用。 |
getElementsByNmae() | 返回帶有指定名稱的物件集合。 |
getElementsByTagName() | 返回帶有指定標籤名的物件集合。 |
open() | 開啟一個流,以收集來自任何 document.write() 或 document.writeln() 方法的輸出。 |
write() | 向文件寫 HTML 表示式 或 JavaScript 程式碼。 |
writeln() | 等同於 write() 方法,不同的是在每個表示式之後寫一個換行符。 |
主要就是觀察頁面JS程式碼裡的Document物件改變頁面的方法的引數,引數輸入點能否被使用者掌握。
關於XSS攻擊就到這裡,就不給出具體Demo演示了,遇到現實案例後在寫出。