XSS challenge通關筆記
ps:小白一名,有問題請指教
XSS(cross site scripts)
是指惡意攻擊者利用網站沒有對用戶提交數據進行轉義或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,使別的用戶訪問都會執行相應的嵌入代碼。
- DOM型
- XSS反射型->前端->後端->前端短鏈接
- XSS存貯型(評論留言框等)前端->後端->數據庫->前端
- 手工:拿cookie
- 自動化xss:BeEF
challenge1:
將敏感字符試一下檢查是否存在過濾,發現沒有進行過濾直接輸入:
<script>alert(document.domain)</script>
成功:
challenge2
直接使用challenge1中的代碼試一下,發現沒有彈框和提示,僅僅只有try agin;
我們打開源代碼:
發現在value屬性下沒有使用閉合標籤>使代碼不能執行,我們加上閉合標籤:
"><script>alert(document.domain)</script>
成功彈窗;
challenge3
我們發現第三關多了一個查詢功能,我們輸入dj查找,給出提示我們查找失敗;
現在多一個參數p2,即有p1,p2兩個參數,我們試一下抓包修改p2參數來注入代碼;
將p2的參數Japan修改成script代碼,forward得到這個界面:
成功;
challenge4
發現和關卡3一樣的界面,打開源代碼瀏覽一下,果然發現相比關卡3不一樣的是多了一個隱含參數p3,如圖:
forward成功;
challenge5
原本想試下是不是會過濾了字母或者符號什麼的,然後發現有長度限制,要去改長度限制,一般前端都可以改長度限制的,於是:
我將maxlength改爲了100,輸入
"><script>alert(document.domain)</script>
成功彈窗;
challenge6
隨便輸入一個字符tryagain,輸入payload發現頁面的查詢框變成了空白:
這是爲什麼呢?
查看源代碼發現value屬性後顯示:
><script>alert(document.domain)<=""
發現<>符號被HTML 特殊字符代替,說明輸入內容被HTML實體編碼;
這裏可以在input標籤裏添加onclick屬性,點擊觸發彈窗;
" οnclick="alert(document.domain)"
點擊search搜索框便會彈出:
challenge7
老規矩還是先輸入代碼試一下發現不成功打開源代碼查看:
發現並沒有什麼差別,我們再仔細查看一下value:
噢噢原來如此,是過濾了雙引號,這就好辦了,第一種方法是按照關卡6添加onclick屬性照樣可以彈框成功;
第二種方法是
1 onmouseover=alert(document.domain);
ps: onmouseover:事件會在鼠標指針移動到指定的元素上時發生。
challenge8
發現這裏是製作一個鏈接使其彈出一個窗口,只需要在標籤中添加一個JavaScript僞鏈接即可:
彈窗成功;
challenge9
查看源代碼有隱藏屬性,抓包
發現"<>字符都已經被過濾,百度一下euc-jp是什麼,根據提示原來是要構造utf-7的編碼;這裏就需要用到IE7瀏覽器,但是我並沒有IE7,這裏就不展示彈窗結果了;
challenge10
老規矩直接在search之前的payload,查看源碼:
發現domain被過濾了,第一反應就是雙寫繞過:
"><script>alert(document.dodomainmain)</script>
成功彈窗:
challenge11
首先試一下JavaScript代碼發現script被過濾
行不通,換成之前的點擊彈窗發現也已經被過濾( onclick和onmouseover)
果然,查看提示:
轉義 script on… style 對這些字符串進行了轉義
根據其錯誤提示可以想到用標籤 製作超鏈接
"><a href="javascr	ipt:alert(document.domain);">點擊跳轉</a>
並且對script進行了過濾,javascript那裏雖然有script,但是可以用 製表符,回車符,換行符 來欺騙過濾器。payload中 script 中間插入 ,
,空格等不可見字符對script進行分割,讓正則匹配不到;
challenge12
一樣是先嚐試先前的payload,發現過濾了<>", 根據提示可以知道x00-,x20,<,>,",'都被過濾了,到了這我不知道怎麼辦了,參考了某位博主,原來 ` 還沒被過濾,利用IE瀏覽器特性反引號解析爲引號構造payload:
``onmouseover=alert(document.domain);
彈框成功;
challenge13
可以發現,style和value屬性值都是輸入框的內容,而且會發現這裏又過濾了雙引號
xss:expression(alert(document.domain));
這裏也需要利用IE8,本人太懶就不再多演示;
但是這裏提示是 style attribute涉及到有關CSS的知識,在CSS樣式中利用expression實現javascript中的onmouseover或onmouseout事件;
challenge14
我直接看了提示這裏過濾了url/script/eval/expression,直接這樣過濾可以插入註釋符繞過:
xss:expr\0ession(alert(document.domain));
xss:expr/**/ession(alert(document.domain));
到這裏我先總結引號被過濾的幾種情況:
1. 添加屬性(onmouseover或onmouseout事件以及expression)觸發彈窗
2. "<>都被過濾時可以構造編碼
3. 利用IE瀏覽器反引號翻譯成雙引號的特性
challenge15
根據提示這裏過濾了document.write(),兩種解決辦法
16進制編碼 \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
Unicode編碼 \\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
challenge16
用上述payload先試一下:
發現\、< >被過濾了, js編碼有很多種,所以這裏繞過也有很多種:
Unicode編碼 \u003cimg src=x onerror=alert(document.domain)\u003e
八進制 \\74img src=x onerror=alert(document.domain)\\76
彈窗成功;
本人第一次寫博客哈哈哈不要各位大佬不要嫌棄(如果有幸刷到)有問題多指教