- CTF實戰:技術、解題與進階
- ChaMd5安全團隊
- 874字
- 2023-08-28 18:13:19
1.2.2 XSS Bypass技巧
1.判斷輸出點及其上下文
嘗試插入正常的字符串如“xsstest”“111111”,確定字符串輸出的位置。
當輸出位置在標簽的屬性里時,可以看到輸出位置位于input標簽的value屬性處,輸出內容被引號包圍,如圖1-57所示。

圖1-57 輸出內容被引號包圍
閉合value屬性,寫入一個新的屬性并構造XSS Payload,比如我們可以通過HTML的事件對象來構造。一般在<、>被過濾時使用這種方法。
利用事件對象onclick語法執行JavaScript語句,當用戶點擊對象時調用其事件句柄。在瀏覽器中輸入Payload:?name="onclick="alert(xss);,執行結果如圖1-58所示。

圖1-58 onclick彈框
這里列出一些常用的事件對象,如表1-2所示。
表1-2 常用的事件對象

閉合input標簽,直接在頁面里構造XSS Payload。這時候構造Payload的方法就很多了,部分代碼如下。

執行結果如圖1-59所示。

圖1-59 閉合標簽
輸出位置在<script>標簽的情況還是比較常見的。舉個例子,我們輸入的name字段會被拼接到<script>標簽內,并且被一個函數的"和{}包裹,代碼如下。

輸入?name=1";}alert('xss');{"1,可以閉合"和{},執行結果如圖1-60所示。

圖1-60 繞過<script>標簽
因為輸出位置已經被script標簽包裹,所以我們的輸入會被當成JavaScript代碼執行,開發者在做XSS防護的時候很容易忽略這一點。
將用戶輸入的內容直接輸出在頁面上,這種沒有上下文的情況也比較常見,因為沒有上下文干擾,所以我們可以直接寫Payload。
2.構造Payload
下面介紹XSS靶場Prompt(1) to win中3個簡單的關卡。Prompt(1) to win的最終目標是在頁面上執行Prompt(1)。輸出點位于input標簽的value屬性中,兩邊被"符號包裹,如圖1-61所示。

圖1-61 定位輸出點
將input標簽閉合,再寫入prompt標簽。輸入"><script>prompt(1);</script>,執行結果如圖1-62所示。

圖1-62 執行成功
再來看一個例子,輸出點位于article標簽內,并且用正則表達式過濾了<內容>的標簽格式,如圖1-63所示。

圖1-63 正則過濾
正則規則分析如圖1-64所示。

圖1-64 正則規則分析
我們直接利用<img src=x onerror="prompt(1)",不輸入最后一個">",瀏覽器會自動往后尋找">"幫我們閉合img標簽,如圖1-65所示。

圖1-65 自動閉合標簽
接著進行下一關,過濾了=(,輸出位置沒有任何干擾,直接輸出在頁面上,如圖1-66所示。

圖1-66 過濾特殊符號
JavaScript里某些函數是支持用``代替()的,除了prompt()函數不支持。SVG標簽會將XML實體解析后加入標簽,我們可以利用其會解析編碼的特性繞過一些符號的過濾,代碼如下。

或者利用eval函數。在JavaScript里,eval函數能夠接受十六進制的字符串。

執行結果如圖1-67所示。

圖1-67 成功繞過特殊符號
- Metasploit Penetration Testing Cookbook(Third Edition)
- 可信計算3.0工程初步
- .NET安全攻防指南(上冊)
- 網絡運維親歷記 (網絡運維紀實文學)
- Learning Devise for Rails
- Instant Java Password and Authentication Security
- CTF特訓營:技術詳解、解題方法與競賽技巧
- CTF快速上手:PicoCTF真題解析(Web篇)
- 計算機網絡安全實驗指導
- 網絡空間安全法律問題研究
- 從實踐中學習Nmap滲透測試
- Instant OSSEC Host-based Intrusion Detection System
- CTF網絡安全競賽入門教程
- 黑客攻防從入門到精通:實戰篇(第2版)
- INSTANT Microsoft Forefront UAG Mobile Configuration Starter