第三關
老套路,有輸入框進行輸入隨意值查看返回,然后在輸入xss注入語句。
沒結果,首先查看網頁端源碼進行分析。根據結果得出這次是真的過濾了尖括號。
那我們嘗試第二關的方法,進行閉合value參數看看。
依舊是沒有結果,繼續查看網頁源碼。我們可以發現,閉合value屬性這個方法是可行的,但是后面執行<script>alert(1)</script>語句的尖括號還是被過濾了。
這時我們可以換一個思路,首先xss的全名是Cross Site Scripting(跨站腳本攻擊)。script標簽只是為了達成xss攻擊這個目的一個小小的手段,我們為了達成xss攻擊這個可以有多個手段。比方說使用其他屬性的語句,然后屬性的值是javascript的偽協議(javascript:這個特殊的協議類型聲明了URL的主體是任意的javascript代碼,它由javascript的解釋器運行)或者使用一些屬性,屬性里面運行alert(1)彈框語句。
可以構造如下的payload(ps:onmouseover 屬性在鼠標指針移動到元素上時觸發。)
' onmouseover=javascript:alert(1) '
或者構造
' onmouseover='alert(1)
都可以完成攻擊。
攻擊成功,查看下網頁端的源碼。成功閉合構造onmouseover屬性
我們在查看后端源碼分析。使用了htmlspecialchars函數過濾輸入。
我們來看看這個函數的功能
htmlspecialchars() 函數把預定義的字符轉換為 HTML 實體。
預定義的字符是:
- & (和號)成為 &
- " (雙引號)成為 "
- ' (單引號)成為 '
- < (小於)成為 <
- > (大於)成為 >
過濾了一些符號,但是我們這邊在閉合后使用其他屬性語句突破,壓根就沒有使用尖括號。
總結:面對一些過濾的時候,我們可以換個思路使用其他標簽或者屬性來繞過從而達到xss攻擊這個目的。