您好,登錄后才能下訂單哦!
1、什么是XSS
XSS***全稱跨站腳本***,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
XSS***分成兩類:
(1)、一類是來自內部的***,主要指的是利用程序自身的漏洞,構造跨站語句。
(2)、另一類則是來自外部的***,主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。
如當我們要***一個站點,我們自己構造一個有跨站漏洞的網頁,然后構造跨站語句,通過結合其它技術,如社會工程學等,欺騙目標服務器的管理員打開。
XSS分為:存儲型和反射型
存儲型XSS:存儲型XSS,持久化,代碼是存儲在服務器中的,如在個人信息或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中。這種XSS比較危險,容易造成蠕蟲,盜竊cookie(雖然還有種DOM型XSS 但是也還是包括在存儲型XSS內)
反射型XSS:非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容) 一般容易出現在搜索頁面
開始我們的實驗
Low級別
1、構造我們常用的payload:<scrpit>alert(1)</script>
獲得彈框。不僅僅要做到***,分析一下原理
2、這里可以直接查看源碼,點擊右下角的view source。查看源碼
源碼里存在一個判斷語句,arrary_key_exists()函數判斷$_GET的值中是否存在“name”鍵名。并且$_GET[‘name’]的值是不是不為空,滿足這些條件,直接輸出下面的輸出語句。
這串源碼沒有特別的地方,不存在其他處理函數,典型的xss可***源碼。所以可以直接用我們的payload***
Medium級別
1、嘗試用第一種方法,看看有什么不同
發現我們輸入進去的<script></script>標簽被過濾掉了,猜測利用了什么過濾函數。既然它能夠將這個標簽過濾,我們就構造一個不用這個標簽的payload試一試。
2、構造payload:<img src=1 onerror=alert(1)>。
解釋:<img ..>標簽是添加一個圖片,src,指定圖片的url,onerror是指定加載圖片時如果出現錯誤則要執行的事件
這里我們的圖片url肯定是錯誤的,這個彈框事件也必定會執行
使用我們的payload***一下試一試。
發生了彈框,可以看出,后臺處理的時候應該只過濾了<script>標簽
3、我們查看一下源碼:
我們可以看到,在將獲取到的name值得時候,經過str_replace()函數過濾,將name值中的<script>標簽轉化為空。然后在將name值的結果輸出。
所以當我們使用low級別的payload的時候我們的<script>標簽被過濾掉。
4、特別注意的是這個函數也不太完美,因為它區分大小寫。所以當我們使用low級別中的payload大寫的時候,一樣可以繞過它的過濾。我們試一下
Payload:<SCRIPT>alert(1)</SCRIPT>
一樣可以彈框,當然繞過的還有很多方式。
處理這樣的paylaod的時候最好再在前面加一個strtolower()函數,將傳遞的name值得字符統統改為小寫。這樣就可以不管大小寫都能逃不出去。(只針對這一個payload)
High級別
1、當我們輸入帶有<script>標簽的payload的時候,不管大小寫,過濾的什么都不剩只有>,這是什么情況,我們查看一下源碼:
這里利用了preg_replace()函數,將包含<script的字符,不管大小寫,不管后面跟著1個或多個與之相同的字符都轉換為空。
2、既然它過濾這樣的字符串,那我們就用<img >標簽。
Payload:<img src=1 onerror=alert(1)>
出現了彈框。
Impossible級別
1、正如級別含義,不可能的,這個很難做到彈框
查看源碼
2、里面處理$_GET[‘name’]的值得時候利用了函數htmlspecialchars(),將值里面的預定義函數,都變成html實體
所以我們以上的payload都帶有<>,這個經過轉換之后是不會起作用的,也就不能夠造成彈框。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。