pikachu-XSS(反射型、存儲型、DOM型)


XSS(跨站腳本)概述
Cross-Site Scripting 簡稱為“CSS”,為避免與前端疊成樣式表的縮寫"CSS"沖突,故又稱XSS。一般XSS可以分為如下幾種常見類型:
1.反射性XSS;
2.存儲型XSS;
3.DOM型XSS;

危害:存儲型>反射型>DOM型

XSS漏洞一直被評估為web漏洞中危害較大的漏洞,在OWASP TOP10的排名中一直屬於前三的江湖地位。
XSS是一種發生在前端瀏覽器端的漏洞,所以其危害的對象也是前端用戶。

XSS漏洞可以用來進行釣魚攻擊、前端js挖礦、用戶cookie獲取,甚至可以結合瀏覽器自身的漏洞對用戶主機進行遠程控制等。

形成XSS漏洞的主要原因是程序對輸入和輸出沒有做合適的處理,導致“精心構造”的字符輸出在前端時被瀏覽器當作有效代碼解析執行從而產生危害。
因此在XSS漏洞的防范上,一般會采用“對輸入進行過濾”和“輸出進行轉義”的方式進行處理:
輸入過濾:對輸入進行過濾,不允許可能導致XSS攻擊的字符輸入;

輸出轉義:根據輸出點的位置對輸出到前端的內容進行適當轉義。

XSS測試流程

1、在目標上找輸入點,比如查詢接口、留言板

2、 輸入一組 “特殊字符(>,',"等)+唯一識別字符” ,點擊提交后,查看返回源碼,看后端返回的數據是否有處理

3、通過搜索定位到唯一字符,結合唯一字符前后語法確定是否可以構造執行js的條件(構造閉合)

4、 提交構造的腳本代碼(以及各種繞過姿勢),看是否可以成功執行,如果成功執行則說明存在XSS漏洞

一、反射型XSS

我們先輸入“ '"<>6666 ” 用於測試我們的輸入會不會被過濾掉,因為有特殊字符

 

 我們可以右擊查看頁面源碼,Ctrl+F  查找 6666,可以找到下圖的語句

 

我們的輸入被原封不動地輸出到了 p 標簽中,下面測試我們輸入的JS代碼,看是否會原封不動地輸出

輸入 <script>alert("xss")</script>

 由於前端對輸入長度做了限制,我們需要修改一下才能輸入完整的語句  Fn+F12進入控制台

 

 修改之后,重新填寫提交

 

我們可以在瀏覽器的url中獲取到這樣一個Get請求

 http://127.0.0.1/pikachu-master/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%28%22xss%22%29%3C%2Fscript%3E&submit=submit

我們打開一個瀏覽器輸入這段,也會出現彈窗

 

 GET方式的XSS漏洞更容易被利用,一般利用的方式是將帶有跨站腳本的URL偽裝后發送給目標,而POST方式由於是以表單方式提交,無法直接使用URL方式進行攻擊。

二、存儲型XSS

存儲型XSS漏洞跟反射型形成的原因一樣,不同的是存儲型XSS下攻擊者可以將腳本注入到后台存儲起來,構成更加持久的危害,因此存儲型XSS也稱“永久型”XSS

 

 我們輸入111 留言列表中出現,我們刷新,發現留言還在上面

 

 按照上面的思路判斷有沒有XSS漏洞,輸入帶有特殊符號的語句

'"<>?%66666

 

 我們右鍵查看頁面源碼

 

 

可以看到沒有做任何的過濾處理

接下來我們構造js語句,輸出一個簡單的彈窗

輸入  <script>alert('xss')</script>

輸出彈窗,刷新之后依舊出現,因為這條留言已經被存儲在數據庫里了,所以每次訪問都會出現,所以說危害是很大的

 

 

查看源碼(路徑如下)

 

 

 這段代碼的意思是將數據庫中所有的信息查出來,顯示到前端的頁面上,輸出的時候,直接把content原封不動的輸出到頁面上,這樣就形成了存儲型XSS漏洞

三、DOM型XSS

DOM可以理解為訪問HTML的標准接口,DOM里面會把我們的HTML分成一個DOM樹

可以參考:https://www.w3school.com.cn/htmldom/index.asp

HTML DOM 樹

HTML DOM Node Tree

我們可以以這棵樹為入口,通過DOM的某些方法對樹進行操作,比如對標簽的添加、改變和刪除等

DOM這個東西相當於在前端提供了一個通過JS去對HTML進行操作的接口,接下來我們測試一下

 

 我們發現輸入和輸出的內容是有區別的

觀察頁面源碼

 

 

這里有段JS代碼,它通過 getElementById 獲取到了標簽 Id 為 text的內容賦值給str, 然后又把 str 的內容通過字符串拼接的方式寫到了 a 標簽的 href 屬性中,a標簽會寫到 Id 為 dom的 div 標簽中

我們通過閉合的方式構造Payload     #' onclick=alert("xss")>

 

 點擊what do you see? 出來彈窗

 

 造成DOM型XSS的原因是前端的輸入被DOM給獲取到了,通過DOM又在前端輸出,跟反射型和存儲型比起來,它是不經過后台交互的

四、DOM型XSS-X

我們隨便輸入內容會在下面出現這樣一句話

 

 觀察頁面源碼

 

 這里也有個JS代碼,它定義了一個domxss函數。它利用 window.location.search 獲取瀏覽器中url的內容,然后賦值給 str,經過URL解碼和字符串分隔,取出URL中的參數內容,再把 “+” 替換為 “ ”(空格),賦值給 xss,最后把 xss 拼接到 a 標簽中,然后寫到 Id 為 dom 的 div 標簽中。

跟前面的DOM不同的是,它的輸入是從瀏覽器的URL中獲取的,很像反射型XSS(get),構造的Payload跟剛才是一樣的

 #' onclick=alert("xss")>

點擊紅框,會出來彈窗

 

我們復制瀏覽器中的網址http://127.0.0.1/pikachu-master/vul/xss/xss_dom_x.php?text=+%23%27+onclick%3Dalert%28%22xss%22%29%3E#

只要用戶打開這個網頁,就可以把這個的內容插入到用戶頁面里面。

 

 

 

 

 

 
        

 

    

 

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM