iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
Security

Agentic Era,一年來 LLM 到底都挖了些什麼洞!系列 第 22 篇

Day 22. JS Engine Pwn 101:從假冒一個物件開始

  • 分享至 

  • xImage
  •  

這篇是一個精華的濃縮,我強烈推薦我的入坑讀物:
https://www.madstacks.dev/posts/V8-Exploitation-Series-Part-1 [1]

今天就來講 JS Engine 的攻擊流程串大概會是怎麼樣!
(拋開 v8 細節不談,因為這次主角也不是它但概念都很通用)

首先,先來介紹 JS 裡面 Array Object 的結構:
分為 map, properties, elements, len 四個段落
elements 和 len 很好懂,一個是一排指標,指向 Array 內的每個元素實際內容,len 則是 Array 長度。
properties 就是這個 Array Object 的信標,map 則是指向一個 Array 當中每項內容要被具體解析成哪種類型的物件/屬性名稱等的 Metadata 表。

今天的攻擊情境是:

  1. 我們能獲得任意物件的地址
  2. 我們可以從任意地址 Fake 一個 Object 出來

主流攻擊流程則是(主要跟 elements 相關而已)
故意建立一個 Array A,我們從 A 的地址 + 一段距離的偏移 的地址 Fake 一個 Array Object 出來(那個地址會故意落在我們可控的別的 Array 的 elements (變數) 內容裡),也就是我們能客製化一個 Array Object 的任意參數。
接下來就好辦啦~我們可以透過竄改 elements 指向的地址去我們想寫入/讀取的地方,再從 Fake 起來的 Array Object 完成任意的資料讀取。

達成任意地址讀寫後,通常會選擇想辦法二次寫入一段 rwx 的記憶體、再透過 wasm 或者 JIT (Just In Time) 優化後的程式碼來執行它。

想練習相關技術也可以上 pwn.college 打打,筆者也寫過一系列 Writeup[2]

References


上一篇
Day 21. Browser 101:一顆瀏覽器到底長怎樣!
系列文
Agentic Era,一年來 LLM 到底都挖了些什麼洞! 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言