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);
}
经过测试发现这个函数可以把带\的目录给改回来。
总结:通过这测测试,虽然这个漏洞有可能造成破坏,但并非所说的那么恐怖。