【代码审计】XYHCMS V3.5任意文件下载漏洞分析
0x00 环境准备
XYHCMS官网:http://www.xyhcms.com/
网站源码版本:XYHCMS V3.5(2017-12-04 更新)
程序源码下载:http://www.xyhcms.com/Show/download/id/2/at/0.html
测试网站首页:

0x01 代码分析
1、漏洞文件位置:/App/Manage/Controller/DatabaseController.class.php 第365-379行:
- public function downFile() {
- if (empty($_GET['file']) || empty($_GET['type']) || !in_array($_GET['type'], array("zip", "sql"))) {
- $this->error("下载地址不存在");
- }
- $path = array("zip" => $this->getDbPath() . "Zip/", "sql" => $this->getDbPath() . '/');
- $filePath = $path[$_GET['type']] . $_GET['file'];
- if (!file_exists($filePath)) {
- $this->error("该文件不存在,可能是被删除");
- }
- 10. $filename = basename($filePath);
- 11. header("Content-type: application/octet-stream");
- 12. header('Content-Disposition: attachment; filename="' . $filename . '"');
- 13. header("Content-Length: " . filesize($filePath));
- 14. readfile($filePath);
15. }
这段函数中对提交的参数进行处理,首先判断file/type参数是否为空及type文件类型,然后拼接成完整的文件路径,检测文件是否存在。可以看出并没有对下载的文件做任何限制,导致程序在实现上存在任意文件下载漏洞,可以构造参数下载服务器任意文件,如脚本代码,服务及系统配置文件等;可用得到的代码进一步代码审计,得到更多可利用漏洞。
0x02 漏洞利用
1、登录网站后台,数据库配置文件路径:\\App\\Common\\Conf\\db.php
因此‘/’作为参数边界识别符,我们可以用‘\\’,来替换,组成相对路径地址,下载数据库配置文件,构造url链接如下:
http://127.0.0.1/xyhai.php?s=/Database/downFile/file/..\\..\\..\\App\\Common\\Conf\\db.php/type/zip

2、成功跳出下载框,下载成功后,打开配置文件,获取数据库敏感信息:

0x03 修复建议
1、在下载前对传入的参数进行过滤,直接将..替换成空,就可以简单实现防范的目的
2、最好还是可以对待下载文件类型进行二次检查,判断是否允许下载类型。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】XYHCMS V3.5任意文件下载漏洞分析的更多相关文章
- 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析
0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4 更新时间:2017-09-13 程序源码下载:http://www ...
- 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...
- 【代码审计】XYHCMS V3.5代码执行漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 代码审计-phpcms9.6.2任意文件下载漏洞
漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...
- dzzoffice 任意文件下载漏洞分析
dzzoffice 任意文件下载 \updload\dzz\system\save.php第72行开始: elseif($_GET['do']=='move'){ $obz=trim($_ ...
- 代码审计-(Ear Music).任意文件下载漏洞
0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...
- 任意文件下载漏洞的接口URL构造分析与讨论
文件下载接口的URL构造分析与讨论 某学院的文件下载接口 http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname ...
- PHP代码审计笔记--任意文件下载漏洞
在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件. 0x01 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...
随机推荐
- 封装PHP验证码方法
/** * 生成验证码 * @param integer $width 图片宽度 * @param integer $height 图片高度 * @param string $type 验证码类型 * ...
- .NET:race conditions
race conditions (when an anomalous result occurs due to an unexpected critical dependence on the tim ...
- 微软补丁安装工具wusa报错。
命令行需要msu格式的补丁安装文件的全路径,否则报错.
- VirtualBox安装64位系统
2010-04-29 到引导区报错: This kernel requires an X86-64 CPU,but only detected an i686 CPU. 以我小学水平的英语理解 ...
- 阿里云服务器Centos7.4开放80端口的记录
问题: 阿里云服务器安装的是centos7, 搭建网站安装lnmp1.5后发现访问不了, 不明所以, 在一论坛找到关于80端口未开放的原因. 需求: 开放80端口.于是有了下面第一,二,三部分关于开放 ...
- CentOS7.4安装配置mysql8 TAR免安装版
下载mysql: https://dev.mysql.com/downloads/mysql/ 解压tar.xz文件:先 xz -d mysql-8.0.15-linux-glibc2.12-x86_ ...
- Jason 和 Java 对象转化示例
1.工程 2.代码: JsonUtil.java package com.my.json; import java.util.ArrayList; import java.util.List; imp ...
- Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework
上一篇讲到,如何快速创建报表程序了.这篇教大家如何快速制作图表报表. 继上一篇,Winform开发框架之图表报表在线设计器-报表 上一篇讲到如何了创建数据源,这里就不在介绍了.那我们就直接从图表设计器 ...
- 我对android开发的一点小感悟小看法
“Android”,“Android开发”等等这些词成了时下最热的词,也是时下大众最关注最吸引人眼球的话题,当然,最热门的行业也意味着高薪,好的就业环境,但同时也意味着强大的竞争力! Android系 ...
- AutoMapper,对象映射的简单使用
using AutoMapper; using AutoMapper.Configuration; using System; using System.Collections.Generic; us ...