上QQ阅读APP看书,第一时间看更新
5.2 Windows系统特性
1.短文件名
Windows以8.3格式生成了与MS-DOS兼容的“短”文件名,以允许基于MS-DOS或16位Windows的程序访问这些文件。在cmd下输入“dir/x”即可看到短文件名的效果。
而在IIS 6环境下,安全研究人员Soroush Dalili发现了一些规则,并利用这些信息枚举到目录下的文件或子目录的前5个字符。具体使用方法的源码可以参考lijiejie的IIS短文件名扫描工具:https://github.com/lijiejie/IIS_shortname_Scanner。
在Windows下的Apache环境里,我们除了能爆破服务器文件,还能通过短文件直接下载长文件。
“discuz的备份文件泄露”就是利用了Windows的短文件名去猜解,这极大地减少了枚举量。
2.文件上传
另一个与文件系统交互相关的功能就是,上传的时候如果以黑名单的形式限制后缀,那么我们可以利用文件系统的特性去绕过。比如以下代码:
<form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" name="submit" value="submit"> </form> <?php error_reporting(1); if(isset($_POST['submit'])) { $name = $_FILES['file']['name']; $tempfile = $_FILES['file']['tmp_name']; $savefile = "./upload/".$name; if(isset(pathinfo($name)['extension']) && pathinfo($name)['extension']!='php'){ if(move_uploaded_file($tempfile,$savefile)){ die('Success upload path : '.$savefile); }else{ die('Upload failed..'); } } } ?>
在这段代码中,我们不能上传后缀名为php的文件,但是如果我们在上传的时候在php的后面追加高位字符[\x80-\xff],这样就可以绕过黑名单的判断而上传成功,上传的文件后缀会去掉[\x80-\xff]。与高位字符具有同样效果的还有“::$data”,后者是利用“:$DATA Alternate Data Stream”,详细建议请参考OWASP。
Windows下还有一个特殊的符号是冒号,如果我们上传的时候将后缀改为“.php:.png”形式,那么在系统中最后得到的将是0字节的php后缀文件,也就是说起到了截断的效果,但是没能成功写入内容。