手把手教你利用XSS攻擊體驗一次黑客
本文已參與「掘力星計劃」,贏取創作大禮包,挑戰創作激勵。
前言:大家好,我是東東吖。前兩天我收到安全部門的一個通知:高風險XSS攻擊漏洞。
我們部門首先確定風險來源,並給出瞭解決方案。前端部分由我解決,並緊急修復上線。
一:那麼什麼是XSS攻擊呢?
人們經常將跨站指令碼攻擊(Cross Site Scripting)縮寫為CSS,但這會與層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆。因此,有人將跨站指令碼攻擊縮寫為XSS。惡意攻擊者往Web頁面裡插入惡意html程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html程式碼會被執行,從而達到惡意使用者的特殊目的。主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。XSS是web安全最為常見的攻擊方式,在近年來,常居web安全漏洞榜首。
光看這個定義,很多同學一定不理解是什麼意思,下面我會模擬XSS攻擊,同學們應該就知道怎麼回事了。 在模擬XSS攻擊之前,我們先來看看XSS攻擊的分類。
二:XSS攻擊有幾種型別呢?
①反射型XSS攻擊(非永續性XSS攻擊)
②儲存型XSS攻擊(持久型XSS攻擊)
③DOM-based型XSS攻擊
三:接下來我們將模擬這幾種XSS攻擊
第一種:反射型XSS攻擊(非永續性XSS攻擊)
反射型XSS攻擊一般是攻擊者通過特定手法,誘使使用者去訪問一個包含惡意程式碼的URL,當受害者點選這些專門設計的連結的時候,惡意程式碼會直接在受害者主機上的瀏覽器執行。此類XSS攻擊通常出現在網站的搜尋欄、使用者登入口等地方,常用來竊取客戶端Cookies或進行釣魚欺騙。
下面我們來看一個例子:
這是一個普通的點選事件,當用戶點選之後,就執行了js指令碼,彈窗了警告。
你會說,這能代表啥,那如果這段指令碼是這樣的呢?
當瀏覽器執行這段指令碼,就盜用了使用者的cookie資訊,傳送到了自己指定的伺服器。你想想他接下來會幹什麼呢?
第二種:儲存型XSS攻擊(持久型XSS攻擊)
攻擊者事先將惡意程式碼上傳或者儲存到漏洞伺服器中,只要受害者瀏覽包含此惡意程式碼的頁面就會執行惡意程式碼。這意味著只要訪問了這個頁面的訪客,都有可能會執行這段惡意指令碼,因此儲存型XSS攻擊的危害會更大。此類攻擊一般出現在網站留言、評論、部落格日誌等互動處,惡意指令碼儲存到客戶端或者服務端的資料庫中。
增刪改查在web管理系統中中很常見,我們找到一個新增功能頁面,這以一個富文字輸入框為例,輸入以下語句,點選儲存,再去檢視詳情,你覺得會發生什麼?
沒錯,如果是前端的同學或許已經猜到了,h是瀏覽器的標籤,這樣傳給伺服器,伺服器再返回給前端,瀏覽器渲染的時候,會把第二行當成h1標籤來渲染,就會出現以下效果,第二行文字被加粗加大了。
這裡我只是輸入了普通的文字,而近幾年隨著網際網路的發展,出現了很多h5多媒體標籤,那要是我利用它們呢? 不清楚的同學,可自行開啟W3cschool網站檢視:
黑客是怎麼攻擊我們的呢?黑客會自己寫一些指令碼,來獲取我們的cookies敏感等資訊,然後他傳送到他自己的伺服器,當他拿到我們這些資訊後,就能繞過前端,直接調後端的介面,比如提現介面,想想是不是很恐怖!!!
這裡我利用一個線上遠端網站來模擬XSS攻擊。地址如下:
http://svg.digi.ninja/xss.svg**
目前網站還能訪問,同學們可以自己體驗一下,如果後期連結失效不可訪問了,同學們可以重新找一個,或者自己手寫一個指令碼,然後偽裝成svg上傳到自己的伺服器。
我們在位址列輸入上面這個地址,來看看實際效果,提示你已經觸發了XSS攻擊。
當我們點選確定,出現了一個黑人,哈哈哈,恭喜你,你銀行卡里的錢已經全被黑客取走了。這就是黑客得逞後的樣子,他得逞後還在嘲諷你。
接下來,我們利用多媒體標籤和這個指令碼來攻擊我們實際的的網站。
這裡記得在地址前面加上//表示跨越,如圖:
當我們點選儲存之後,再去檢視詳情頁面發現。
哦豁,剛剛那個網站的場景在我們的web管理系統裡面觸發了,點選確定,那個小黑人又來嘲諷你了。
這指令碼在我們的管理系統成功執行,並獲取了我們的敏感資訊,就可以直接繞過前端,去直接掉我們後端銀行卡提現介面了。並且這類指令碼由於儲存在伺服器中,並存著一些公共區域,網站留言、評論、部落格日誌等互動處,因此儲存型XSS攻擊的危害會更大。
第三種:DOM-based型XSS攻擊
客戶端的指令碼程式可以動態地檢查和修改頁面內容,而不依賴於伺服器端的資料。例如客戶端如從URL中提取資料並在本地執行,如果使用者在客戶端輸入的資料包含了惡意的JavaScript指令碼,而這些指令碼沒有經過適當的過濾或者消毒,那麼應用程式就可能受到DOM-based型XSS攻擊。
下面我們來看一個例子
這段程式碼的意思是點選提交之後,將輸入框中的內容渲染到頁面。效果如下面兩張圖。
①在輸入框中輸入內容
②點選確定,輸入框中的內容渲染到頁面
那如何我們輸內容是不是普通文字,而是惡意的指令碼呢?
沒錯,惡意的指令碼在渲染到頁面的時候,沒有被當成普通的文字,而是被當成指令碼執行了。
總結:XSS就是利用瀏覽器不能識別是普通的文字還是惡意程式碼,那麼我們要做的就是阻止惡意程式碼執行,比如前端的提交和渲染,後端介面的請求和返回都要對此類特殊標籤做轉義和過濾處理,防止他執行指令碼,洩露敏感的資料。感興趣的同學可以根據我上面的步驟,自己去模擬一個XSS攻擊,讓自己也體驗一次當黑客的感覺。
- 東東吖帶你打通全棧,go-vue-react專案介紹
- 【vue進階之旅】如何自定義元件v-model,封裝屬於自己的元件庫?
- 【vue進階之旅】如何使用keep-alive做元件快取?
- 發生跨域的時候,伺服器到底有沒有接收到請求?
- vue進階之路:vue3.2-setup語法糖、組合式API、狀態庫Pinia歸納總結
- 跨域問題及前後端常見解決方案?
- 微信小程式如何分包?
- 前端效能優化,如何提高首屏載入速度?
- 專案中的配置檔案都是幹嘛的?
- 從0到1學習Node.js系列教程(第一篇):API介面初體驗
- 父子元件的生命週期執行流程是怎麼樣的呢?
- 1024程式設計師這天,我發現了掘金官方的一個bug。
- 元件通訊的8種方式,你搞清楚了嗎?
- 手把手教你利用XSS攻擊體驗一次黑客