当前位置: 首页 > 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,暴力破解等等)、应急响应笔记、学习路线。

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

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

相关文章:

某通用系统0day审计过程

前言 代码审计篇章都是自己跟几个师傅们一起审计的1day或者0day(当然都是小公司较为简单),禁止未经允许进行转载,发布到博客的用意主要是想跟师傅们能够交流下审计的思路,毕竟审计的思路也是有说法的,或者是相互源码共享也OK&…...

windows C++-高级并发和异步(一)

并发和异步的由来已经很久了,对于从xp开始编程的人来说,这个概念并不陌生,但问题在于,在早期,这两个技术被认为是操作系统提供的服务,而非编程语言的概念。 事情发生变化的原因,和C标准不断变迁…...

Java FX 学习

声明:参考视频 一. Stage与Scene 舞台与场景:JavaFX应用程序将Ul容器定义为舞台(Stage)与场景(Scene)Stage类是顶级容器,它对应于窗体,其内容由Scene决定。Scene类是所有可视化内容…...

【走迷宫】

题目 DFS代码 #include<bits/stdc.h> using namespace std; const int N 110; int matrix[N][N]; int n, m; int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, -1}; int dis[N][N]; void dfs(int x, int y, int cnt) {if(cnt > dis[n-1][m-1]) return;if(x n-1 &&a…...

linux(debian)迁移var数据到已分配逻辑卷的物理盘

文章目录 0 背景1 查看当前情况1.1 查看磁盘空间1.2 列出所有可用块设备的信息&#xff0c;而且还能显示他们之间的依赖关系1.3 查看可用磁盘1.4 查看卷组 2 卷组中创建逻辑卷3 创建文件系统4 创建临时文件夹并挂载&#xff0c;然后备份源文件5 修改开机挂载配置5.1 查看原配置…...

【产品那些事】什么是应用程序安全态势管理(ASPM)?

文章目录 前言当前应用安全(AppSec)推进遇到的问题关于ASPM的定义 为什么需要ASPM&#xff1a;B端客户核心需求ASPM产品关键策略理想状态下的ASPMASPM与CSPM的区别国内外产品参考 前言 随着现代软件开发实践的快速演变&#xff0c;特别是在敏捷开发和 DevOps 的推动下&#xf…...

cocosUI多分辨率适配

需求&#xff1a;由于各个设备的分辨率和尺寸并不一样&#xff0c;所以需要一套适配系统去很好的针对不同的设备分辨率或尺寸进行适配&#xff0c;以给玩家一个很好的游戏体验。 目前的主流适配方案 目前&#xff0c;针对不同设备的适配&#xff0c;主流的方案通常包括以下几种…...

无法加载到主类

说明&#xff1a;记录一次项目启动错误&#xff0c;如下&#xff1a; 错误信息&#xff1a;错误: 找不到或无法加载主类 com.hezy.App 原因: java.lang.ClassNotFoundException: com.hezy.App 解决&#xff1a;首先&#xff0c;在项目中勾选这个&#xff0c;显示target文件夹 …...

深入理解Kafka核心设计与实践原理_03

深入理解Kafka核心设计与实践原理_03 03_消费者3.1消费者与消费者组3.2客户端开发3.2.1 必要的参数配置3.2.2 订阅主题与分区 草稿 03_消费者 与生产者对应的是消费者&#xff0c;应用程序可以通过KafkaConsumer来订阅主题&#xff0c;并从订阅的主题中拉取消息。不过在使用Ka…...

MySQL- 覆盖索引

覆盖索引&#xff08;Covering Index&#xff09;是 MySQL 中的一种优化技术&#xff0c;它能够显著提高查询性能。在使用覆盖索引的情况下&#xff0c;查询操作只需要访问索引即可获取所需的数据&#xff0c;而不必再访问表的实际数据行&#xff08;即不需要回表&#xff09;。…...

JSON与EXL文件互转

功能&#xff1a;实现json到excel文件的相互转换(支持json多选版) 目的&#xff1a;编码与语言对应&#xff0c;方便大家使用 页面设计&#xff1a; 介绍&#xff1a; 1.选择文件栏目选择想要转换的文件 2.生成路径是转换后文件所在目录 3.小方框勾选与不勾选分别代表exl到…...

后台管理权限自定义按钮指令v-hasPermi

