XSS跨站腳本攻擊漏洞之3Pikachu中的利用和繞過

說在開頭:文章是我通過查詢資料後按照自己的理解總結出來的,所以如果有說法不對的地方,歡迎大佬指正~


今天使用的平臺是Pikachu,可以看到它有以下幾道題目:
在這裏插入圖片描述
昨天在DVWA裏面遇到的都是最基礎版的XSS,今天這個從名字上就知道它做了變形,有些我還沒聽過,邊做邊學吧。

由於上一篇DVWA的講解已經非常詳細了,所以爲了節省時間,今天大致相同的步驟我就說簡略一點。

1.反射型(get)

哈哈哈之前沒看到題目是get方法,直接按post方法做的:

輸入框有長度限制,所以F12修改maxlength,然後再輸入payload:
在這裏插入圖片描述
出現彈窗:
在這裏插入圖片描述
用get方法做:
在這裏插入圖片描述

2.反射型(post)

首先是登錄頁面,發現直接在輸入框裏輸入payload沒有用,不知道是不是存在過濾機制,然後就去查看源碼,然後發現頁面上有提示:
在這裏插入圖片描述
登錄成功以後,在輸入框裏寫上payload,出現彈窗:
在這裏插入圖片描述

3.存儲型

查看反射型(post)的源碼時,看到這麼一句話:
在這裏插入圖片描述
所以我們這次讓它彈出cookie:
在這裏插入圖片描述
在這裏插入圖片描述

4.DOM型

F12查看源碼,找到我們傳參後它所在的語句:
在這裏插入圖片描述
發現用雙引號並不能閉合,於是去看看它的傳參語句:

  • 雖然註釋裏有答案,但我們的目的不是爲了得到答案,而是知道它爲什麼那麼寫。

在這裏插入圖片描述
根據源碼,我們 ’ > 來閉合前面的標籤,成功閉合。但是< script >標籤並不能出現彈窗,所以我們嘗試換用插入一種HTML標籤的方法,出現彈窗:
在這裏插入圖片描述

5.DOM型(xss-x)

按照圖示步驟,現在輸入框裏輸入內容,然後點按鈕,再然後點下面那條鏈接:
在這裏插入圖片描述
然後會出現一條新的鏈接,我們F12定位到那條語句,可以看到我們剛纔傳的參就在這句話這:
在這裏插入圖片描述
查看它的傳參源碼:
在這裏插入圖片描述
payload剛纔的一樣,輸入完以後要先點一下鏈接,纔會出現彈窗:
在這裏插入圖片描述

6.xss之盲打

因爲不確定哪一個輸入框存在XSS漏洞,所以我們在兩個地方都輸入payload,並且爲了區別,我們使兩個彈窗的內容不一樣;因爲是盲打,所以直接用繞過幾率最大的方法:
在這裏插入圖片描述
輸入完成以後,查看提示,跳轉到登錄頁面:
在這裏插入圖片描述
輸入賬號admin/1232456進行登錄:
在這裏插入圖片描述
登錄成功以後立馬出現彈窗,彈窗依次彈出“hello”和“123”,因此可以知道,留言和輸入姓名的地方都存在XSS漏洞:
在這裏插入圖片描述
在這裏插入圖片描述

7.xss之過濾

查看源碼,可以看到這裏用正則表達式對< script >標籤進行了過濾:

  • 對這個過濾機制不清楚的,可以去看我XSS之DVWA那篇博客,裏面講得非常詳細。

在這裏插入圖片描述
所以我們這裏使用插入一種HTML標籤的方法進行繞過:
在這裏插入圖片描述

8.xss之htmlspecialchars

htmlspecialchars()這個函數我第一次聽,所以首要工作是搞清楚這個函數是幹什麼的。

  • 1.htmlspecialchars()函數定義及用法
    在php中,htmlspecialchars()函數是使用來把一些預定義的字符轉換爲HTML實體,返回轉換後的新字符串,原字符串不變。如果 string 包含無效的編碼,則返回一個空的字符串,除非設置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 標誌;
  • 2.一共有5個預定義的被轉換的字符: &、"、’、<、> :轉換爲&xxx
  • 3.它的語法格式是:htmlspecialchars(string,flags,character-set,double_encode)
    一共有4個參數位置,除了第一個string是必要的,後面三個都是可選字段;
    其中,第2個字段flags是規定如何處理引號、無效的編碼以及使用哪種文檔類型。
  • 4.可用的引號類型:
    ENT_COMPAT:默認,僅編碼雙引號;
    ENT_QUOTES:編碼雙引號和單引號;
    ENT_NOQUOTES:不編碼任何引號。

查看源碼,可以看到使用的htmlspecialchars()函數只有一個參數,也就是說flags字段是默認選項,僅編碼雙引號:
在這裏插入圖片描述
因此,我們可以嘗試用單引號來構造payload:

  • 之前使用的三種繞過的語法都不行,在網上找了一個新的payload:
    ’ οnclick='alert(document.cookie)'
    在這裏插入圖片描述

9.xss之href輸出

查看源碼:
在這裏插入圖片描述

href的定義: < a > 標籤的 href 屬性用於指定超鏈接目標的 URL。
href 屬性的值可以是任何有效文檔的相對或絕對URL,包括片段標識符和JavaScript 代碼段。如果用戶選擇了 < a > 標籤中的內容,那麼瀏覽器會嘗試檢索並顯示href屬性指定的 URL 所表示的文檔,或者執行 JavaScript 表達式、方法和函數的列表。

結合源碼和href定義,我們可以知道:
雖然有htmlspecialchars()函數,但由於輸入的url拼接在 < a href=‘輸入的內容’>屬性中,所以可以使用javascript語法來構造payload:
javascript:alert(1)
在這裏插入圖片描述

10.xss之js輸出

查看源碼,可以看到前面有一段註釋:
在這裏插入圖片描述
看得似懂非懂吧,也不知道跟繞過有什麼關係,所以我試着讀一下代碼。
首先可以看到,我們的輸入被賦值給名叫 jsvar 的變量:
在這裏插入圖片描述
然後我們繼續往下翻,發現在< script >< /script >標籤中也有這個變量,昨天已經說過了,這個標籤的作用就是在 HTML 頁面中插入一段 JavaScript。
所以這裏應該就是體現了註釋中的“輸入動態的生成到了js中”:
在這裏插入圖片描述
所以還是從閉合語句的角度來做,構造payload:
'< /script >< script >alert(‘123’)< /script >
成功繞過:
在這裏插入圖片描述


總結:
今天學習的Pikachu的前面幾關可以在昨天學習DVWA的基礎上輕鬆過關,但是後面的8.htmlspecialchars、9.href輸出、10.js輸出,這三道題,讓我學會了很多知識點,很有收穫。

學到了兩個新的繞過方法:
1.οnclick=‘alert(document.cookie)’
2.javascript:alert(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章