xss-labs全關教程

謫仙hc發表於2021-04-24

0x01 Level 1

檢視原始碼,可以看到接收了name引數,並直接嵌入到HTML頁面中了

xss-labs全關教程

沒有任何過濾,而且直接會當作程式碼執行。

xss-labs全關教程

0x02 Level 2

先傳入<script>alert(1)</script>觀察一下,發現輸入的內容被放在了value的值中,被當作值時是不會執行程式碼的,所以我們要閉合前面的標籤。

xss-labs全關教程

用">閉合<input>標籤,然後開始一條新的標籤語句。

xss-labs全關教程

0x03 Level 3

首先檢視HTML程式碼閉合前面的標籤再寫入<script>標籤,發現不成功,看起來閉合無效,還是被當作值來解析的。

xss-labs全關教程

這是由於原始碼中使用了htmlspecialchars()函式對特殊字元進行了HTML實體轉義,所以無法發揮字元原來的作用。

xss-labs全關教程

既然不能使用<、>這類字元,那麼就使用標籤的on事件,構造

1' onfocus='alert(1)     //通過輸入的HTML程式碼變化,得知這裡要使用單引號閉合,執行後點選輸入框就會產生彈窗

xss-labs全關教程

0x04 Level 4

使用上題的payload,不過這題是使用雙引號"閉合

xss-labs全關教程

0x05 Level 5

使用第四關的payload進行測試,發現on被轉義了

xss-labs全關教程

使用">閉合前面的標籤,再構造<script>標籤,發現script也被轉義了,不過好訊息是">閉合成功了,可以使用其他標籤進行嘗試。

xss-labs全關教程

傳入:"><a href="javascript:alert(1)">click</a>

xss-labs全關教程

點選click出現彈窗

xss-labs全關教程

0x06 Level 6

使用上一關的payload進行測試,發現對href進行了轉義,經過測試發現對on和script都進行了轉義。

xss-labs全關教程

檢視原始碼發現它匹配前沒有進行大小寫統一,只能匹配小寫的進行轉義

xss-labs全關教程

因此,大小寫混淆繞過

"><body Onload=alert(1)>

xss-labs全關教程

0x07 Level 7

使用"><script>alert(1)</script>進行測試,發現script都變成空

xss-labs全關教程

嘗試雙寫繞過

"><scscriptript>alert(1)</scscriptript>

xss-labs全關教程

0x08 Level 8

先測試一下,發現輸入的內容被傳到了兩個地方,並且script被轉義了

 xss-labs全關教程

檢視原始碼發現基本上都被過濾了

 xss-labs全關教程
嘗試HTML編碼繞過

xss-labs全關教程

因為引數的值直接被傳入到了href之中,所以可以使用javascript偽協議,構造payload:

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)  //即javascript:alert(1)

點選友情連結,出現彈窗

xss-labs全關教程

0x09 Level 9

 通過原始碼發現比上題多了一個條件,就是對輸入的內容進行校驗,必須含有http://,否則判定“您的連結不合法?有沒有!”

xss-labs全關教程

在alert()中加入http://

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1http://)

 xss-labs全關教程

0x10 Level 10

檢視HTML程式碼,看到三個<input>標籤的型別是隱藏型別

xss-labs全關教程

測試一下哪些標籤是可以傳值的

?keyword=well%20done!&t_link="type="text&t_hidden="type="text&t_sort="type="text

 可以看到名為t_sort的輸入標籤的型別變成了text型,證明是可以傳值的

xss-labs全關教程 

可以看原始碼驗證一下

xss-labs全關教程

構造payload:

?keyword=1&t_sort=" autofocus onfocus="alert(1)

xss-labs全關教程

0x11 Level 11

檢視HTML程式碼,發現有四個隱藏標籤

xss-labs全關教程 

使用之前的方法測試,發現t_sort引數還是能傳入值的

&t_link="type="text&t_hidden="type="text&t_sort="type="text&t_ref="type="text

xss-labs全關教程

檢視原始碼,看到$_SERVER['HTTP_REFERER']欄位,HTTP_REFERER是用來獲取請求中的Referer欄位。

xss-labs全關教程

傳入Referer值進行測試

" onfocus="alert(1)" type="text

xss-labs全關教程

可以看到Referer的值被傳入了t_ref的標籤中,彈窗成功

xss-labs全關教程

0x12 Level 12

 檢視HTML程式碼,第四個標籤中的value值一看就是User Agent的內容

xss-labs全關教程

直接構造payload:

user-agent" onfocus="alert(1)" type="text

xss-labs全關教程 

彈出視窗

xss-labs全關教程

0x13 Level 13

檢視HTML程式碼,看到t_cook結合前幾關會不會想到cookie

 xss-labs全關教程

 傳入Cookie值進行測試,發現Cookie並沒有被傳入HTML標籤中

xss-labs全關教程

使用burpsuite抓個初始包看看,發現Cookie有一個鍵名user,忘記了必須給鍵名賦值才行

xss-labs全關教程

更改資料包的Cookie值後,Forward放包

xss-labs全關教程

 

Cookie值被傳到了HTML標籤中,並且彈出了視窗

xss-labs全關教程

0x14 Level 14

 這題是關於Exif的,Exif叫做可交換影像格式,是專門為數位相機的照片設定的,可以記錄數碼照片的屬性資訊和拍攝資料。

這題比較冷門,暫時不想做,有興趣的自行了解。

 

0x15 Level 15

 檢視HTML原始碼發現有一個ngInclude。

通過查詢發現ng-include 指令用於包含外部的 HTML 檔案;

包含的內容將作為指定元素的子節點;

ng-include屬性的值可以是一個表示式,返回一個檔名;

預設情況下,包含的檔案需要包含在同一個域名下。

xss-labs全關教程

 構造payload:

?src='level1.php?name=<a href="javascript:alert(1)">'

xss-labs全關教程

0x16 Level 16

使用<script>標籤進行測試,發現script被替換成了空位元組

xss-labs全關教程 

檢視原始碼,可以看到程式碼對空格進行了實體轉義

xss-labs全關教程

使用%0a代替空格,構造payload:

<body%0aonload=alert(1)>
// 繞過空格的方法還有很多,比如%0b,%0c,%0d,%09等等

 xss-labs全關教程

0x17 Level 17

檢視HTML原始碼

xss-labs全關教程 

看起來像引數拼接,構造payload:

arg01=%20onfocus&arg02=alert(1)

xss-labs全關教程

0x18 Level 18

 和上題一樣的方法

arg01=%20onfocus&arg02=alert(1)

xss-labs全關教程

0x19 Level 19

 我的谷歌和火狐都不支援,不做了

放個答案

version&arg02=<a href='javascript:alert(/xss/)'>xss</a>

0x20 Level 20

看到AngularJS想到了它存在模板注入

xss-labs全關教程

測試了一下沒成功

xss-labs全關教程

貼上別人的payload:

arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height

暫時不懂,等會了再補吧,如果想知道的話自行去了解吧!

 

相關文章