Windows文件系统漏洞之后续

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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);

}

经过测试发现这个函数可以把带\的目录给改回来。

总结:通过这测测试,虽然这个漏洞有可能造成破坏,但并非所说的那么恐怖。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航