QCMS是
一款小型的网站管理系统。拥有多种结构类型,包括:ASP+ACCESS、ASP+SQL、PHP+MYSQL。今天叫兄弟们一起挖掘QCMS的漏洞,与大家分享挖洞的全过程。498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="width: 498px; height: 208px" border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s7.51cto.com/wyfs02/M00/4E/37/wKiom1RgUbbCUH3eAAETbf5lELU245.jpg" width="690" height="298" />把源码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函数498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s7.51cto.com/wyfs02/M02/4E/34/wKioL1RgUCrAoEHvAABh2s8AId4355.jpg" width="481" height="171" />而$path这个变量是由$thumb传递过来的,
那么我们向上追踪$thumb变量。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s7.51cto.com/wyfs02/M02/4E/34/wKioL1RgUDiiPyGvAADI-Pl557Y594.jpg" width="558" height="363" />我们发现$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并且退出程序。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s3.51cto.com/wyfs02/M02/4E/34/wKioL1RgUEjw-CH4AAAqbUX2voc881.jpg" width="368" height="92" />我们23行下面设置个断点,并且把$url_arr打印出来。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s2.51cto.com/wyfs02/M02/4E/35/wKiom1RgT-zjHTMCAADtY9kzAlY520.jpg" width="558" height="380" />发现当我提交http://localhost:8088/11_11_11_11的时候,程序可以直接绕过19行的if判断,向下走。
但是直接这样提交并没有创建文件夹,是因为$path = dirname($thumb);这个函数并没有给$path赋值,我们打印下$path的值,看下是
多少。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s8.51cto.com/wyfs02/M01/4E/34/wKioL1RgUGORQUUjAAE0_p2TYIg740.jpg" width="502" height="504" />发现此时的$path是一个.,那么$thumb的值是多少呢?498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s6.51cto.com/wyfs02/M00/4E/34/wKioL1RgUHDhHMvNAAEwvdEeNak864.jpg" width="462" height="502" />我们发现$thumb的值是11_w1_h1_11。我们
来看下dirname这个函数。发现该函数返回去掉文件名后的目录名。OK,那么我们提交这样的URL看看:http://localhost:8088/11_11_11__11/www498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s6.51cto.com/wyfs02/M00/4E/34/wKioL1RgUH6AJzZvAAEWCfN9ZYg654.jpg" width="406" height="510" />我们取消删掉刚才添加的var_dump这些代码。直接访问这个URL发现文件夹创建成功。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s3.51cto.com/wyfs02/M01/4E/35/wKiom1RgUCOiI0vpAAC9O78Mnzk305.jpg" width="558" height="472" />大家可以可能会问为什么还有一个404页面。OK,我们接着往下看代码。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s3.51cto.com/wyfs02/M02/4E/35/wKiom1RgUC-je6fsAABtlVUCCl8559.jpg" width="558" height="265" />目录创建完之后,会盘对$filename这个变量是否是一个文件。我们打印下这个文件名。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s6.51cto.com/wyfs02/M00/4E/35/wKiom1RgUDuByJxOAAC4BaQ0PMk976.jpg" width="558" height="338" />我们会发现,这个文件名是用$url_arr的下标为0的元素加上文件的后缀名组装的。这真是一个神奇的组装。大家看我怎么拼接。我提交如下url:http://localhost:8088/index_11_11__11/.php498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s1.51cto.com/wyfs02/M02/4E/34/wKioL1RgUK-h_waxAABPf2zRTGA220.jpg" width="388" height="225" />就组装成了首页的index.php我提交http://localhost:8088/lib/config/config_11_11__11/.php那么就组装成了数据库的配置文件.498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s1.51cto.com/wyfs02/M02/4E/36/wKiom1RgUFSzyEVGAABkCQlK8Hk765.jpg" width="550" height="262" />这时候$filename就是一个文件名.就绕过了498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s4.51cto.com/wyfs02/M01/4E/36/wKiom1RgUGCSJ4jaAABXc4X9eMM057.jpg" width="461" height="155" />开始执行下面的生成缩略图的操作.接下来程序会判断图片的
大小是否在程序预定义的$size_arr这个数组中。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s5.51cto.com/wyfs02/M02/4E/36/wKiom1RgUGzBDXO6AABYcK9gRHY358.jpg" width="558" height="165" />如果不在,那么抱歉,404.我们先打印下原来的图片大小。498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s8.51cto.com/wyfs02/M00/4E/35/wKioL1RgUOLCZ3jkAAE_Oh1e3lQ516.jpg" width="554" height="509" />发现图片大小为1,1 。不在预定义的数组中,那么就不会向下执行。怎么绕过呢?修改图片大小。我们提交如下urlhttp://localhost:8088/lib/config/config_150_150__11/.php498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s1.51cto.com/wyfs02/M02/4E/35/wKioL1RgUPDBjVVsAABUK8jBNoU656.jpg" width="439" height="254" />成功绕过。开始执行exec生成缩略图的操作。和readfile读取文件的操作。exec('convert -resize "'.$width.'x&'.$height.'>" '.$filename.' '.$thumb.'');而convert-resize 这个命令是linux下生成缩略图的命令。要使用这个命令,必须先安装ImageMagick。于是我又搭建了一个LAMP环境。yum -y install ImageMagick安装了下ImageMagick498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s3.51cto.com/wyfs02/M01/4E/36/wKiom1RgUJThf9ZiAABHm6rXScA305.jpg" width="558" height="144" />
然后生成了下缩略图convert -resize "100x100>" /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下有可能就会暴出绝对路径498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="width: 504px; height: 135px" border="0" alt="QCMS V2.0命令执行与暴绝对路径漏洞" src="http://s2.51cto.com/wyfs02/M02/4E/36/wKiom1RgUKTAj-MaAABTMWT05vQ061.jpg" width="672" height="210" />我感觉exec('convert -resize " '.$width.''.$height.'>" '.$filename.''.$thumb.''); 和readfile($thumb); 这两处应该还有更多的利用价值。希望大家一起研究下。本文投稿作者:TakeDown Team漏洞研究员MXi4oyu、Arya【责任编辑:蓝雨泪 TEL:(010)68476606】 原文:QCMS V2.0命令执行与暴绝对路径漏洞 返回网络安全首页
QCMS V2.0命令执行与暴绝对路径漏洞
时间: 2025-01-25 06:12:47
QCMS V2.0命令执行与暴绝对路径漏洞的相关文章
NET IIS暴绝对路径漏洞_安全相关
Title:Microsoft ASP.NET May Disclose Web Directory to Remote Users in Certain Cases Description: If the ASP.NET application does not filter the error message, the web directory information may be disclosed to remote users by using an unavailable fil
NSA泄密事件之SMB系列远程命令执行漏洞及Doublepulsar后门全球数据分析
本文讲的是NSA泄密事件之SMB系列远程命令执行漏洞及Doublepulsar后门全球数据分析, 1. 概述 2017 年 4 月 14 日,黑客组织Shadow Brokers 公布了一批新的NSA(美国国家安全局)黑客工具.这批黑客工具中含有可以配合使用的一个攻击框架和多个攻击漏洞.这次的工具主要面向的是Windows系统,攻击框架非常易用,漏洞也大都是核弹级别的RCE(远程命令执行),配合框架和漏洞,可以非常容易地在存在漏洞的 Windows 主机上执行命令.植入后门.一时间,各路选手
使用Eclipse BPEL插件开发和执行WS-BPEL V2.0业务流程
WS-BPEL 是什么? WS-BPEL 是由 OASIS 开发的供应商中立的规范,它将把业务流程指定为 Web 服务之间的一套互动操作.OASIS 将把 WS-BPEL 定义为如下内容:"可以通过两种方法描述业务流程.可执行业务流程将为业务互动中的参与者的实际行为建模.抽象业务流程都是部分指定的流程,不适于执行.抽象流程可以隐藏一些必需的具体操作信息.抽象流程充当描述角色,具有多个可能的用例,包括可观测行为以及流程模板.WS-BPEL 的意图是为可执行流程和抽象流程的行为建模. "W
de4dot命令 v2.0.3.3405
de4dot v2.0.3.3405 Copyright (C) 2011-2013 [email]de4dot@gmail.com[/email] Latest version and source code: https://bitbucket.org/0xd4d/de4dot Some of the advanced options may be incompatible, causing a nice exception. With great power comes great r
使用 C# 2.0 命令行编译器
编译|命令行 发布日期: 12/22/2004 | 更新日期: 12/22/2004Andrew W. Troelsen,Microsoft MVP Intertech Training 摘要:本文分析了使用 C# 命令行编译器 csc.exe 生成应用程序的过程.同时,还将向读者介绍很多为 C# 2.0 独有的编译器选项,例如,extended/reference 标志和强名称支持.阅读完本文的内容之后,您将能够轻松地在没有向导的环境中生成单文件程序集和多文件程序集. 适用于: Microso
创新触手可及:WebSphere CloudBurst V2.0新特性
每一篇创新触手可及系列的文章都会从开发人员和其他从业人员的角度为您介绍关于新兴技术的信息和讨论,以及对前沿的 IBM WebSphere 产品的幕后观点. 新固件,新特性 IBM WebSphere CloudBurst Appliance firmware V2.0 不缺乏新特性.为了激发您对此新版本的兴趣,本文将带您概括地领略一下最重要的几个新特性.后续文章将会详细介绍这些新功能. 那么,我们现在就开始吧! 动态虚拟机操作 在版本 2.0 之前,WebSphere CloudBurst 中虚
程序猿(媛)们注意啦!Git、SVN、Mercurial版本控制系统被爆远程命令执行漏洞
近日,三款主流的源版本控制系统Git.Subversion (svn).Mercurial,发布了更新补丁,修复了一个客户端代码执行漏洞. 恶意的攻击者可以向受害者发送一条精心构造的ssh:// URL链接,当受害者访问这条URL则会触发漏洞导致执行恶意代码. 该漏洞由GitLab的Brian Neel,Recurity Labs的Joan Schneeweiss和GitHub的Jeff King发现和报告.具体详情如下: 漏洞编号: Git: CVE-2017-1000117 Apache S
使用IBM Rational Quality Manager(RQM)V2.0来优化测试管理
为远程测试联合使用 Rational Quality Manager 与 Rational Functional Tester 的集成 引言 IBM Rational Quality Manager 解决方案是 IBM Rational 最新的质量管理环境.构建在 Jazz 平台上,Rational Quality Manager 是一种能够提供大量选项的灵活工具.本文还展示了怎样实施 IBM Rational Quality Manager 和 IBM Rational Functional
又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析
本文讲的是又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析, 早在2015年,FireEye曾发布过两次关于Office的Encapsulated PostScript (EPS)图形文件的漏洞攻击的研究分析,其中一次属于零日漏洞攻击. 今年3月开始,FireEye再一次在微软Office产品中陆续发现三个新的零日漏洞,发现时这些漏洞已被野外利用. 第一个漏洞出现在今年的3月下旬,CVE-2017-0261中描述了Office远程代码执行漏洞(RCE)漏洞,FireEye认为该漏洞