1. 程式人生 > 實用技巧 >XSS闖關挑戰(1-15)

XSS闖關挑戰(1-15)

第一關

關鍵程式碼:

這一關兩處的輸出都沒做任何防護,直接將使用者的輸入拼接到輸出裡面.
payload:

第二關

使用上一關的payload顯示如下

閉合一下標籤就好了.

第三關

htmlspecialchars編碼會將預定義的字元轉換為 HTML 實體。

字元	替換後
& (& 符號)	&
" (雙引號)	",除非設定了 ENT_NOQUOTES
' (單引號)	設定了 ENT_QUOTES 後, ' (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小於)	&lt;
> (大於)	&gt;

這一關兩處輸出點都使用了htmlspecialchars編碼.那麼>和<都不能用,script標籤也就不能用了. 但是這裡單引號能用能起效果,應該是沒有做特殊設定吧.

payload
回車之後點選搜尋框即可

第四關

這一關用第三關的payload,將單引號改成雙引號就行.

第五關

這一關將<script和on關鍵詞進行了替換,並且使用者的輸入先用strtolower函式轉成了小寫, 前面的payload都無法使用了.

黑名單隻禁用兩個有啥用嘛,換個標籤閉合就行.
payload:

第六關

這裡黑名單禁用的比第五關多了.但是貌似忘了將使用者的輸入同意轉成小寫.大小寫繞過即可

payload:

第七關:

這一關存在黑名單,並且將使用者的輸入轉成了小寫,但是隻是將一些關鍵詞替換為空,這樣可以雙寫繞過

payload:

第八關

這一關並沒有將關鍵詞替換成空,最後還把雙引號轉義輸出.但是這一關加了個功能點,使用者的輸入會拼接到a標籤中做成一個可以跳轉的友情連結.那麼我們可以拼接一個javascript:alert(/xss/)進去,但是script會被替換,這裡用到了html實體化編碼,將script中的某個字元編碼掉.

payload

javascrip&#116;:alert(/xss/)

輸入到框裡面點選新增友情連線即可

第九關

這一題在上一題的基礎上多加了一個strpos,strpos查詢字串首次出現的位置,如果沒有查詢到返回False,也就是說他這裡指定了使用者的輸入中要有http://字串,不然提示你的連結不合法.應該是認為連結中有http://開頭的就算是合法的吧.

payload

javascrip&#116;: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 屬性的值可以是一個表示式,返回一個檔名。