返回介绍

8.8 Windows FindFirstFile 利用

发布于 2024-10-11 22:07:46 字数 1222 浏览 0 评论 0 收藏 0

目前大多数程序都会对上传的文件名加入时间戳等字符再进行 MD5,然后下载文件的时候通过保存在数据库里的文件 ID 读取出文件路径,一样也实现了文件下载,这样我们就无法直接得到我们上传的 webshell 文件路径,但是当在 Windows 下时,我们只需要知道文件所在目录,然后利用 Windows 的特性就可以访问到文件,这是因为 Windows 在搜索文件的时候使用到了 FindFirstFile 这一个 winapi 函数,该函数到一个文件夹(包括子文件夹)去搜索指定文件。

利用方法很简单,我们只要将文件名不可知部分之后的字符用“<”或者“>”代替即可,不过要注意的一点是,只使用一个“<”或者“>”则只能代表一个字符,如果文件名是 12345 或者更长,这时候请求“1<”或者“1>”都是访问不到文件的,需要“1<<”才能访问到,代表继续往下搜索,有点像 Windows 的短文件名,这样我们还可以通过这个方式来爆破目录文件了。我们来做个简单的测试,测试代码如下:

//1.php

<?php

include ( $_GET['file'] );

再在同目录下新建一个文件名为“123456.txt”的文件,内容为 phpinfo() 函数,请求/1.php?file=1<<即可包含,效果如图 8-12 所示。

图 8-12

通过上面的截图我们可以看到成功包含了 123456.txt 文件。

这里我们要想,什么情况下才能利用这个特性?目前所有 PHP 版本都可用,PHP 并没有在语言层面禁止使用>、<这些特殊字符,在函数层面来讲,这个特性并不是只有 include()、require() 这些文件包含函数或者 file_get_contents() 这类文件读取函数才可用,事实上还有很多个函数也一样是可用这个特性的,参见表 8-2。

表 8-2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文