Windows文件系統漏洞之後續

                                              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);
   }
經過測試發現這個函數可以把帶/的目錄給改回來。
  總結:通過這測測試,雖然這個漏洞有可能造成破壞,但並非所說的那麼恐怖。


 

發佈了24 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章