概述
XSS(跨站腳本)
Cross-Site Scripting 簡稱為“CSS”,為避免與前端疊成樣式表的縮寫"CSS"沖突,故又稱XSS,
XSS漏洞可以用來進行釣魚攻擊、前端js挖礦、用戶cookie的獲取,甚至可以結合瀏覽器自身的漏洞對用戶主機進行遠程控制等,
XSS是一種發生在web前端瀏覽器的漏洞,所以其危害的物件也是前端用戶,
形成XSS漏洞的主要原因是程式對輸入和輸出沒有做合適的處理,導致“精心構造”的字符輸出在前端時被瀏覽器當作有效代碼決議執行從而產生危害,因此在XSS漏洞的防范上,一般會采用“對輸入進行過濾”和“輸出進行轉義”的方式進行處理:
輸入過濾:對輸入進行過濾,不允許可能導致XSS攻擊的字符輸入;
輸出轉義:根據輸出點的位置對輸出到前端的內容進行適當轉義;
分類
- 反射型XSS:互動的資料一般不會被存在資料庫里,一次性,即所見所得,一般出現在查詢;
- 存盤型XSS(持久性XSS):互動的資料會被存在資料庫里,永久性儲存,一般出現在留言板、注冊等頁面;
- DOM型XSS:不與后臺服務器產生資料互動,是一種通過
DOM操作前端代碼輸出的時候產生的問題·,一次性也屬于反射型,與反射型區別在于不會與后臺進行資料互動;
危害型:存盤型>反射型>DOM型
XSS漏洞基本測驗流程
- 在目標站點找到找到輸入點,比如查詢介面、留言板等;
- 通過一組“特殊字符【如
*、&、<、>、%、¥、“、‘】+唯一識別字符”,點擊提交后查看回傳的原始碼,是否有做對應的處理; - 通過搜索定位到唯一字符,結合唯一字符前后語法確認是否可以構造執行js的條件(構造閉合);
- 提交構造的腳本代碼(以及各種繞過姿勢),看是否可以成功執行,如果成功執行則說明存在XSS漏洞,
注意: - 一般查詢介面容易出現反射型XSS,留言板容易出現存盤型XSS;
- 由于后臺可能存在過濾措施,構造的
script可能會被過濾掉,而無法生效,或者環境限制了執行(瀏覽器); - 通過變化不用的
script,嘗試繞過后臺過濾機制,
反射型xss(get)

方法
- 首先輸入類似于特殊字符+唯一識別字符格式的字串,如
‘“<>6666,點擊提交后查看回應結果,
- 點擊右鍵,查看網頁源代碼,
Ctrl+F,輸入6666,即可找到輸出點對應的原始碼,可以觀察出來我們輸入的內容被原封不動的回傳,我們可以猜測如果輸入正確的javescript的陳述句,也會被原封不動的回傳,
- 我們可以嘗試輸入
javascript陳述句<script>alert('xss')</script>,發現輸入內容的長度被限制,

- 一般字串長度的限制在前端,點擊F12,打開開發者工具,查看輸入框對應的原始碼,我們發現
maxlength為20,我們可以改為20000,

- 輸入我們想要輸入的
javascript代碼,點擊提交,可以看到一個xss的彈窗(javascript陳述句中alert后面括號里面的內容即為彈窗內容),說明這個javascript陳述句被后臺執行,
- 由于為反射型
xss,我們重繪頁面后,剛才的操作均為一次性, - 這種反射型
xss是以get方式發送的請求,即輸入的payload在url中被提交至后臺,
分析原始碼

首先后端會判斷輸入的內容是否為空,頁面會提示輸入"kobe"試試,如果我們輸入的內容為kobe,則會提示who is {$_GET['message']},i don't care!如果輸入的內容為kobe,則會提示愿你和{$_GET['message']}一樣,永遠年輕,永遠熱血沸騰!其中的{$_GET['message']},我們可以發現,未對輸入的內容進行防xss處理,
攻擊方式
我們可以將合理的javascript陳述句寫入url中,然后把這個url偽裝后發送到我們要攻擊的目標,一旦攻擊目標點擊這個域名【簡稱域名、網域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用于在資料傳輸時標識計算機的電子方位(有時也指地理位置),例如,www.wikipedia.org是一個域名,和IP地址208.80.152.2相對應,IP是位置的數字型標識,而域名為位置的字符型標識,而域名系統則為將域名和IP地址相互映射的一個分布式資料庫】,則將會產生XSS漏洞,
反射性XSS(post)
get與post典型區別:
get是以url的方式提交資料,而post是以表單方式在請求體里面提交,

