某通用系统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.rhkb.cn/news/399677.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mfc140.dll丢失如何修复,一步步教你如何解决mfc140.dll丢失,让电脑快速恢复正常状态!

mfc140.dll是 Microsoft Foundation Class (MFC) Library 的一部分,它是一个用于开发 Windows 应用程序的 C 库。当系统报告mfc140.dll丢失时,通常意味着某个应用程序需要这个 DLL 文件来运行,但系统中没有找到它。那么mfc140.dll丢失如何修复…

jetson nano远程调试说明

Jetson nano官方演示不仅需要网线、显示屏、Jetson nano开发板、HDMI线、5V的电源适配器,还需要USB键盘和USB鼠标,携带不方便。这里简单整理下可以不用使用USB键盘、USB鼠标和网线也可以演示。 硬件准备 一块 Jetson Nano ALT 开发板;一个 5…

WordPress原创插件:Download-block-plugin下载按钮图标美化

WordPress原创插件:Download-block-plugin下载按钮图标美化 https://download.csdn.net/download/huayula/89632743

Apache Tomcat服务器版本号隐藏

渗透测试时发现有一台服务器的404报错页面中,有Apache Tomcat的版本号信息显示,发生了信息泄露,可能导致服务器被攻击。如下所示: 解决步骤如下: 1. 隐藏HTTP响应头中的Server信息 Tomcat默认会在HTTP响应头中包含S…

最后一公里!观测云如何重塑北欧城市交通

在北欧地区,共享滑板车已经超越了简单的交通工具,它不仅成为了解决最后一公里出行的首选,更象征着一种全新城市生活方式的兴起。这种生活方式不仅体现了北欧地区对环保、便捷和创新的不懈追求,也彰显了其对提高生活质量的持续努力…

IDEA:Dangling Javadoc comment

JetBrains对JavaDocs的描述: Javadoc comments are usually placed above classes, methods, or fields in your source code. A Javadoc provides a description of the code element located under it and contains block tags marked with with specific metada…

haproxy 7000字配图超详细教程 从小白到入门

简介:HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速,HAProxy具备媲美商用负载均衡器的性能和稳…

LVS中NAT模式和DR模式实战讲解

1DR模式 DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT&#xf…

开源工具提升你的生产力

如果你想摆脱大科技公司的专有控制,有一些选择是很好的。 每一个阴都有一个阳;每一个动作都有一个反作用力;每一个专有软件都有一个开源替代品。大概就是这样的。 在过去的几年里,技术中的“开放性”问题在公众意识中从未如此突出…

【网络编程】字节序,IP地址、点分十进制、TCP与UDP的异同

记录学习,思维导图绘制 目录 1、字节序​编辑 2、IP地址 3、点分十进制 4、TCP与UDP的异同 1、字节序 2、IP地址 3、点分十进制 4、TCP与UDP的异同

鸿蒙(API 12 Beta3版)【播控特性简介】分布式媒体会话

使用媒体播控,可以简单高效地将音视频投放到其他HarmonyOS设备上播放,如在手机上播放的音视频,可以投到2in1设备上继续播放。 HarmonyOS提供了统一的应用内音视频投播功能设计,通过使用系统提供的投播组件和接口,应用…

嵌入式学习---DAY24:进程--二

一、exec函数族----启动一个新程序 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支), 子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的 用户空间代码和数据完全被…

什么是 Java?

探索 Java,一种多功能且功能强大的编程语言。释放其构建强大应用程序的潜力。 前言 简单来说,Java 是一种用于开发软件应用程序的面向对象设计的编程语言。截至 2019 年,它是世界上最受欢迎的编程语言,尤其是因为它是开源的&#…

QT 布局管理器之QHBoxLayout

文章目录 概述.ui来看看Cmain.cpp运行 小结 概述 QHBoxLayout,在QT中是一个布局文件,而且相对来说还是比较简单的。接下来看下。 .ui 先看下在qt design中是如何用的,如下图: 就是这个布局文件,是一个xml的文件&am…

动起来!Axure动画的实用技巧

前言 在数字产品的世界中,用户体验的每一个细节都至关重要。 动画,作为一种增强交互性和视觉吸引力的手段,已经成为现代界面设计中不可或缺的元素。 Axure,作为一款强大的原型设计工具,提供了丰富的动画功能&#x…

Windows下编译安装PETSc

本文记录在Windows下使用MinGW-w64编译安装PETSc的流程。 0、环境 操作系统Windows 11MSYS2msys2-x86_64-20240507 1、开发环境 首先,下载并安装MSYS2,然后编辑PATH环境变量,添加mingw64相关路径:C:\msys64\mingw64\bin。 然后…

【项目分享】使用python的ttkbootstrap模块构建一个炫酷的计时器

目录 前言 项目背景 项目展示(图片) 项目实现 1. 安装与设置 2. 创建主窗口 3. 初始化计时器功能 4. 实现计时功能 5. 实现隐藏边框与置顶功能 6. 运行应用 完整代码 结论 🌟 嗨,我是命运之光! &#x1f…

从零开始实现循环神经网络

本节我们通过使用MXnet,来从零开始的实现一个含有隐藏状态的循环神经网络。 前序工作 数据集预处理进行采样 实现循环神经网络 完成前序工作后,即可开始实现循环神经网络。本文首先构建一个具有隐状态的循环神经网络。其结构如图所示: 接…

Linux的常用操作-02

一:Linux的系统目录结构 /bin bin是ary的缩写,这个目录存放着最经常用的命令 /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev:dev是Device(设备)的缩写,该目录下存放的是Lin…

Servlet——个人笔记

Servlet——个人笔记 文章目录 [toc]Servlet简介Servlet命名Servlet由来实现过程 Servlet 相对 CGI 的优势简要说说什么是CGI Servlet 在IDEA中开发流程Servlet注解方式配置WebServlet注解源码WebServlet注解使用 Servlet常见容器Servlet 生命周期简介测试 Servlet 方法init()…