烏雲裡有很多這樣的案例,當然在開發過程中也會存在這樣的問題
搜尋:可信任路徑漏洞
調用案例中的描述:
Microsoft Windows API使用CreateProcess()函數建立新的程序及其主線程。
CreateProcess()函數的格式如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
lpApplicationName變量包含有将要執行子產品的名稱,但可能是空值。在這種情況下,所執行的子產品名稱将會是lpCommandLine字元串中的第一個空白劃定符。
如果lpApplicationName中包含有空值,lpCommandLine變量中的完整子產品路徑包含有空白且沒有包含在引号中的話,就可能執行其他程式,如下所示:
CreateProcess(
NULL,
c:\program files\sub dir\program.exe,
...
在這種情況下,系統在解釋檔案路徑時會擴充字元串,直到遇到執行子產品。上面例子中的字元串可能被解釋為:
c:\program.exe files\sub dir\program name
c:\program files\sub.exe dir\program name
c:\program files\sub dir\program.exe
是以,如果c:\目錄中存在名為program.exe的檔案的話,就可能執行該檔案而不是預期的應用程式。
修複建議:
對傳入給CreateProcess函數的名稱和參數用雙引号””進行包含
官方參考資料:
https://msdn.microsoft.com/zh-cn/library/ms682425.aspx
【版權所有@Sevck 部落格位址http://www.cnblogs.com/sevck】 可以轉載,注明出處.