当前位置:首页 > Web开发 > 正文

只能是当前的文件进行越权删除来利用

2024-03-31 Web开发

任意文件上传缝隙影响的版本:

jQuery-File-Upload版本 < v9.22.1 and Apache > 2.3.9(默认不再撑持.htaccess) or others

长途命令执行缝隙:

文件越权删除缝隙

可以看下,下面的代码中$success = is_file($file_path) && $file_name[0] !== ‘.‘ && unlink($file_path);,这里面如果我们的$file_path能够进行控制的话,那么就能够进行越权进行文件的删除了

public function delete($print_response = true) { $file_names = $this->get_file_names_params(); //var_dump($file_names); if (empty($file_names)) { //返回为空,走下面流程 $file_names = array($this->get_file_name_param()); //$file_names 里面存放着$_GET['file']接收的内容 } $response = array(); foreach ($file_names as $file_name) { $file_path = $this->get_upload_path($file_name); //取当前文件的路径 $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path); //判断当前文件是否为文件 // 并且判断文件名是否以 点 开头,例如.htaccess if ($success) { var_dump($this->options['image_versions']); foreach ($this->options['image_versions'] as $version => $options) { if (!empty($version)) { $file = $this->get_upload_path($file_name, $version); if (is_file($file)) { unlink($file); } } } } $response[$file_name] = $success; } return $this->generate_response($response, $print_response); }

payload:curl -X DELETE "?file=文件名

技术图片

很遗憾这里的文件名不能可控,,只能是当前的文件进行越权删除来操作,原因是get_file_names_params函数中挪用的get_file_name_param函数中的$this->basename(stripslashes($this->get_query_param($name))),对输入的文件名进行了过滤操纵,导致路径不成控

protected function get_file_name_param() { $name = $this->get_singular_param_name(); return $this->basename(stripslashes($this->get_query_param($name))); }

PHP:jQuery-File-Upload任意上传/RCE/越权删除文件缝隙分析

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31011.html