手把手教你利用XSS攻擊體驗一次黑客

語言: CN / TW / HK

本文已參與「掘力星計劃」,贏取創作大禮包,挑戰創作激勵。

前言:大家好,我是東東吖。前兩天我收到安全部門的一個通知:高風險XSS攻擊漏洞。

906501ADEAF08AD26A3F225744EA44BB.jpg

我們部門首先確定風險來源,並給出瞭解決方案。前端部分由我解決,並緊急修復上線。

5C92478016448CBE2BB5650DAEB40955.jpg

一:那麼什麼是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或進行釣魚欺騙。

下面我們來看一個例子:

image.png

這是一個普通的點擊事件,當用户點擊之後,就執行了js腳本,彈窗了警告。

image.png

你會説,這能代表啥,那如果這段腳本是這樣的呢?

image.png

當瀏覽器執行這段腳本,就盜用了用户的cookie信息,發送到了自己指定的服務器。你想想他接下來會幹什麼呢?

第二種:存儲型XSS攻擊(持久型XSS攻擊)

攻擊者事先將惡意代碼上傳或者儲存到漏洞服務器中,只要受害者瀏覽包含此惡意代碼的頁面就會執行惡意代碼。這意味着只要訪問了這個頁面的訪客,都有可能會執行這段惡意腳本,因此存儲型XSS攻擊的危害會更大。此類攻擊一般出現在網站留言、評論、博客日誌等交互處,惡意腳本存儲到客户端或者服務端的數據庫中。

增刪改查在web管理系統中中很常見,我們找到一個新增功能頁面,這以一個富文本輸入框為例,輸入以下語句,點擊保存,再去查看詳情,你覺得會發生什麼?

image.png

沒錯,如果是前端的同學或許已經猜到了,h是瀏覽器的標籤,這樣傳給服務器,服務器再返回給前端,瀏覽器渲染的時候,會把第二行當成h1標籤來渲染,就會出現以下效果,第二行文字被加粗加大了。

image.png

這裏我只是輸入了普通的文本,而近幾年隨着互聯網的發展,出現了很多h5多媒體標籤,那要是我利用它們呢? 不清楚的同學,可自行打開W3cschool網站查看:

image.png

黑客是怎麼攻擊我們的呢?黑客會自己寫一些腳本,來獲取我們的cookies敏感等信息,然後他發送到他自己的服務器,當他拿到我們這些信息後,就能繞過前端,直接調後端的接口,比如提現接口,想想是不是很恐怖!!!

image.png

這裏我利用一個在線遠程網站來模擬XSS攻擊。地址如下: http://svg.digi.ninja/xss.svg** 目前網站還能訪問,同學們可以自己體驗一下,如果後期鏈接失效不可訪問了,同學們可以重新找一個,或者自己手寫一個腳本,然後偽裝成svg上傳到自己的服務器。 我們在地址欄輸入上面這個地址,來看看實際效果,提示你已經觸發了XSS攻擊。 image.png

當我們點擊確定,出現了一個黑人,哈哈哈,恭喜你,你銀行卡里的錢已經全被黑客取走了。這就是黑客得逞後的樣子,他得逞後還在嘲諷你。

image.png

接下來,我們利用多媒體標籤和這個腳本來攻擊我們實際的的網站。

這裏記得在地址前面加上//表示跨越,如圖:

image.png 當我們點擊保存之後,再去查看詳情頁面發現。

image.png

哦豁,剛剛那個網站的場景在我們的web管理系統裏面觸發了,點擊確定,那個小黑人又來嘲諷你了。

image.png

這腳本在我們的管理系統成功運行,並獲取了我們的敏感信息,就可以直接繞過前端,去直接掉我們後端銀行卡提現接口了。並且這類腳本由於保存在服務器中,並存着一些公共區域,網站留言、評論、博客日誌等交互處,因此存儲型XSS攻擊的危害會更大。

第三種:DOM-based型XSS攻擊

客户端的腳本程序可以動態地檢查和修改頁面內容,而不依賴於服務器端的數據。例如客户端如從URL中提取數據並在本地執行,如果用户在客户端輸入的數據包含了惡意的JavaScript腳本,而這些腳本沒有經過適當的過濾或者消毒,那麼應用程序就可能受到DOM-based型XSS攻擊。

下面我們來看一個例子

image.png

這段代碼的意思是點擊提交之後,將輸入框中的內容渲染到頁面。效果如下面兩張圖。

①在輸入框中輸入內容

image.png

②點擊確定,輸入框中的內容渲染到頁面

image.png

那如何我們輸內容是不是普通文本,而是惡意的腳本呢?

image.png

沒錯,惡意的腳本在渲染到頁面的時候,沒有被當成普通的文本,而是被當成腳本執行了。 image.png

總結:XSS就是利用瀏覽器不能識別是普通的文本還是惡意代碼,那麼我們要做的就是阻止惡意代碼執行,比如前端的提交和渲染,後端接口的請求和返回都要對此類特殊標籤做轉義和過濾處理,防止他執行腳本,泄露敏感的數據。感興趣的同學可以根據我上面的步驟,自己去模擬一個XSS攻擊,讓自己也體驗一次當黑客的感覺。