freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

渗透测试 | 黑白盒某学习刷课漏洞挖掘经验分享
2024-07-19 17:06:09

前言

在日常的任务环境中,漏洞的存在对任何系统而言都是巨大的风险隐患。特别是一些比较古老的系统或者存在已知漏洞框架、组件这方面的系统渗透测试,在日常挖掘中,未授权文件下载和越权文件上传,我们应该不在陌生,此类漏洞可定级一中、一高风险。在本次测试中,通过对多个功能模块的代码审计,发现了一些严重的安全问题。

  • 未授权文件下载

未授权文件下载是一个常见的安全漏洞,通常由于文件路径和文件名生成不安全,且缺乏适当的权限验证。在代码审计过程中,我们发现多个功能模块(如试题下载、代金券导出和成绩导出)存在文件生成路径和名称直接暴露在Web目录下,且文件下载链接可以通过简单的URL猜测或爆破方式获取。这使得攻击者可以轻松地下载敏感数据文件,从而导致数据泄露。

  • 越权文件上传

越权文件上传漏洞同样是一个严重的安全问题,特别是在没有进行严格的文件类型和权限校验的情况下。代码审计显示,文件上传功能中缺乏对文件类型的严格验证和用户权限的检查,攻击者可以利用该漏洞上传恶意文件,甚至可能获得服务器的控制权。这种漏洞的存在不仅会导致数据泄露,还可能导致系统被攻击者利用,从而威胁到整个系统的安全。

文件未授权下载

一、试题下载

>app\exam\controller\basic.master.php

}

      $questions = $this->exam->getQuestionListByArgs($args);

      $fname = 'data/score/'.$this->ev->get('subjectid').'-'.$this->ev->get('sectionid').'-'.$this->ev->get('knowsid').'-questions.csv';

      $r = array();

      foreach($questions as $p)

      {

          $r[] = array('questiontype' => $p['questiontype'],'question' => iconv("UTF-8","GBK",html_entity_decode($p['question'])),'questionselect' => iconv("UTF-8","GBK",html_entity_decode($p['questionselect'])),'questionselectnumber' => iconv("UTF-8","GBK",$p['questionselectnumber']),'questionanswer' => iconv("UTF-8","GBK",html_entity_decode($p['questionanswer'])),'questiondescribe' => iconv("UTF-8","GBK",html_entity_decode($p['questiondescribe'])),'knowsid' => $p['qkknowsid'],'questionlevel' => $p['questionlevel']);

      }

      if($this->files->outCsv($fname,$r))

      $message = array(

          'statusCode' => 200,

          "message" => "试题导出成功,转入下载页面,如果浏览器没有相应,请<a href=\"{$fname}\">点此下载</a>",

          "callbackType" => 'forward',

          "forwardUrl" => "{$fname}"

      );

      else

      $message = array(

          'statusCode' => 300,

          "message" => "试题导出失败"

      );

      $this->G->R($message);

  }

这个洞是随便点的功能,没记住是哪个功能点了,直接在代码上整吧!先看上面代码块是一个生成文件路径和文件名称的代码,这里通过$this->ev->get()方法从外部输入获取subjectidsectionidknowsid,并用这些参数构建了文件路径和名称。

$fname = 'data/score/'.$this->ev->get('subjectid').'-'.$this->ev->get('sectionid').'-'.$this->ev->get('knowsid').'-questions.csv';

data/score/ 为生成的Web目录路径为用户提供下载,这个是将全部的考试试题,进行导出的动作,并不是部分。

1721019764_6694ad7403f6dbf7e90c2.png!small?1721019764378

然后就是文件生成,使用$this->files->outCsv方法将题目列表数据写入到$fname指定的CSV文件中。

if($this->files->outCsv($fname,$r))

文件下载链接在文件生成成功后,系统返回一个包含文件下载链接的消息。这里的$fname变量直接插入到了链接中。

$message = array(
    'statusCode' => 200,
    "message" => "试题导出成功,转入下载页面,如果浏览器没有相应,请<a href=\"{$fname}\">点此下载</a>",
    "callbackType" => 'forward',
    "forwardUrl" => "{$fname}"
);

POC地址是这样的,直接在/data/score上挂载生成的文件内容,之后就是通过文件名下载。

http://XXX.XXX.XX.XX/dat
# 漏洞 # 渗透测试 # web安全 # 漏洞分析 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录