第一步:在src下面建立一个自定义指令文件,放自定义指令方法 permission.js文件: /*** v-hasPermi 操作权限处理*/import store from "/store";export default {inserted(el, binding) {const { value } binding;//从仓库里面获取到后台给的数组const permission s…...

【Python绘制散点图并添加趋势线和公式以及相关系数和RMSE】

在Python中&#xff0c;绘制散点图并添加趋势线&#xff08;通常是线性回归线&#xff09;、公式、以及相关系数&#xff08;Pearson Correlation Coefficient&#xff09;和均方根误差&#xff08;RMSE&#xff09;可以通过结合matplotlib用于绘图&#xff0c;numpy用于数学运…...

linux bridge VLAN

TP-Link 支持 Linux 桥接&#xff08;bridge&#xff09;和 VLAN 功能的产品主要包括其高端的交换机和一些企业级路由器&#xff1a; TP-Link JetStream 系列交换机&#xff1a; TL-SG3424: 24端口千兆交换机&#xff0c;支持 VLAN 和桥接。TL-SG3210: 24端口千兆管理型交换机&…...

Java进阶篇之深入理解多态的概念与应用

引言 在Java面向对象编程&#xff08;OOP&#xff09;中&#xff0c;多态&#xff08;Polymorphism&#xff09;是一个关键概念&#xff0c;它允许相同类型的对象在不同的场景中表现出不同的行为。多态不仅增强了代码的灵活性和可扩展性&#xff0c;还极大地提高了代码的可维护…...

Linux下的进程调度队列

我们在进程那一篇讲到了操作系统时间片轮换调度的概念 那么Linux下具体是怎么调度的&#xff1f;...

统计回归与Matlab软件实现上(一元多元线性回归模型)

引言 关于数学建模的基本方法 机理驱动 由于客观事物内部规律的复杂及人们认识程度的限制&#xff0c;无法得到内在因果关系&#xff0c;建立合乎机理规律的数学模型数据驱动 直接从数据出发&#xff0c;找到隐含在数据背后的最佳模型&#xff0c;是数学模型建立的另一大思路…...

【项目】基于Vue3.2+ElementUI Plus+Vite 通用后台管理系统

构建项目 环境配置 全局安装vue脚手架 npm install -g vue/cli-init打开脚手架图形化界面 vue ui创建项目 在图形化界面创建项目根据要求填写项目相关信息选择手动配置勾选配置项目选择配置项目然后我们就搭建完成啦&#x1f973;&#xff0c;构建可能需要一点时间&#xff0…...

随机生成 UUID

1、随机生成 UUID主方法 /*** 随机生成 UUID* param {*} len 生成字符串的长度* param {*} radix 生成随机字符串的长度**/export function uuid_(len 30, radix 20) {var chars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.split()var uuid [],ir…...

报名表EXCEL图片批量下载源码-CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

每次报名表都会包含大量照片&#xff0c;一张一张下载很慢 可以通过未来之窗开源平台架构 开开excel批量下载 实现代码也很简单 function 未来之窗下载(){ let 未来之窗地址 document.getElementById("batchurl").value; let 保存路径 document.getElementById(…...

SpringBoot 整合 Elasticsearch 实现商品搜索

一、Spring Data Elasticsearch Spring Data Elasticsearch 简介 Spring Data Elasticsearch是Spring提供的一种以Spring Data风格来操作数据存储的方式&#xff0c;它可以避免编写大量的样板代码。 常用注解 常用注解说明如下&#xff1a; 注解名称 作用 参数说明 Docu…...

计算机毕业设计 助农产品采购平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

Django后台数据获取展示

​ 续接Django REST Framework&#xff0c;使用Vite构建Vue3的前端项目 1.跨域获取后台接口并展示 安装Axios npm install axios --save 前端查看后端所有定义的接口 // 访问后端定义的可视化Api接口文档 http://ip:8000/docs/ // 定义的学生类信息 http://ip:8000/api/v1…...

innodb 如何保证数据的一致性?

InnoDB是MySQL的默认存储引擎之一&#xff0c;它通过多种机制来保证数据的一致性。以下是InnoDB保证数据一致性的主要方式&#xff1a; 1. 事务支持 InnoDB实现了ACID&#xff08;原子性、一致性、隔离性和持久性&#xff09;事务模型&#xff0c;这是保证数据一致性的基础。…...

Oracle-OracleConnection

提示&#xff1a;OracleConnection 主要负责与Oracle数据库的交互&#xff0c;特别针对CDC功能&#xff0c;提供了获取和处理数据库更改日志的能力&#xff0c;同时包含数据库连接管理、查询执行和结果处理的通用功能&#xff0c;与DB2Connection作用相似 文章目录 前言一、核心…...

基于hadoop的网络流量分析系统的研究与应用

目录 摘要 1 Abstract 2 第1章 绪论 3 1.1 研究背景 3 1.2 研究目的和意义 4 1.2.1 研究目的 4 1.2.2 研究意义 6 1.3 国内外研究现状分析 7 1.3.1 国内研究现状 7 1.3.2 国外研究现状 9 1.4 研究内容 11 第2章 Hadoop技术及相关组件介绍 12 2.1 HDFS的工作原理及…...

【C# WPF WeChat UI 简单布局】

创建WPF项目 VS创建一个C#的WPF应用程序: 创建完成后项目目录下会有一个MainWindow.xaml文件以及MainWindow.cs文件,此处将MainWindow.xaml文件作为主页面的布局文件,也即为页面的主题布局都在该文件进行。 布局和数据 主体布局 Wechat的布局可暂时分为三列, 第一列为菜…...

关于docker的几个概念(二)

目录 1. 为何Docker CentOS镜像比传统CentOS镜像小得多&#xff1f;2. 镜像的分层结构及其优势3. 讲一下容器的copy-on-write特性&#xff0c;修改容器里面的内容会修改镜像吗&#xff1f;4. 简单描述一下Dockerfile的整个构建镜像过程 1. 为何Docker CentOS镜像比传统CentOS镜…...

JAVA集中学习第五周学习记录(一)

系列文章目录 第一章 JAVA集中学习第一周学习记录(一) 第二章 JAVA集中学习第一周项目实践 第三章 JAVA集中学习第一周学习记录(二) 第四章 JAVA集中学习第一周课后习题 第五章 JAVA集中学习第二周学习记录(一) 第六章 JAVA集中学习第二周项目实践 第七章 JAVA集中学习第二周学…...

JavaSE 网络编程

什么是网络编程 计算机与计算机之间通过网络进行数据传输 两种软件架构 网络编程3要素 IP IPv4 IPv6 Testpublic void test01() throws UnknownHostException { // InetAddress.getByName 可以是名字或ipInetAddress address InetAddress.getByName("LAPTOP-7I…...