iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

XSS是甚麼?

所謂XSS就是跨網站指令碼 Cross-site scripting 的簡稱,屬於指令碼注入的一種。基本上,XSS就是攻擊者在網頁插入惡意指令碼(指令碼可以使JavaScript、Java或甚至任何其他的程式碼),使用戶在瀏覽頁面時執行惡意指令碼,以盜取用戶的各種資訊,例如cookie、session、token等敏感資訊。

XSS的類型

1. 反射型XSS

攻擊者透過在受害者的網頁請求參數paramater之中直接插入惡意指令碼,使受害者的瀏覽器執行指令碼。
可以看一看以下例子
假設有這樣的一個網站,會將paramater中的data的值直接換成HTML插入到網頁中:
XSS 1
可以看到,網址輸入xxx.com?data=test的話,網頁會顯示Data: test

然而,如果攻擊者在data輸入<script>指令碼,出來的結果會是甚麼樣呢?
我們試一試輸入?data=<script>alert()</script>
XSS 2
可以看到,alert()的代碼被執行了。那麼攻擊者只需要在data打上惡意程式碼,然後把連結發給受害者,就能夠在受害者的瀏覽器上執行惡意代碼了。

2. 存儲型XSS

概念和反射性XSS類似,不同的是惡意代碼儲存在伺服器端或資料庫等等,而不是在請求參數等用戶提供的東西。這會使得所有瀏覽該網頁的用戶都會執行惡意代碼。

3. DOM型XSS

這是基於DOM(文件物件模型)的一種XSS。DOM簡單來說就是HTML和XML文檔的編程接口,定義了訪問和操作HTML文檔的標准方法。而在DOM型XSS中,攻擊者利用網頁中的DOM操作,直接修改網頁結構和內容。

CTF中的XSS

在CTF中,如果我們想要測試XSS的可行性,我們可以先在看到可以輸入資料的地方試一下打一些東西
XSS 3
以上的例子中,可以看到,網頁將我們dataparameter的值放到了<input>value之中。我們可以嘗試提早關掉<input>tag,再加上<script>tag,例如:
Imgur
可以看到,我們把data設定成"><script>alert("XSS'ed")</script>
那麼HTML代碼就會變成:

<input type="text" name="data" value=""><script>alert("XSS'ed")</script>"&gt;

而理所當然的,<script>裡面的alert()也被順利執行了。
到這裡,我們就知道這個data可以讓我們進行XSS了。
而在CTF裡面,有一些最簡單的題目甚至會列明只要進行XSS執行某個代碼就可以通關獲得Flag,那麼就能很容易的獲得Flag了。

<script> 之外的XSS

XSS也不一定需要利用到<script>tag -- 有時候我們會被限制了插入<script>tag。這時候,我們可以找找有沒有其他可以讓我們XSS的地方,就例如

假如有一個模擬發文平台,用戶可以輸入HTML的訊息發出去。
這時候,如果<script>被禁止了(例如是,包含<script> tag會被禁止發送),那麼我們可以嘗試利用<img>onerror特性--onerror中的指令碼會在<img>圖片載入失敗時執行。就好像:

<img src="bad_src" onerror="alert()">

由於bad_src不存在,<img>出現錯誤,onerror中的alert()就會被執行。同樣道理,我們能夠把alert()換成其他的指令碼,來達成執行任意指令碼的目標。

大部分可供XSS的Payload(例如上面的<img onerror="">) 可以在GitHub上的payloadbox/xss-payload-list找到


上一篇
Day 05 | [CTF.WEB] SQL注入
下一篇
Day 07 | [CTF.WEB] 任意文件上傳漏洞
系列文
30日奪旗之旅 - 一個月不間斷研究CTF9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言