手把手教你利用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攻擊。地址如下:
https://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攻擊體驗一次黑客