Skip to content
Suzu
2 min read

【Windows Internal】Mount Point

Reparse Point 的一種

View the complete series →
On this page

【Windows Internal】Mount Point

Mount Point 是 tag 為 IO_REPARSE_TAG_MOUNT_POINT(0xA0000003)的 Reparse Point,

可以把整個目錄搬到指令位置,例如 C:\dummy 設成指向 C:\Windows\System32後,

C:\dummy\osk.exe 就會指向 C:\Windows\System32\osk.exe。

.

最重要的是 只需要對自己的目錄有寫入權(GENERIC_WRITE) 就好,不用管理員權限。

組成&應用

mount point 與 symbolic link 最大的差異,是 PoC 能從一般使用者權限啟動。

目標必須是本機磁碟上的目錄,

且解析在核心層完成(junction 與 volume mount point 都用這個 tag)。

.

與 symbolic link 的差異:

Mount point / JunctionSymbolic link(目錄)
Reparse tagIO_REPARSE_TAG_MOUNT_POINT(0xA0000003)IO_REPARSE_TAG_SYMLINK(0xA000000C)
目標只能是本機目錄/磁碟區檔案或目錄、本機或 UNC 網路路徑皆可
建立時目標須存在是(核心立即解析)否(允許 dangling,解析時才失敗)
建立所需權限對目錄本身有寫入權即可,不需管理員SeCreateSymbolicLinkPrivilege(預設僅管理員;或開啟開發人員模式)
建立工具mklink /jmklink /d
dir 顯示<JUNCTION><SYMLINKD>

也可以特別注意一點:

Mount Point 有可覆寫性,同一個目錄上可以直接寫新的上去,

一次 FSCTL_SET_REPARSE_POINT 就完成了,不用先刪除。

實作例子

以下全程一般使用者權限即可完成(mklinkcmd 內建命令):

mklink /j C:\test-mp C:\Windows\System32
Junction created for C:\test-mp <<===>> C:\Windows\System32

驗證「兩個名字、同一個檔案」——從 junction 路徑存取 System32 的 osk.exe

dir C:\test-mp\osk.exe
 Directory of C:\test-mp

2025/09/10  14:00           1,138,688 osk.exe
               1 File(s)      1,138,688 bytes

確認它的真實身分是 mount point(tag 0xA0000003):

fsutil reparsepoint query C:\test-mp
Reparse Tag Value : 0xa0000003
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Mount Point
Substitute Name:       \??\C:\Windows\System32
Print Name:            C:\Windows\System32

用完記得清掉:

rd C:\test-mp

rd(不帶 /s)只移除 junction 本身,不動目標目錄。

切勿用會遞迴刪除的工具處理 junction,部分工具(像是 rmdir /s 或某些檔案管理操作)會順著 junction 刪到目標目錄的內容

刪了 C:\Windows\System32 你電腦大概也沒了 GG。

Share this page