某终端防护产品代码审计

  • A+
所属分类:代码审计

某终端防护产品代码审计

某终端防护产品代码审计

 

 

https://www.yuque.com/docs/share/c5f1caf1-3522-47a8-b3c1-7be37f9b429f?#(密码:hslz) 《某终端防护产品代码审计

某终端防护产品代码审计

某个终端防护管理的源码,历史漏洞中有一个漏洞存在于文件 /Console/htmltopdf/downfile.php 中

<?php	
			$filename= $_GET["filename"];
            
			$filename=iconv("UTF-8","GBK//IGNORE", $filename);

   			header("Cache-Control: public"); 
			header("Content-Description: File Transfer"); 
			header('Content-disposition: attachment; filename='.$filename); //文件名   
			header("Content-Type: application/zip"); //zip格式的   
			header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件    
			header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小   
			@readfile($filename);
			?>

下载新版本发现了这个漏洞被修复了,而且添加了鉴权

某终端防护产品代码审计

$filename = $_GET["filename"];

$allow_ext = ['pdf', "csv"];
$ext = getFileExt($filename);

if (!in_array($ext, $allow_ext)) {
    echo "visit error  type:" . $ext;
    return;
}

if(stripos($filename, "..") !== false) {
    echo "only allow visit current dir";
    return ;
}


$filename = iconv("UTF-8", "GBK//IGNORE", $filename);

header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=' . $filename); //文件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
header('Content-Length: ' . filesize($filename)); //告诉浏览器,文件大小
@readfile($filename);

那也就是说没有办法文件读取了,重新审计一下获得的源码
通过 vscode 查找相关的关键字

某终端防护产品代码审计

发现其中的 filepath 参数可控,但不能出现 .. 关键字

<?php  
  if(stripos($_POST['filepath'],"..") !== false) {
    echo 'no file founggd';
    exit();
  }
  ini_set("open_basedir", "../");
  $file_path = '../'.iconv("utf-8","gb2312",$_POST['filepath']);
  if(!file_exists($file_path)){
    echo 'no file founggd';
    exit();
  }  

  $fp=fopen($file_path,"r");  
  $file_size=filesize($file_path); 

  $buffer=5024;  
  $file_count=0;  

  while(!feof($fp) && $file_count<$file_size){  
    $file_con=fread($fp,$buffer);  
    $file_count+=$buffer;  
    echo $file_con;  
  }  
  fclose($fp);  
?>

也就是说我们只能读取 /Console 文件夹下的文件了 (Web目录)

构造请求

POST /receive_file/get_file_content.php

filepath=receive_file/get_file_content.php

某终端防护产品代码审计

某终端防护产品代码审计

某终端防护产品代码审计

 

 

知识星球

加入知识星球,查看多个知识库~

某终端防护产品代码审计

某终端防护产品代码审计

某终端防护产品代码审计

最后

下面就是文库的公众号啦,更新的文章都会在第一时间推送在交流群和公众号

想要加入交流群的师傅公众号点击交流群加我拉你啦~

别忘了Github下载完给个小星星⭐

 

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

PeiQi文库 拥有对此文章的修改和解释权如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

 

 

本文始发于微信公众号(PeiQi文库):5p+Q57uI56uv6Ziy5oqk5Lqn5ZOB5Luj56CB5a6h6K6h

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: