
授權(quán)與合規(guī)聲明本文全部操作對象均為自建隔離靶場本機容器或隔離虛擬機涉及安全測試的環(huán)節(jié)必須以取得合法授權(quán)為前提。未經(jīng)授權(quán)的滲透測試違反《中華人民共和國網(wǎng)絡安全法》與《刑法》相關(guān)條款須承擔相應法律責任。本文只講環(huán)境配置、版本對照與靶場隔離不含任何攻擊步驟、利用載荷與繞過手法請勿將文中環(huán)境指向任何非自有系統(tǒng)。一、ls -l之后還有一層沒顯示1.1 權(quán)限位后面那個在 macOS 上隨手對一個文件執(zhí)行l(wèi)s -l輸出長這樣-rw-r--r-- 1 wzk staff 5 Oct 25 06:09 note.txt。權(quán)限位那一段末尾多了一個。同一份文件傳到一臺 Linux 機器上再ls -l不見了剩下的是-rw-r--r-- 1 ...。文件沒壞字節(jié)數(shù)一樣校驗值也一樣。變的只有那個字符。第一次看見它的人常有兩種猜法都不對以為它是權(quán)限的一部分以為它表示文件被鎖。它確實跟權(quán)限位并排顯示但不屬于權(quán)限位——那一段已有專文講過這里只處理跟在它后面的這個字符。的含義很窄就一句這個文件上還掛著擴展屬性。它不告訴你掛了幾條、叫什么、值是什么。想知道得換命令。1.2stat給得出的和它給不出的stat能吐出大小、塊數(shù)、inode 號、鏈接數(shù)、三個時間、屬主屬組、權(quán)限位。這是文件系統(tǒng)為每個文件維護的那一組POSIX 意義上的stat結(jié)構(gòu)。擴展屬性不在這一組里。macOS 的man xattr把兩者的關(guān)系寫得很干脆Extended attributes are arbitrary metadata stored with a file, but separate from the filesystem attributes (such as modification time or file size).這句話里有兩個詞要分開讀。stored with a file它是跟文件綁在一起的文件在它就在不是外面另建的一張表。separate from the filesystem attributes它不屬于stat報的那一組所以你用ls -l、stat、du都看不見它。同一段手冊還交代了值的形態(tài)通常是以空字符結(jié)尾的 UTF-8 字符串也可以是任意二進制。后半句后面會反復用到——打印出來是空白不代表它是空的可能是一段不可打印的字節(jié)長度還在。1.3 一個文件其實有三層信息把這幾件事攤開一個文件身上能讀到的信息至少分三層層記錄在哪用什么看換平臺還認不認內(nèi)容層文件的數(shù)據(jù)塊cat、讀文件、算校驗值認字節(jié)就是字節(jié)文件系統(tǒng)屬性層inode 與目錄項ls -l、stat大體認字段名和精度有差異擴展屬性層文件系統(tǒng)單獨為它留的那塊地方macOSxattr、Linuxgetfattr、Windowsdir /r概念在名字和規(guī)則全不一樣第三列最容易被記混前兩層看哪條命令基本是常識第三層不是。也正因為它不參與ls -l的默認輸出在一次普通的復制里被丟掉時沒有任何提示。本章可以帶走的一句ls -l末尾那個只說明「有」不說明「有什么」擴展屬性跟stat報的那一組是兩套記錄不是一套的補充字段。二、macOSxattr的五個動作和一次本機實測2.1 名字長什么樣macOS 上這一層的命令行入口是xattr。屬性的名字是一串用點分隔的 ASCII 字符實測里見到的兩個是com.apple.provenance和com.example.demo都是反向域名的寫法。這個寫法是習慣本文只描述實測到的名字不推斷命名約束——沒核到能下定論的程度就不寫。值是另一回事。默認按 UTF-8 打印遇到不可打印的字節(jié)就打不出來屏幕上表現(xiàn)為冒號后面空空一片。這不是「屬性沒有值」是「值不是文本」。要確認用十六進制看或者看長度。2.2 五個動作三個修飾man xattr給的是一組選項。按用途歸一下真正算「動作」的是五個動作選項輸出什么列名字不帶選項一行一個屬性名不給值列名字和值-l名字加冒號加值不可打印處留空看單個值-p加屬性名只給那一條的值寫-w加名字和值不輸出成功即返回刪一條-d加屬性名不輸出清全部-c不輸出一條不剩嚴格說表里是六行-l是「列」的變體所以習慣上說五個動作。另有三個修飾選項作用在動作上而不是自成動作-x把值按十六進制顯示用來對付上面那種打不出來的值-r遞歸到目錄里的每一項-s讓命令作用于符號鏈接本身而不是它指向的目標。最后這個容易被忽略——默認情況下你對一個軟鏈接執(zhí)行xattr動的是鏈接指向的那個文件。-d和-c的區(qū)別就一句一個是點名刪一個是全刪。后者會把這個文件上的屬性清空包括系統(tǒng)自己寫的那條。2.3 本機實測兩行屬性一行不是我寫的下面這段是 2026-10-25 在 macOS 上真跑的命令和輸出都原樣貼。printftest\n/tmp/_xa.txt xattr-wcom.example.demohello/tmp/_xa.txt xattr-l/tmp/_xa.txt輸出是兩行不是我寫進去的一條com.apple.provenance: com.example.demo: hello第一行是系統(tǒng)自己加的我只寫了一條。第二行是我寫的那條值就是hello打印得出來。第一行的冒號后面是空的——按 2.1 說的它的值不是可打印文本。再換ls -l的擴展選項看一次ls-l /tmp/_xa.txt xattr /tmp/_xa.txt-rw-r--r-- 1 wzk wheel 5 Oct 25 06:09 /tmp/_xa.txt com.apple.provenance 11 com.example.demo 5 com.apple.provenance com.example.demo這里能讀出兩件事。第一的位置在權(quán)限位之后、鏈接數(shù)之前它是個標記位不是權(quán)限字符。順帶說一句邊界-rw-r--r--那九位怎么解讀本文不涉及那是另一篇文章的事這里只看。第二ls -l在下面列出兩行格式是名字加制表符加長度。com.example.demo是 5跟我寫進去的hello對得上com.apple.provenance是 11說明它確實有值只是打印不出來。xattr不帶選項則只列名字兩行干凈——想知道有沒有用它最快。一個能帶走的觀察新建一個普通文件你一條屬性都不寫它上面也已經(jīng)有一條了——系統(tǒng)會寫自己的東西這部分不在你的控制范圍內(nèi)。所以「有擴展屬性」這件事本身說明不了任何問題得看是哪一條。本章可以帶走的一句只提示存在xattr列名字-l給值長度比內(nèi)容更可靠——值打不出來不等于沒有值。三、Linux名字必須帶前綴ACL 就住在這一層3.1 定義幾乎一樣規(guī)則完全不同Linux 側(cè)的手冊xattr(7)開頭是這么寫的Extended attributes are name:value pairs associated permanently with files and directories, similar to the environment strings associated with a process.跟 macOS 那句對照著看前半段講的是同一件事名字值對跟文件長期綁定。后半段那個比喻值得停一下——像進程的環(huán)境變量。像的是形態(tài)不像的是生命周期進程退出環(huán)境變量就沒了文件還在屬性就還在。這句permanently是理解后面所有限制的前提。真正的差異在名字上。Linux 要求名字寫成全限定形式namespace.attribute前面的命名空間不是裝飾它決定了這條屬性能不能被看見、被誰寫。3.2 四個命名空間命名空間誰在用誰能看見典型名字security內(nèi)核安全模塊如 SELinux、文件能力由那套機制自己決定本文不推斷security.selinuxsystem內(nèi)核自己用如 ACL跟內(nèi)核功能綁定system.posix_acl_accesstrusted給特權(quán)程序留的只有具備CAP_SYS_ADMIN的進程可見trusted.md5sumuser普通屬性用戶自己寫普通用戶user.mime_type最該記住的是第三列。trusted那一行是個硬邊界沒有那個能力你連它存在都看不到。這不是權(quán)限位那種「看得見但改不了」是列表里壓根不出現(xiàn)。所以在某臺機器上看不到一條屬性不能推出「這臺機器上沒有它」——先確認自己是拿什么能力集看的。user那一行也有邊界這類屬性只能加在普通文件和目錄上對某些目錄另有額外限制。后半句在xattr(7)里是單獨一段本文不展開。3.3 兩個上限、整體替換和住在這里的 ACL上限有兩個都是 VFS 層的跟具體文件系統(tǒng)無關(guān)屬性名最長 255 字節(jié)屬性值最長 64 kB。還有第三個列出名字的那個調(diào)用返回的名字列表總共也限 64 kB。三個數(shù)字的實際含義是擴展屬性不是給你存大塊數(shù)據(jù)的地方。64 kB 要裝下所有屬性值名字列表那份還要裝下所有名字屬性一多列名字這個動作本身就會撞上限。讀寫語義是另一條getxattr(2)一次取回整個值setxattr(2)整體替換舊值。沒有「改中間一個字節(jié)」的接口要改一個字符也得把整個值寫回去。這條語義推下去有兩個后果。一是并發(fā)寫不安全兩個進程同時setxattr同一條落盤的是后完成的那次修改不會合并。二是它適合「標記」不適合「狀態(tài)」。ACL 也是這一層里的一條值得單獨說。很多人把 ACL 當成跟擴展屬性并列的另一套東西xattr(7)里有一句把這個誤會直接打消additional security features such as Access Control Lists (ACLs) may be implemented using extended attributes也就是說ACL 是用擴展屬性實現(xiàn)的。落到名字上就是system.posix_acl_access這一條。價值在操作層面「清空擴展屬性」和「清掉 ACL」在某些命令下是同一個動作。你把一個目錄上的屬性全刪掉順手也刪了訪問控制列表屏幕上一句提示都沒有。所以清理前先列一遍名字看清有哪些條、屬于哪個命名空間。所以我建議用-d逐條刪而不是-c一把清干凈前者你至少知道自己刪了什么。??代碼待驗證Linux 側(cè)命令按xattr(7)與 attr 工具手冊寫本機是 macOS未在 Linux 上執(zhí)行g(shù)etfattr-d-m- /tmp/example.txt setfattr-nuser.mime_type-vtext/plain/tmp/example.txt getfattr-nuser.mime_type --only-values /tmp/example.txt第一條把文件上所有可讀的屬性連名字帶值列出來第二條寫一條user.*第三條只取值。跑之前先確認這臺機器上裝了 attr 這套工具——不是所有發(fā)行版都預裝這一點本文不給具體包名。本章可以帶走的一句Linux 的擴展屬性名字必須帶命名空間命名空間決定可見性ACL 就住在system.*里所以「清屬性」和「清 ACL」可能是同一次操作。四、Windows一個文件至少有一個流4.1 默認數(shù)據(jù)流與那個雙冒號Windows 那邊的對應機制不叫擴展屬性叫流。[MS-FSCC] 對 NTFS 的描述第一句就把范圍說清了All files on an NTFS volume consist of at least one stream - the main stream – this is the normal, viewable file in which data is stored.注意at least one一個文件不是「一塊數(shù)據(jù)加若干附加信息」而是「一個或多個流」其中必有一個是主數(shù)據(jù)流——你在資源管理器里雙擊打開的那個。完整的名字是三段式filename:stream name:stream type。主數(shù)據(jù)流沒有名字所以一個sample.txt的主數(shù)據(jù)流全名寫出來是sample.txt::$DATA——中間那段是空的雙冒號就是這么來的。寫法指的是什么默認看得見嗎sample.txt主數(shù)據(jù)流等價于sample.txt::$DATA看得見就是那個文件sample.txt:note:$DATA一條備用數(shù)據(jù)流類型是$DATA不顯示目錄的$I30段類型$INDEX_ALLOCATION目錄自己也有流不顯示第三行容易被漏掉目錄也有流。目錄項的索引本身就以$INDEX_ALLOCATION類型的一條流存在默認流名是$I30。所以「流」不是文件專有的機制它是這個文件系統(tǒng)描述一切東西的方式。4.2 怎么看見/R這個開關(guān)[MS-FSCC] 里寫得很直接These alternate data streams are not normally visible, but can be observed from a command line using the /R option of the DIR command.這句話里兩個詞要分開看not normally visible說的是資源管理器can be observed說的是命令行加一個開關(guān)。??代碼待驗證Windows 側(cè)命令按 [MS-FSCC] 寫未在本機執(zhí)行rem 在 cmd.exe 里對一個目錄執(zhí)行 dir /r輸出里會在文件名之外多出以冒號分隔的那一段具體排版隨版本不同本文不貼樣例也不猜格式。邊界劃在這里本文只講它存在、怎么看見不講怎么用它放東西??匆姾屠檬莾杉潞芏嘀v這一層的文章就是在這一句上滑過去的。4.3 三平臺并排看把前面三章壓成一張表平臺這一層叫什么怎么列出來誰能看見macOS擴展屬性extended attributesxattr列名字xattr -l連值ls -l看與長度屬主可讀寫2.3 實測系統(tǒng)另寫一批Linux擴展屬性名字必須是namespace.attributegetfattr或直接調(diào)listxattr取決于命名空間trusted需CAP_SYS_ADMINWindows NTFS流stream主數(shù)據(jù)流加備用數(shù)據(jù)流dir /r或按文件名:流名:$DATA拼完整名主數(shù)據(jù)流就是文件本身備用流默認不顯示表里沒有明說、但最該記住的一點只有 macOS 會在ls -l里留一個字符提示你有東西。Linux 和 Windows 什么都不提示。所以「看不見」在三個平臺上一個意思不等于沒有只等于「你用的這條命令不看這一層」。本章可以帶走的一句NTFS 里文件是流的集合主數(shù)據(jù)流沒名字、全名帶::$DATA三個平臺都不會在默認輸出里提醒你這一層存在。五、搬家的時候這一層跟不跟著走5.1 結(jié)論只有一句默認不搬這一段最容易被說過頭。能確定的只有這一層打包、復制這類動作默認不會把擴展屬性帶過去要帶就得顯式打開某個開關(guān)。至于每個工具默認開不開、開關(guān)叫什么、開了之后跨文件系統(tǒng)還成不成立各工具不一樣本文不下結(jié)論也不給參數(shù)寫法。原因可以從定義推出來不需要查任何一個工具這一層是stored with a file但separate from the filesystem attributes2.1 引的那句。一個「復制文件」的動作常規(guī)做法是讀數(shù)據(jù)、寫數(shù)據(jù)、再按需要補幾個stat字段。屬性那一層不在數(shù)據(jù)里也不在stat那一組里所以它天然落在復制的默認路徑之外。5.2 四種搬家場景要確認的東西不一樣場景這一層跟不跟著走需要確認什么同一塊盤上改名或移動位置變了沒有寫出新文件仍建議前后各列一次別假設跨盤、跨文件系統(tǒng)復制新文件被寫出來屬性不自動跟工具是否提供開關(guān)開關(guān)在手冊哪一節(jié)打包再解開中間產(chǎn)物是歸檔屬性要單獨帶打包與解包兩端都得支持缺一端就丟跨操作系統(tǒng)傳遞目標平臺未必有同名概念名字空間規(guī)則不同開關(guān)打開也可能無處落腳最后一行最麻煩。macOS 是扁平的點分名字Linux 要求namespace.attribute全限定NTFS 那邊是流、名字里帶冒號。三種模型之間沒有共同的表示所以跨平臺搬這一層問題不在「能不能復制」在「目標那邊有沒有這個概念可以接收」。?? 這一段按待驗證處理各工具的具體默認值本文不給只保留「默認不搬、需要顯式開關(guān)」這一層。要寫進自己的操作手冊得拿目標版本的工具親手試一遍。5.3 為什么它丟得悄無聲息因為它丟的時候所有你能想到的檢查都是通過的。文件大小一樣——屬性不在文件大小里。修改時間一樣——那是stat那一組跟這一層不相干。校驗值一樣——屬性不在數(shù)據(jù)塊里校驗算的是內(nèi)容。打開也正?!x內(nèi)容的程序根本不看這一層。唯一的檢查方式是列屬性不是比內(nèi)容。搬完之后用目標平臺那條命令列一次名字跟搬之前那份對一遍名字少了就是少了名字在而值變了得單獨看。??代碼待驗證流程示意本機未對真實跨機復制執(zhí)行printf%s\n第 1 步源端列一次屬性名字存成清單printf%s\n第 2 步執(zhí)行復制記錄用了哪些開關(guān)printf%s\n第 3 步目標端再列一次屬性名字存成清單printf%s\n第 4 步兩份清單對比只比名字先不比值printf%s\n第 5 步名字缺失的回到第 2 步看開關(guān)不要先懷疑文件損壞第 5 步是我最想強調(diào)的屬性缺失和文件損壞是兩件不同的事表現(xiàn)卻很像。先懷疑開關(guān)比先懷疑磁盤劃算。完整版對照資料這一章對照的三平臺「怎么列屬性、搬家前后怎么比對」的操作卡我整理成了一頁跟靶場環(huán)境對照表放在同一個資料包里掃碼即可獲取本章可以帶走的一句復制工具復制的是文件不是文件在原來那臺機器上的全部狀態(tài)屬性丟沒丟只能靠搬家前后各列一次名字來判。六、安全上為什么在意6.1 有些判定讀的是這一層不是內(nèi)容把前面幾章散落的點收一下會發(fā)現(xiàn)這一層里裝的并不都是「備注」訪問控制列表在system.posix_acl_access3.3 那句原文。SELinux 的標簽在security.selinux3.2 的表。文件能力也掛在security命名空間下同一處。Windows 上「文件來源」這類信息是按流記錄的[MS-FSCC] 的流模型具體流名本文不展開。這些信息的共同點是做訪問判斷時系統(tǒng)讀的是它們不是內(nèi)容。判斷發(fā)生在你讀到文件之前——能不能訪問、以什么身份執(zhí)行、這個文件從哪來。第五章的結(jié)論到這里就變得更要緊了屬性默認不跟著走意味著這些判定在新機器上讀到的是「沒有」。而「沒有標簽」和「標簽是對的」是兩種狀態(tài)前者通常落到那套機制的默認處理上后者才是你在原來那臺機器上驗證過的。默認處理具體是什么取決于那套機制自己的策略本文不給結(jié)論——不同策略答案不一樣寫個通用答案就是在編。6.2 兩個方向丟了和被帶過來方向一該在的不在了。一臺機器上配好的訪問控制、安全標簽經(jīng)過一次打包和一次解包落到新機器上。文件能用但那些判定讀到的是空的。這種降級不報錯也不會有人察覺——除非有人專門去列一次屬性。方向二不該在的來了。反過來一個從別處來的文件屬性如果被完整帶過來了記錄的就是它原來那臺機器上的狀態(tài)。1.3 那張表里我把它叫第三層現(xiàn)在可以補一句這一層記錄的是過程不是內(nèi)容。最典型的是系統(tǒng)自己寫的那條。2.3 里新建一個空文件com.apple.provenance就已經(jīng)在了我什么都沒做。它的名字指向「來源」但具體含義本文不推斷——沒人為它給出語義我也不替它編。能確定的只有兩點它由系統(tǒng)寫入它的值不是給人讀的文本。這就夠支撐一條建議看到com.apple.*開頭的屬性先假設它不該被你手動刪。6.3 名字本身就是線索判斷一條屬性該不該動第一眼看的不是值是名字。前綴基本就交代了它是誰寫的com.apple.*系統(tǒng)寫的2.3 實測。刪了文件內(nèi)容不變但那條記錄就沒了。system.*內(nèi)核用ACL 就在這一類里。刪它等于改訪問控制不是清理垃圾。security.*內(nèi)核安全模塊用。刪了可能讓判定落到默認策略上后果由那套策略決定。trusted.*特權(quán)側(cè)普通身份連看都看不到別把它算進「沒有」。user.*普通用戶這一類才是可以隨手清的。只有最后一行讓人放心。前四行都屬于「不是你的東西」其中system.*和security.*尤其——看上去像備注實際是判定輸入。這也回到了 2.2 提到的那個差別-d點名刪-c全刪。如果你連這些名字是誰寫的都還沒分清就不該用全刪。本章可以帶走的一句安全判定讀的是這一層而「屬性不在」不等于「屬性和原來一樣」動它之前先看名字前綴com.apple.*、system.*、security.*都不是清理對象。七、三分平臺自查清單7.1 macOS三條命令按順序來ls -l看末尾有沒有。有才值得往下走。xattr 文件名列名字。這一步回答「有幾條、叫什么」。xattr -l 文件名連值一起看。值打不出來的回ls -l看長度或加-x看十六進制。順序不能反先看值容易陷進「這一串是什么」而多數(shù)時候你只需要知道有幾條。三個判讀要點只表示存在冒號后空白不代表沒有值-s不寫動的是鏈接指向的目標而不是鏈接本身。7.2 Linux 與 Windows各一條Linux 側(cè)用getfattr -d -m - 文件名把可讀的都列出來重點看名字前綴落在哪個命名空間??床坏侥硹l先確認自己的能力集——trusted.*在沒有CAP_SYS_ADMIN時列表里就是不出現(xiàn)。Windows 側(cè)在 cmd 里dir /r看文件名后面有沒有多出一段以冒號分隔的名字。有就是備用數(shù)據(jù)流沒有也不代表這個文件「干凈」只代表這一層沒有額外的流。兩邊共同的注意點這兩個命令的輸出格式在不同版本上不完全一樣別把某一次的排版當成標準答案。7.3 三條判讀紀律第一看不見不等于沒有。三個平臺默認都不提醒你這一層。macOS 好歹留了個Linux 和 Windows 連這個都沒有。第二讀不出來不等于空的。屬性值可以是任意二進制打印成空白是正?,F(xiàn)象長度才是它存在的證據(jù)。第三復制完內(nèi)容一致不等于這一層一致。大小、時間、校驗值全對屬性可能一條沒跟過來。要確認只能列名單對比。這三條其實是一句話的三個面這一層的存在感和它的重要性成反比。越是不顯示的東西越容易在搬家時被丟掉而丟掉之后又越難發(fā)現(xiàn)。本章可以帶走的一句先確認有沒有看標記、列名字再確認是什么看值、看長度最后才談搬不搬得走——順序?qū)α诉@一層就不神秘。完整版對照資料第七章這份三平臺自查清單macOS 三條、Linux 與 Windows 各一條、三條判讀紀律和第五章的搬家對照是同一套材料的兩面我都收在資料包里了掃碼即可獲取附表 A本文引用事實與官方出處對照表序號事實出處核驗日期本文位置1擴展屬性是隨文件存儲、但與文件系統(tǒng)屬性修改時間、文件大小等分離的任意元數(shù)據(jù)macOSman xattrXA-022026-10-25第一章 1.22屬性值通常是以空字符結(jié)尾的 UTF-8 字符串也可以是任意二進制macOSman xattrXA-022026-10-25第一章 1.2、第七章 7.33本機實測用xattr -w把 hello 寫進com.example.demo后xattr -l輸出com.apple.provenance:與com.example.demo: hello兩行本機命令輸出XA-012026-10-25第二章 2.34本機實測新建文件會自動帶com.apple.provenance由系統(tǒng)寫入本機命令輸出XA-012026-10-25第二章 2.3、第六章 6.25本機實測ls -l在權(quán)限位后顯示下方按名字與值長度列出兩條11 與 5本機命令輸出XA-012026-10-25第二章 2.36各動作對應的選項不帶選項列名字、-l連名字帶值、-p打印單值、-w寫、-d刪單條、-c清全部macOSman xattrXA-032026-10-25第二章 2.2、第六章 6.37三個修飾-x十六進制、-r遞歸、-s作用于符號鏈接本身macOSman xattrXA-032026-10-25第二章 2.2、第七章 7.18「Extended attributes are name:value pairs associated permanently with files and directories, similar to the environment strings associated with a process.」xattr(7)XA-042026-10-25第三章 3.19四個命名空間security、system、trusted、user的用途名字一律寫成namespace.attributexattr(7)XA-052026-10-25第三章 3.210trusted命名空間只有具備CAP_SYS_ADMIN的進程可見xattr(7)XA-052026-10-25第三章 3.2、第七章 7.211user.*只允許加在普通文件和目錄上對某些目錄另有額外限制xattr(7)XA-062026-10-25第三章 3.212屬性名最長 255 字節(jié)、屬性值最長 64 kB、名字列表也限 64 kBxattr(7)XA-072026-10-25第三章 3.313「additional security features such as Access Control Lists (ACLs) may be implemented using extended attributes」xattr(7)XA-082026-10-25第三章 3.3、第六章 6.114getxattr(2)一次取回整個值setxattr(2)整體替換舊值xattr(7)XA-092026-10-25第三章 3.315「All files on an NTFS volume consist of at least one stream - the main stream…」[MS-FSCC] 5.1XA-102026-10-25第四章 4.116流全名形如filename:stream name:stream type主數(shù)據(jù)流無名字sample.txt的默認流全名是sample.txt::$DATA[MS-FSCC] 5.1XA-102026-10-25第四章 4.117「These alternate data streams are not normally visible, but can be observed from a command line using the /R option of the DIR command.」[MS-FSCC] 5.1XA-112026-10-25第四章 4.218目錄也有流類型$INDEX_ALLOCATION默認流名$I30[MS-FSCC] 5.1XA-112026-10-25第四章 4.119Windows 上「文件來源」這類信息按備用數(shù)據(jù)流記錄本文不展開流名與取值[MS-FSCC]XA-122026-10-25第六章 6.120待驗證打包與復制工具是否搬運擴展屬性各工具默認值不同本文只寫「默認不搬、需要顯式開關(guān)」不給參數(shù)寫法本批事實文件XA-132026-10-25第五章 5.1、5.221本文范圍只用 ADS 說明「它存在、怎么看見」不寫任何用它放置數(shù)據(jù)的手法本批紀律XA-142026-10-25第四章 4.222本文范圍不涉及權(quán)限位的rwx、特殊位與目錄的那套規(guī)則僅在 2.3 作一句邊界說明本批紀律XA-152026-10-25第二章 2.3附表 B術(shù)語速查表術(shù)語一句話解釋擴展屬性跟文件綁在一起、但不在stat那一組里的名字值對值可以是文本也可以是二進制標記macOSls -l在權(quán)限位后面加的提示只表示「有擴展屬性」不表示內(nèi)容xattrmacOS 上操作這一層的命令行入口列名字、看值、寫、刪、清都靠它的選項命名空間Linux 名字的前綴user/system/trusted/security決定可見性與用途CAP_SYS_ADMINLinux 的一個特權(quán)能力沒有它trusted.*屬性在列表里根本不出現(xiàn)ACL訪問控制列表在 Linux 上就是用擴展屬性實現(xiàn)的system.posix_acl_access主數(shù)據(jù)流NTFS 里那個「沒有名字」的流就是你在資源管理器里看到的文件本身全名以::$DATA收尾備用數(shù)據(jù)流NTFS 里主數(shù)據(jù)流之外的那些流默認不顯示跨平臺復制時也沒有對應物$I30目錄自身那條流的默認名字類型是$INDEX_ALLOCATION整體替換setxattr的語義一次寫完整個值沒有「改一半」的接口寫在最后這篇用到的資料寫這篇文章時我把三個平臺的這一層并排攤在一張紙上最費勁的是接受「它們壓根不是同一個東西」——只在三個平臺上都靠ls -l那點信息就永遠對不上順手也整理了幾份配套的東西靶場環(huán)境對照表DVWA、upload-labs 在 Windows / macOS / Linux 三平臺的可行性與推薦路徑Web 安全學習路線圖從基礎打牢到安全管理四個階段各學什么常用靶場清單每個靶場練什么、適合哪個階段資料是我自己整理的放在下面這個碼上掃碼即可獲取添加時備注「靶場」優(yōu)先通過。拿到之后建議先看環(huán)境對照表那一份先把手上這臺機器的「看不見的那一層」列一遍再談環(huán)境怎么搭。