XSS_Labs靶場通關

XSS-labs靶場(1-20)

開始通關!

 

0x01 (直接漏洞注入)

反射型xss注入
1、遇到?name=text,嘗試參數注入
注入語句:
<script>alert(『xss’)</script>

 

0x02(閉合符號)

從url入手開始看,依然是get方式傳遞參數,應該還是反射型xss
閉合” “> 使用”> ….//

概念(知識點)補充
<script>alert(『xss’)</script>
其中<和>都被編碼成了html字元實體
1、猜測在伺服器端用htmlspecialchars()函數對keyword參數的值進行了處理
2、但是問題是這裡的js程式碼在標籤屬性值中,瀏覽器是無法執行的

htmlspecialchars()編碼 「<」 「>」
&lt;代表小於號(<)
&gt;代表大於符號(>)
&le;表示小於或等於符號(<=)
&ge;表示大於或等於符號(>=)

思路: 

  1. 既然上面的惡意程式碼被編碼了,那麼只能從屬性值中的惡意程式碼處進行突破
  2. 要想瀏覽器執行這裡的彈窗程式碼,只需要 屬性的引號標籤先閉合 就可以

漏洞程式碼:

“><script>alert(‘xss’)</script>//

1、左邊的”>去閉合原先的”
2、右邊的//去注釋原先的”>

查看源碼後

 

0x03(使用不帶有<>的事件程式碼,例如:onfocus、onmouseover)

首先使用<script>alert(“xss”)</script> 進行測試

 
這裡可以通過<input>標籤的一些特殊事件來執行js程式碼
特殊事件:onfocus
onfocus 事件在對象獲得焦點時發生。
onfocus 通常用於 <input>, <select>, 和<a>
最簡單的實例就是網頁上的一個輸入框,
當使用滑鼠點擊該輸入框時輸入框被選中可以輸入內容的時候就是該輸入框獲得焦點的時候,
此時輸入框就會觸發onfocus事件.因此點擊當前頁面的輸入框就可以完成彈框了。
 
1、通過onfocus去繞過< >被編碼的情況
2、’onfocus=javascript:alert(‘xss’) >
構造程式碼:level3.php?keyword=’onfocus=javascript:alert(‘xss’) > //&submit=搜索
 

0x04

首先使用<script>alert(“xss”)</script> 進行測試

箭頭1處直接將<和>編碼轉換了
箭頭2處卻是把<和>刪除了
但是,事件觸發卻不需要使用這兩個符號。
用上一關的程式碼:level4.php?keyword=”onmouseover=”alert(/xss/)

 

0x05(<a>標籤繞過)

1、首先使用<script>alert(“xss”)</script> 進行測試

 

2、使用」onfocus=javascript:alert(「xss」)」>

 
觀察:
1、<script>標籤會被替換成<scr_ipt>
2、onfocus事件會被替換成on_focus
 

 

0x06(<a>標籤的大小寫繞過)

首先使用<script>alert(“xss”)</script> 進行測試

 

 

0x07(雙寫關鍵字繞過)

1、首先使用<script>alert(“xss”)</script> =>中的<script>被過濾掉
2、使用onfocus=javascript:alert(“xss」) =>中的onfocus被過濾成focus
3、使用”><a href=javascript:alert(“xss”)>xss</a>// =>中的href被過濾掉
嘗試雙寫關鍵字繞過

 

0x08(將ri編碼十六進位繞過)

首先嘗試<script>alert(“xss”)</script> =>script中的ri被替換過濾成r_i,所以嘗試編碼繞過

 
並且發現我們輸入的payload漏洞程式碼,是被傳輸到友情鏈接的<a>標籤中
所以下一步測試<a>標籤
*經過測試,html實體編碼和hex編碼都可以繞過

漏洞程式碼:javasc&#x72;&#x69;pt:alert(/xss/)

 

0x09

首先使用之前關卡的漏洞程式碼:
<script>alert(“xss”)</script>
javasc&#x72;&#x69;pt:alert(/xss/)

 
查看源碼發現:

 

漏洞程式碼:javasc&#x72;&#x69;pt:alert(‘//’)

 
 

0x0A(更改from標籤中input的type屬性)

首先使用之前關卡的漏洞程式碼:
<script>alert(“xss”)</script>
javasc&#x72;&#x69;pt:alert(/xss/)

 

解題技巧是:
1、將input標籤的type類型的hidden改為text
2、將漏洞程式碼填寫到value中

 

0x0B(前端程式碼更改,加入onmouseover)

延續上一題解法:

另一種解法:
看著參數t_ref是用於接收Referer參數的
 

0x0C(使用brup更改User_Agent)

延續上一題的解法

另一種解法:
查看參數t_ua傳的值,就可以判斷該參數就是傳遞User_Agent

 

使用brupsuite抓包傳遞漏洞程式碼

 

0x0D(使用brup更改Cookie)

延續上一關技巧,直接更改前端程式碼

 
第二種解法,通過brupsuite抓包重構數據包

 
 

0x0E(Exif隱寫)

 
 

0x0D(ng_lnclude調用外部URL)

查看源碼後

 
ng_lnclude的用法:
1、ng-include 指令用於包含外部的 HTML文件。
2、包含的內容將作為指定元素的子節點。
3、ng-include 屬性的值可以是一個表達式,返回一個文件名。
4、默認情況下,包含的文件需要包含在同一個域名下。
 
值得注意的是:
1. ng-include,如果單純指定地址,必須要加引號
2. ng-include,載入外部html,script標籤中的內容不執行
3. ng-include,載入外部html中含有style標籤樣式可以識別
 
ng_lnclude的作用就是加入一個外部的url鏈接地址
隨後去查看源碼

 
漏洞程式碼:?src=’level1.php?name=<a href=”javascript:alert(/xss/)”>xss<a/>’
 
 

0x0E(空格解析繞過)

嘗試空格解析
<img src=”” onerror=alert(“xss”)> 
onerror事件:當img圖片載入失敗會觸發的事件

 

0x0F(兩個參數自動拼接)

因為Google和火狐瀏覽器插件的原因,彈窗沒辦法正常彈出,推薦使用獵豹瀏覽器
 

0x0G

與上關一致payload
?arg01=”onmouse&arg02=”alert(/xss/)

持續更新…end#