freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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安全 # 漏洞分析 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录