当前位置: 首页 > news >正文

某通用系统0day审计过程

前言

代码审计篇章都是自己跟几个师傅们一起审计的1day或者0day(当然都是小公司较为简单),禁止未经允许进行转载,发布到博客的用意主要是想跟师傅们能够交流下审计的思路,毕竟审计的思路也是有说法的,或者是相互源码共享也OK,本次审计的目标是一套也是各大高校使用的通用系统,已经提交相关SRC平台进行修复

路由分析

直接看登录接口

图片

路由为 /setting.php/index/login

找对应源码

图片

第一个接口setting对应Application下的文件

第二个接口Index对应Setting下的Controller文件名字

第三个接口为Controller的方法名字

代码审计

上传

Application\Admin\Controller\UploadController.class.php

在这个路径下继承了一个upload控制器父类

图片

所以调用的接口如下

图片

实例化了一个UploadFile()对象然后给他的属性赋值

重点关注以下代码

$upload->exts = array('jpg', 'gif', 'png', 'jpeg'); // 设置附件上传类型

发现这里会调用UploadFile()的魔术方法 跟进

    public function __set($name,$value){if(isset($this->config[$name])) {$this->config[$name]    =   $value;}}

这里其实就是问题的本身,要是传进来的在config里头不存在则返回空,那么我们去看一下config的设置

    private $config =   array('maxSize'           =>  -1,    // 上传文件的最大值'supportMulti'      =>  true,    // 是否支持多文件上传'allowExts'         =>  array(),    // 允许上传的文件后缀 留空不作后缀检查'allowTypes'        =>  array(),    // 允许上传的文件类型 留空不做检查'thumb'             =>  false,    // 使用对上传图片进行缩略图处理'imageClassPath'    =>  'ORG.Util.Image',    // 图库类包路径'thumbMaxWidth'     =>  '',// 缩略图最大宽度'thumbMaxHeight'    =>  '',// 缩略图最大高度'thumbPrefix'       =>  'thumb_',// 缩略图前缀'thumbSuffix'       =>  '','thumbPath'         =>  '',// 缩略图保存路径'thumbFile'         =>  '',// 缩略图文件名'thumbExt'          =>  '',// 缩略图扩展名    'thumbRemoveOrigin' =>  false,// 是否移除原图'thumbType'         =>  0, // 缩略图生成方式 1 按设置大小截取 0 按原图等比例缩略'zipImages'         =>  false,// 压缩图片文件上传'autoSub'           =>  false,// 启用子目录保存文件'subType'           =>  'hash',// 子目录创建方式 可以使用hash date custom'subDir'            =>  '', // 子目录名称 subType为custom方式后有效'dateFormat'        =>  'Ymd','hashLevel'         =>  1, // hash的目录层次'savePath'          =>  '',// 上传文件保存路径'autoCheck'         =>  true, // 是否自动检查附件'uploadReplace'     =>  false,// 存在同名是否覆盖'saveRule'          =>  'uniqid',// 上传文件命名规则'hashType'          =>  'md5_file',// 上传文件Hash规则函数名);

emmm根本没有 exts 所以说后缀根本没有检测,可以从从调用的upload中查看

断到一个叫自动检查附件

图片

步进一下进入check函数存在检查文件类型

图片

再次跟进一下checkExt发现是一个很强的校验白名单

    private function checkExt($ext) {if(!empty($this->allowExts))return in_array(strtolower($ext),$this->allowExts,true);return true;}

但是重点是他并没有赋值进去

图片

在这进行反向验证,讲前面的属性修改为在config里头的内容

图片

再次进行断点跟到最后面的config的地方发现成功修改

图片

所以这套系统只要存在 $upload->exts = 这个的上传接口 就存在任意文件上传

图片

SQL(绕redis缓存)

直接看前台控制器了

找到这个路由存在sql的问题

图片

在这个代码里头,可以发现 $count 跟 $listJson 是关键

$count的设置是为了不频繁查询,所以这里只要设置随机伪造的PHPSESSID就可以了

$listJson 的设置就尤为关键了 if (!$listJson) 这里的语句是 我的redis去查phone就是要查不到 为null才能执行下面的sql语句,所以phone就是要不存在的手机号才行,所以就直接随机phone就可以了,但是他在后续的代码中把这跟手机号给设置进了redis

图片

所以必须要把这跟phone随机化来绕redis的缓存才能进行正常注入

SSRF

这里全局搜索curl_exec( emm感觉是这里 确实是可控的

\Application\Course\Controller\DocumentController.class.php

图片

从逻辑上来看

$_SERVER['HTTP_AUTHORIZATION'] 跟 $_SERVER['HTTP_X_OSS_PUB_KEY_URL'] 这两个值都得存在 他就不会进行403的跳转 那么这两个都是我们可控的只要在header头加入即可,之后就会将我们传入的base64编码的值进行解码后给到curl进行直接curl执行

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
X-Oss-Pub-Key-Url: aHR0cDovL2RxM2JlMC5kbnNsb2cuY24=

远程测了一下也是完全没问题的

图片

加入后返回两百

图片

最终也是测出了SSRF

图片

更多网络安全优质免费学习资料与干货教程加

送渗透工具、技术文档、书籍,面试题、视频(基础到进阶。环境搭建,HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等)、应急响应笔记、学习路线。

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

http://www.lryc.cn/news/423360.html

相关文章:

  • windows C++-高级并发和异步(一)
  • Java FX 学习
  • 【走迷宫】
  • linux(debian)迁移var数据到已分配逻辑卷的物理盘
  • 【产品那些事】什么是应用程序安全态势管理(ASPM)?
  • cocosUI多分辨率适配
  • 无法加载到主类
  • 深入理解Kafka核心设计与实践原理_03
  • MySQL- 覆盖索引
  • JSON与EXL文件互转
  • 后台管理权限自定义按钮指令v-hasPermi
  • 【Python绘制散点图并添加趋势线和公式以及相关系数和RMSE】
  • linux bridge VLAN
  • Java进阶篇之深入理解多态的概念与应用
  • Linux下的进程调度队列
  • 统计回归与Matlab软件实现上(一元多元线性回归模型)
  • 【项目】基于Vue3.2+ElementUI Plus+Vite 通用后台管理系统
  • 随机生成 UUID
  • 报名表EXCEL图片批量下载源码-CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构
  • SpringBoot 整合 Elasticsearch 实现商品搜索
  • 计算机毕业设计 助农产品采购平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • Django后台数据获取展示
  • innodb 如何保证数据的一致性?
  • Oracle-OracleConnection
  • 基于hadoop的网络流量分析系统的研究与应用
  • 【C# WPF WeChat UI 简单布局】
  • 关于docker的几个概念(二)
  • JAVA集中学习第五周学习记录(一)
  • JavaSE 网络编程
  • ubuntu24.04 编译安装PHP7.4