URL編碼表
http://www.w3school.com.cn/tags/html_ref_urlencode.html
%22 "
%23 #
%27 '
%2f /
' '
html 空格
" html "
javascript中的特殊字符如下:
\’ 單引號
" 雙引號
\& 和號
\\ 反斜槓
\n 換行符 url中對應%0a
\r 回車符
\t 製表符
\b 退格符
\f 換頁符
url中的特殊字符如下:
+ 表示空格(在 URL 中不能使用空格)
/ 分隔目錄和子目錄 /
? 分隔實際的 URL 和參數 ?
% 指定特殊字符 %
# 表示書籤 #
& URL 中指定的參數間的分隔符
javascript特性
1.//代表註釋後面內容
2,\一個字符村沒有結束。可以另起一行
3.js中都可以unicode表示
4.javascript裏有一個特性。 如下:
aaa();
function aaa(){}
凡是以 function xxx(){} 形式定義的函數,都會被最優先解析。換句話說:
解析器在解析JS代碼段時,會先將 function xxx(){} 拿到最前面解析,然後再依次解析其它的部分。 換句話說,上面的代碼,實際的解析順序是:
function aaa(){
}
aaa();
利用這樣一個特性,我們的代碼可以改改。
location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"¶m=";
一、反射型XSS的查找思路:
過濾了雙引號
1. 如果輸入值在JS腳本中
a.如果值在標籤的屬性中,要查看沒有過濾 &,# 等符號。
在HTML屬性中,會自動對實體字符進行轉義,所以可以考慮將單引號' 寫成 '。
<img src="1" onerror="alert(1)">和<img src="1" onerror="alert(1)"> 是等效的
因爲在url編碼中&-> %26, # -> %23
所以最後在Url編碼中輸入,%26%23x27;%2balert(1)%2b%26%23x27 就等於 '+alert(1)+
http://www.wooyun.org/bugs/wooyun-2010-015963
b 如果輸入值不在JS腳本中
a.如果值在標籤的屬性中,基本就繞不過了。
2. 存在寬字節
a. 如果輸入值在JS腳本中
1. 首先要看html採用了哪種字符集,如果是GB這種,一般就存在寬字節隱患。
寬字節跨站,過濾了雙引號。基本思路就是搞個%c0%22或者%bf%27用款字節過濾下。
正常寬字節是 %df%5c%27 但是%c0是可以吞掉一個%5c,也就是吞掉一個反斜槓\
http://www.wooyun.org/bugs/wooyun-2010-015969
3. 沒有過濾換行符
a. 如果輸入值在JS腳本中
1 .在JS中,如果輸出值存在於註釋當中,/n可以進行換行,如果在URL中則寫成%0a
http://www.wooyun.org/bugs/wooyun-2010-016003
4. 沒有過濾反斜線
a. 如果輸入值在JS腳本中 嘗試"閉合
1 .基本思路就是用\過濾到 \" 讓前一個字符結束"和後面一個字符的最開始”合併起來。如果過濾空格就/**/註釋掉試試。//註釋掉後面的內容
http://www.wooyun.org/bugs/wooyun-2010-015979
2. 如果輸出值在JS的註釋當中,則可以將\利用成一個字符竄沒有結束,另起一行。
如果\被拆成了\\兩個,則用%c0吃掉一個。
例如:var a="我是一個字符串\
我還是一個字符串";
http://www.wooyun.org/bugs/wooyun-2010-016008
二、DOM型XSS查找思路