Level 1
界面如下:
直接在url中輸入腳本代碼:<script>alert(1)</script>
,成功執行
POC:
<script>alert(1)</script>
Level 2
在輸入框輸入Script代碼,顯示爲文本
查看源代碼,發現位於input標籤內
嘗試閉合,成功執行
POC:
"> <script>alert(1)</script>
Level 3
查看源碼,發現對" 、 < 、 >
進行了HTML實體編碼
因此在第三關的繞過就不能直接使用調用JavaScript腳本的方式,可以採用input標籤內的事件來繞過。
一些常用事件如下:
- onfocus 當input 獲取到焦點時觸發
- onblur 當input失去焦點時觸發,注意:這個事件觸發的前提是已經獲取了焦點再失去焦點的時候會觸發相應的js
- onchange 當input失去焦點並且它的value值發生變化時觸發
- onkeydown 在 input中有鍵按住的時候執行一些代碼
- onkeyup 在input中有鍵擡起的時候觸發的事件,在此事件觸發之前一定觸發了onkeydown事件
- onclick 主要是用於 input type=button,當被點擊時觸發此事件
- onselect 當input裏的內容文本被選中後執行一段,只要選擇了就會觸發,不是非得全部選中
- oninput 當input的value值發生變化時就會觸發,不用等到失去焦點(與onchange的區別)
使用格式爲:<input …… onfoucs='指定操作'>
,本次採用onfoucs
進行繞過,當鼠標聚焦時即可成功。
輸入:' onfoucs='alert(1)
,單引號用於閉合
POC:
' οnfοcus='alert(1)
Level 4
輸入"aaa<>
來觀察編碼情況,發現依然進行了編碼
繼續使用第三關的input事件來繞過," onfocus="alert(1)
,成功執行
POC:
" οnfοcus="alert(1)
Level 5
嘗試第四關的方法,不可以,查看源碼
發現源碼中對 on
做了轉換過濾,轉換爲 o_n
,嘗試了大小寫,失敗,因此需要再次更換繞過思路
輸入<>嘗試發現可以成功執行
因此嘗試進行僞鏈接繞過,先製造百度鏈接,成功
使用JavaScript解析:
"> <a href="javascript:alert(1)">link</a>
成功執行
POC:
"> <a href="javascript:alert(1)">link</a>
總結:
- 關卡1:無過濾
<script>alert(1)</script>
- 關卡2:需要閉合標籤
"> <script>alert(1)</script>
- 關卡3:對特殊符號進行了html實體編碼,因此需要採用不使用這些特殊符號的繞過方式,如使用input標籤的觸發事件函數。
' οnfοcus='alert(1)
- 關卡4:同關卡3,僅閉合符號有單引號變爲雙引號
" οnfοcus="alert(1)
- 關卡5:將
on
替換成了o_n
,因此觸發事件不可再用,使用a標籤構造僞鏈接
"> <a href="javascript:alert(1)">link</a>