XSS之編碼

一:html編碼
背景:html編碼是用於輸出html原本的標籤的
在這裏插入圖片描述比如我想在頁面上輸出div標籤,但是如果我在html標籤裏直接寫的話,就會被當成div標籤執行,並不會輸出在頁面上,這個時候我想將他輸出在頁面上就需要用html編碼

XSS中的應用:這種編碼的形式可以用來去繞過一些過濾,比如,有些會過濾掉script ,alert,< >這樣的危險的符號,這個時候,就可以用Html編碼來繞開過濾
在這裏插入圖片描述
比如這裏的輸出點在scr裏,可以閉合雙引號,然後寫一個onerror事件,將alert(1)進行html十進制編碼,這樣就避開了輸入的過濾,當數據到達輸出點時,頁面會先解碼,這個時候onerror後面就變成了字符串alert(1),但是當圖片資源加載失敗,觸發onerror這個事件時,這個時候這個字符串alert(1),就會當作js代碼執行,就會彈窗。我這裏用的html的十進制編碼,用十六進制也是一樣的效果
在這裏插入圖片描述
Html在線編碼工具:https://www.qqxiuzi.cn/bianma/zifushiti.php

二:js編碼
XSS應用:一般js的編碼用在通過innerHTML輸出在html裏面,比如var search = “可控點”;
document.getElementById().innerHTML=search;
在這裏插入圖片描述
在這裏插入圖片描述
在script標籤中,先將js編碼解碼,變成字符串<img src=“x” οnerrοr=alert(1)>,,然後就會以字符串的形式輸出在html的div標籤裏,然後當作html代碼執行,也就執行了這個語句,成功彈窗
Js解碼是用的xss encode插件

三:url編碼
背景:http協議中傳輸參數是key=value這種鍵值對的形式存在的,如果需要傳多個參數,就需要用&進行分割,如name1=value1&name=value2&name3=value3這種形式,如果這個時候,我們的值裏包含了&或者=這樣的符號,比如name1=value1,其中,value1的值是aaa&b=cc,那麼輸出的時候就會變成這樣:name1=aaa&b=cc,這本來是一個鍵值對,但是服務器會解析成兩個,會造成歧義,爲了避免這種情況,對參數進行了url編碼。&:%26,=:%3D,編碼後就變成了name1=aaa%26b%3Dcc,這樣服務器解析時,就還是一個鍵值對,然後進行Url解碼,就會獲取到正確的值了。

XSS中的應用:比如說當你的輸出點在a標籤的href屬性中時,對:進行了過濾,這個你輸javascript:alert(1)時,:就會被過濾,導致不能執行,這個時候就可以先用html編碼成&#58;,再
用url編碼將&編碼成%26,再輸出點瀏覽器會將html編碼解碼回:,然後輸出在href裏,就可以成功彈窗
url編碼和解碼可以在js控制檯使用js語句來進行編碼解碼:encodeURI(),encodeURIcomponed()
在這裏插入圖片描述
也可以用在線編碼工具:http://tool.chinaz.com/tools/urlencode.aspx

四:base64編碼
Base64一般用在a標籤和iframe標籤中,
<a href="輸出點">
</a> <iframe src="輸出點" frameborder="0"></iframe>,
如果過濾了javascript<>”’時,就可以考慮base64編碼,用data協議
<a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a>
解碼後爲:<img src=x οnerrοr=alert(1)>
當點擊鏈接時,頁面就會以html的方式解析,用base64的方法解碼,然後成功結果彈窗。
Base64在線編碼工具:https://base64.us/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章