方法
- 點擊頁面右上方的提示,可獲得正確的用戶名admin和密碼123456并登陸成功,

- 輸入類似于特殊字符+唯一識別字符格式的字串,如
‘“<>6666,點擊提交后查看回應結果,
- 點擊右鍵,查看網頁源代碼,
Ctrl+F,輸入6666,即可找到輸出點對應的原始碼,可以觀察出來我們輸入的內容被原封不動的回傳,我們可以猜測如果輸入正確的javescript的陳述句,也會被原封不動的回傳,
- 輸入我們想要輸入的
javascript代碼<script>alert('xss')</script>,點擊提交,可以看到一個xss的彈窗(javascript陳述句中alert后面括號里面的內容即為彈窗內容),說明這個javascript陳述句被后臺執行, - 查看
url,因為為post請求,無法將url發送給攻擊目標,這是我們可以通過burp抓取對應資料包,獲得合法的url并發送給攻擊目標,

存盤型XSS
存盤型xss與反射型xss形成原因相同,不同的是存盤型XSS下攻擊者可以將腳本注入到后臺儲存起來,構成更加持久的傷害,因此存盤型XSS也稱永久性XSS,
方法

- 跟反射型XSS步驟相同,首先輸入一個測驗的
payload,并查看原始碼,可以發現測驗陳述句被原封不動的回傳, - 輸入一個合法的
javascript陳述句<script>alert('xss')</script>,我們同樣可以看到一個xss的彈窗,而與反射型唯一的區別在于,我們重繪頁面后,同樣還會看到xss的彈窗,因為剛剛的留言已經被存到資料庫中,每次點擊這個頁面都會觸發這個腳本的運行得到彈窗,訪問這個頁面的用戶都會成為攻擊目標,
查看原始碼


首先判斷輸入的內容是否為空,然后進行一個防sql注入的轉義【insert into....values、select from...之類的陳述句,在之前資料庫的博客中都有提過 資料庫知識整理相關博客】然后提交完成后將之前所有的留言記錄回圈輸出,
DOM型xss
什么是DOM
通過javascript,可以重構整個HTML檔案,可以添加、移除、改變或重排頁面上的專案,要改變頁面上的某個東西,javascript就需要獲得對HTML檔案中所有元素進行訪問的入口,這個入口,連同對HTML元素進行添加、移動、改變或者移除的方法和屬性,都是通過檔案物件模型來獲得DOM,所以,可以把DOM理解為一個一個訪問HTML的標準編程介面,

方法

- 隨便輸入1111,我們看見頁面提示,點擊右鍵查看原始碼,我們可以看看后臺進行了怎么樣的操作,

- Ctrl+F,對應到what dou you see?對應的原始碼,

- 我們可以看到輸入和輸出未作出任何轉義或者其他的操作,

- 我們將 <a href=’"+str+">what do you see? 拿出來分析,我們的目的是通過構造閉合的
payload來執行預期的代碼,我們構造 
即為我們構造的payload,- 將我們構造的
payload輸入,并點擊下面的標簽,即可成功得到一個111的彈窗,說明此處存在DOM型XSS漏洞,
DOM型XSS-X

方法
- 隨便輸入內容,提交后可以看到這樣的提示,我們這時點擊右鍵查看對應的原始碼來看它的邏輯,

- 原始碼中
window.location.search作用為獲取瀏覽器的引數,獲取url傳參的引數內容并進行url解碼,其他原始碼幾乎與上一型別相同,

- 這與上一種型別不同地方在于輸入是從瀏覽器的url獲取,即可以從url中看到輸入的內容,類似于反射型XSS(get),
- 構造與上一題相同的合法的payload

- 點擊提交后,將兩個標簽進行店家點擊,即可得到一個111的彈窗,則說明此處存在DOM型XSS漏洞,

- 攻擊方法與反射型XSS(get)相同,將url偽裝后發送給我們的攻擊目標,攻擊目標點擊這個域名,就會產生XSS漏洞,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283045.html
標籤:其他
上一篇:HDFS入門(六)—— DataNode(圖文詳解步驟2021)
下一篇:Servlet和Http學習
