XSS闖關挑戰(1-15)
第一關
關鍵程式碼:
這一關兩處的輸出都沒做任何防護,直接將使用者的輸入拼接到輸出裡面.
payload:
第二關
使用上一關的payload顯示如下
閉合一下標籤就好了.
第三關
htmlspecialchars編碼會將預定義的字元轉換為 HTML 實體。
字元 替換後 & (& 符號) & " (雙引號) ",除非設定了 ENT_NOQUOTES ' (單引號) 設定了 ENT_QUOTES 後, ' (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。 < (小於) < > (大於) >
這一關兩處輸出點都使用了htmlspecialchars編碼.那麼>和<都不能用,script標籤也就不能用了. 但是這裡單引號能用能起效果,應該是沒有做特殊設定吧.
payload
回車之後點選搜尋框即可
第四關
這一關用第三關的payload,將單引號改成雙引號就行.
第五關
這一關將<script和on關鍵詞進行了替換,並且使用者的輸入先用strtolower函式轉成了小寫, 前面的payload都無法使用了.
黑名單隻禁用兩個有啥用嘛,換個標籤閉合就行.
payload:
第六關
這裡黑名單禁用的比第五關多了.但是貌似忘了將使用者的輸入同意轉成小寫.大小寫繞過即可
payload:
第七關:
這一關存在黑名單,並且將使用者的輸入轉成了小寫,但是隻是將一些關鍵詞替換為空,這樣可以雙寫繞過
payload:
第八關
這一關並沒有將關鍵詞替換成空,最後還把雙引號轉義輸出.但是這一關加了個功能點,使用者的輸入會拼接到a標籤中做成一個可以跳轉的友情連結.那麼我們可以拼接一個javascript:alert(/xss/)進去,但是script會被替換,這裡用到了html實體化編碼,將script中的某個字元編碼掉.
payload
將
javascript:alert(/xss/)
輸入到框裡面點選新增友情連線即可
第九關
這一題在上一題的基礎上多加了一個strpos,strpos查詢字串首次出現的位置,如果沒有查詢到返回False,也就是說他這裡指定了使用者的輸入中要有http://字串,不然提示你的連結不合法.應該是認為連結中有http://開頭的就算是合法的吧.
payload
javascript:alert(/xss/)//http://
第十關
這一關有點坑,我看原始碼之後才知道還隱藏了三個框,填上一些引數之後發現第三個框可以是有效的輸入.
payload
第十一關
這一題不看原始碼真沒辦法.這一關在上一關隱藏的基礎上多隱藏了一個t_ref.先是像上一關那樣閉合但是沒有彈窗
看原始碼,這裡的$str11來自referer頭.然後將>和<替換成空變成$str33然後拼接到字串中.
那麼我們需要在refer頭裡面插入xss
payload:
放包,點選,彈框.
第十二關
這次的$str11來自HTTP_USER_AGENT頭
payload
hel10" onclick=alert(/xss/) type="text
將UA頭修改成payload,放包,點選,彈框
第十三關
這一關建立了一個cookie頭.
把payload插到cookie裡面
Cookie: user=call+me+maybe?" hel10" onclick=alert(/xss/) type="text
第十四關
這一關用到了exif xss,但是跳轉的這個網站好像有問題
簡單說一下exif xss的原理,exif可以記錄數碼照片的屬性資訊和拍攝資料。可使用滑鼠右鍵進入屬性頁面檢視部分資訊。有些網站就會讀取圖片的屬性資訊,當讀取到的是惡意的資訊的時候就會觸發payload.先知上面的圖.
第十五關
直接拿先知上面的payload吧,自己並沒有復現成功
這一關用了angularjs的ng-include,直接在包含的頁面裡用<script>觸發不了,用了img標籤。
遵循SOP,只好呼叫第一關程式碼。
需要單引號包裹,否則變成註釋。
paload:
/level15.php?src='level1.php?name=test<img src=1 onerror=alert(1)>'
AngularJS ng-include 指令
ng-include 指令用於包含外部的 HTML 檔案。
包含的內容將作為指定元素的子節點。
ng-include 屬性的值可以是一個表示式,返回一個檔名。