QCMS V2.0命令执行与暴绝对路径漏洞

QCMS是一款小型的网站管理系统。拥有多种结构类型,包括:ASP+ACCESS、ASP+SQL、PHP+MYSQL。今天叫兄弟们一起挖掘QCMS的漏洞,与大家分享挖洞的全过程。

把源码down下来,本地先搭建了一个环境。各种扫描,各种fuzzer,各种模糊测试之后发现apache错误日志里面有如下信息:

PHP Warning: mkdir() [function.mkdir]: Invalid argument in 
D:\\WWW\\system\\controller\\home.php on line 36

在system\controller\home.php文件的36行有创建目录的mkdir函数

而$path这个变量是由$thumb传递过来的,那么我们向上追踪$thumb变量。

我们发现$thumb初始值为空字符串。而给$thumb赋值是通过$url_arr这个数组。

而$url_arr这个数组又是通过explode函数生成的。其实真正的漏洞成因就在

$url_arr = explode('_', substr($url, 1, -4));

Explode函数根据_将原始的URI分割为数组,存放到$url_arr中。

接下来把$url_arr[1]的***个元素向后截取作为图片的宽度;

把$url_arr[2]的***个元素向后截取作为图片的高度;

接下来再判断$url_arr[3]是否为空,并赋值给$noWaterMark.

也就是说,我们得用_来分割url,而且让$url_arr的长度必须大于2。否则直接404并且退出程序。

我们23行下面设置个断点,并且把$url_arr打印出来。

发现当我提交http://localhost:8088/11_11_11_11

的时候,程序可以直接绕过19行的if判断,向下走。

但是直接这样提交并没有创建文件夹,是因为$path = dirname($thumb);这个函数并没有给$path赋值,我们打印下$path的值,看下是多少。

发现此时的$path是一个.,那么$thumb的值是多少呢?

我们发现$thumb的值是11_w1_h1_11。我们来看下dirname这个函数。

发现该函数返回去掉文件名后的目录名。OK,那么我们提交这样的URL看看:http://localhost:8088/11_11_11__11/www

我们取消删掉刚才添加的var_dump这些代码。直接访问这个URL发现文件夹创建成功。

大家可以可能会问为什么还有一个404页面。OK,我们接着往下看代码。

目录创建完之后,会盘对$filename这个变量是否是一个文件。我们打印下这个文件名。

我们会发现,这个文件名是用$url_arr的下标为0的元素加上文件的后缀名组装的。

这真是一个神奇的组装。大家看我怎么拼接。

我提交如下url:

http://localhost:8088/index_11_11__11/.php

就组装成了首页的index.php

我提交http://localhost:8088/lib/config/config_11_11__11/.php

那么就组装成了数据库的配置文件.

这时候$filename就是一个文件名.就绕过了

开始执行下面的生成缩略图的操作.

接下来程序会判断图片的大小是否在程序预定义的$size_arr这个数组中。

如果不在,那么抱歉,404.我们先打印下原来的图片大小。

发现图片大小为1,1 。不在预定义的数组中,那么就不会向下执行。怎么绕过呢?修改图片大小。我们提交如下url

http://localhost:8088/lib/config/config_150_150__11/.php

成功绕过。开始执行exec生成缩略图的操作。和readfile读取文件的操作。

exec(‘convert -resize “‘.$width.’x&’.$height.’>” ‘.$filename.’ ‘.$thumb.”);

而convert-resize 这个命令是linux下生成缩略图的命令。要使用这个命令,必须先安装ImageMagick。于是我又搭建了一个LAMP环境。yum -y install ImageMagick

安装了下ImageMagick

然后生成了下缩略图

convert -resize “100×100>” /var/www/html/qcms/upload/static/upload/source/20141101/5.png /var/www/html/qcms/upload/static/upload/source/20141101/6.png

这条命令就是把5.png 缩放为100×100的6.png。

而我提交http://localhost:8088/lib/config/config_150_150__11/.php

那么就试图把lib/config/config.php这个文件生成lib/config/config_w50_h50.php

把lib/config/config_w50_h50.php 当成lib/config/config.php的缩略图。

但是一个php文件当作图片生成另一个缩略图文件就会失败。因此再去读取那个缩略图文件时就会读取失败。因为文件不存在。在火狐下可能会暴图片因存在错误而无法显示。

而在IE下有可能就会暴出绝对路径

我感觉exec(‘convert -resize ” ‘.$width.”.$height.’>” ‘.$filename.”.$thumb.”); 和readfile($thumb); 这两处应该还有更多的利用价值。希望大家一起研究下。

本文投稿作者:TakeDown Team漏洞研究员MXi4oyu、Arya

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/131755.html<

(0)
管理的头像管理
上一篇2025-02-26 16:53
下一篇 2025-02-26 16:55

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注