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


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值