一、漏洞原理
- 跨站腳本英文全稱(Cross Site Scripting跨站腳本),為了不和css層疊樣式表(英文全稱:Cascading Style Sheets)混淆,因此將跨站腳本縮寫為XSS,產生XSS漏洞根本原因其實是web應用未對用戶的輸入進行嚴格的過濾和轉義,導致攻擊者可從正常的輸入功能注入腳本代碼,我常將xss攻擊理解為一種javascript注入,當帶有xss惡意代碼的頁面被其他用戶訪問到時,js便會被執行,js腳本可以執行很多操作,比如:竊取用戶cookie,讀取用戶鍵盤記錄,截屏,惡意跳轉等,甚至可以結合BEEF的hook.js鉤子劫持用戶瀏覽器,
二、XSS漏洞檢測
1.公認XSS有三種型別:反射型、存盤型、dom型,根據字面意思很好區分三者,反射型即服務器根據用戶當前輸入做出的回應,只能觸發一次,這個程序就像一次反射,因此市面上大多self-xss都來自反射型xss,攻擊者輸入xss腳本,輸出僅自己看到,僅xss到自己,常在查詢、搜索等功能出現,
-
存盤型xss即頁面保存了攻擊者輸入的惡意代碼,除非對應記錄被洗掉,否則可以一直觸發xss,常在留言、個人資訊登記等功能出現,
-
dom型xss比較獨特,它涉及的兩個層次不是服務器端和瀏覽器端,而是瀏覽器端的JavaScript層和HTML層,換種更好理解的說法也就是:從服務器腳本變成了客戶端腳本,dom xss的payload不需要服務端決議回應,而是靠瀏覽器的dom決議,因此dom-xss的觸發是抓不到請求包的,漏洞示例xss.html:
<html>
<body>
<div id="tr1"></div>
<script>
document.getElementById("tr1").innerHTML = unescape(location.hash);
</script>
</body>
</html>

- xss漏洞檢測用彈窗進行測驗即可,常見的幾種彈窗方法:alert()、confirm()、prompt()、console.log(),測驗時,盡量結合各種xss型別的特征對功能點進行驗證,除了大家常說的“有框即插(看見輸入框就盲插xss payload)”,還需注意請求中的各種引數,是否可以原樣輸出或者以html代碼的形式保存到了另一個頁面,
三、XSS漏洞利用
- 上文提到過,xss的本質其實是js代碼的注入,所以XSS漏洞的危害來源于js代碼執行,最常見的就是盜取用戶cookie,但是在實際場景中我們經常會遇到cookie設定httponly屬性導致無法通過js腳本讀取的情況,這時還可以讀取用戶鍵盤記錄,截屏,惡意跳轉等,甚至可以結合BEEF的hook.js鉤子劫持用戶瀏覽器,
- 以最簡單的盜取cookie的payload為例,先用python搭建web服務充當xss平臺:

- 然后在存有xss漏洞的位置傳入payload:
- 上述payload先用document.cookie獲取了用戶cookie,然后利用document.location進行跳轉,這樣客戶端就會攜帶document.cookie的值訪問xss平臺,通過xss平臺的web日志即可查看對應記錄:

- 市面上的xss平臺其實已經撰寫出很多成熟的xss利用模板了,js代碼操作不熟練的師傅可以直接套用xss平臺的模板:

四、Markdown XSS
- Markdown 是一種輕量級標記語言,它允許人們使用純文本格式撰寫檔案,通過簡單的文本方式標記就能指定格式,輕輕松松完成檔案的編輯,markdown語言從文本-指定格式的轉換程序可以看作一系列的html轉換,最終以html標簽的形式存盤在頁面上,因此markdown編輯器也可能出現XSS漏洞,
- 插入超鏈接:


- 除了插入超鏈接,我們還可以參照常規的XSS payload進行嘗試,比如、
http://www.52bug.cn/hkjs/3292.html
https://mp.weixin.qq.com/s/7Qa4o0sYfJei07K3mjL-GA
五、上傳PDF導致的XSS
- 之前在論壇上看到過有師傅通過把xss代碼加到pdf檔案,然后通過正常的檔案上傳功能傳至目標服務器中,利用瀏覽器自帶的pdf閱讀功能觸發xss,這類漏洞還是會有部分廠商會確認的,參考文章:
https://www.t00ls.cc/thread-48480-1-1.html
https://www.t00ls.cc/articles-62790.html
pdf檔案還是很少被禁止上傳的,眾測專案中可以嘗試此類測驗,
2. 利用條件:1.有pdf檔案上傳點 2.保存好的pdf檔案可以直接瀏覽器查看,而不是只能下載至本地,
3. python腳本一鍵生成帶有xss代碼的pdf檔案:
from PyPDF2 import PdfFileWriter
file = PdfFileWriter()
file.addJS('app.alert("XSS");')
output = open('xss.pdf', 'wb')
file.write(output)
六、xss和markdown xss的fuzz字典可以到原文附件自取
該文章來源火線Zone社區:https://zone.huoxian.cn/d/532-web-xss
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312053.html
標籤:其他
