Windows文件系統漏洞之後續
文件系統漏洞早在安全焦點就被人提出來了,簡單點說就是可以在命令行下通過md來創建x../之類的文件夾,而且可以拷貝文件進去,通過rd來刪除目錄,在那文章中提到可以利用這個漏洞我們可以做很多事情,比如想訪問“S”文件夾,但是沒有權限的時候我們可以創建“S../”來指向“S”這樣就可以跨權限瀏覽。而且新一代的木馬程序很可能利用此漏洞把自身藏在某個“X../”目錄下這樣用戶根本不可能發現他,就算專業級的殺毒軟件也只會去殺“X”而跳過“X../”。(想具體的瞭解其原理,請參考那篇文章)
在這篇文章中主要都是在命令行下創建來實現的,在windows我們平時是無法創建這個文件的,但是站在編程的角度來看?如果用程序的話,是否可以通過api函數來實現呢?下面我們來看看這個函數
BOOL CreateDirectory(
LPCTSTR lpPathName, // 目錄
LPSECURITY_ATTRIBUTES lpSecurityAttributes // 指向一個LPSECURITY_ATTRIBUTES結構。
);
下面我們通過程序來測試一下。下面是用c程序的一個函數
void CreateD()
{ char FilePath[256];
LPSECURITY_ATTRIBUTES Lp;
memset(FilePath, 0, sizeof(FilePath));
strcpy(FilePath, "D://a..//");
CreateDirectory(FilePath,NULL);
}
我們發現可以用api函數CreateDirectory可以創建帶/的目錄,下面我們來看看是否可以通過api函數RemoveDirectory函數來刪除目錄
BOOL RemoveDirectory(
LPCTSTR lpPathName // 要刪除目錄的地址
);
下面寫個c函數看是否可以
void RemoveD()
{char FilePath[256];
memset(FilePath, 0, sizeof(FilePath));
strcpy(FilePath, "D://a..//");
RemoveDirectory(FilePath);
}
經過測試完全可以刪除,也就是說我們可以通過程序來實現創建刪除這種文件夾,當然,加入我們那些目錄裏面沒有文件的話,出現這種情況完全可以刪除,但是如果有文件的話,我們該怎麼辦呢?是否需要把文件全部拷貝出來再刪除,有沒有一種更簡單的方法呢?是否可以用文件名更改的方法呢?
windows有一個SHFileOperation函數,這個函數功能強大,可以對目錄文件的刪除,複製,更名等操作,
這個函數原形如下:
WINSHELLAPI int WINAPI SHFileOperation(
LPSHFILEOPSTRUCT lpFileOp //指定一個LPSHFILEOPSTRUCT結構.
);
下面來測試一下是否可行,
void SHRenameD()
{
char Path[256];
char toPath[256];
SHFILEOPSTRUCT sfo;
memset(&sfo, 0, sizeof(sfo));
memset(Path, 0, sizeof(Path));
memset(toPath,0,sizeof(toPath));
strcpy(Path, "D://a//");
strcpy(toPath,"D://a..//");
sfo.wFunc = FO_RENAME; //帶秒文件更名,
sfo.pFrom =Path;
sfo.pTo =toPath;
sfo.fFlags=FOF_NOCONFIRMATION;//標誌,有很多選擇。
SHFileOperation(&sfo);
}
運行結果顯示這個函數可以把普通的目錄該爲那個帶/的目錄,但是很很遺憾的是反過來卻沒有成功,假如有人惡意修改文件夾爲這種文件夾的話,豈不是豪無防範?
我們再嘗試另一個windows下的RenameFile這個函數,這個函數可以對目錄和文件操作,
void ReFile()
{ char FilePath[256];
char toPath[256];
memset(FilePath, 0, sizeof(FilePath));
memset(toPath,0,sizeof(toPath));
strcpy(FilePath, "D://a..//");
strcpy(toPath,"D://a//");
RenameFile(FilePath, toPath);
}
經過測試發現這個函數可以把帶/的目錄給改回來。
總結:通過這測測試,雖然這個漏洞有可能造成破壞,但並非所說的那麼恐怖。