【代码审计】XYHCMS V3.5任意文件下载漏洞分析

版权声明:本文由Bypass原创发布,转载请保留出处。欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。 https://blog.csdn.net/qq_23936389/article/details/84967398

 

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行:

  1. public function downFile() {  
  2.     if (empty($_GET['file']) || empty($_GET['type']) || !in_array($_GET['type'], array("zip", "sql"))) {  
  3.         $this->error("下载地址不存在");  
  4.     }  
  5.     $path     = array("zip" => $this->getDbPath() . "Zip/", "sql" => $this->getDbPath() . '/');  
  6.     $filePath = $path[$_GET['type']] . $_GET['file'];  
  7.     if (!file_exists($filePath)) {  
  8.         $this->error("该文件不存在,可能是被删除");  
  9.     }  
  10. 10.     $filename = basename($filePath);  
  11. 11.     header("Content-type: application/octet-stream");  
  12. 12.     header('Content-Disposition: attachment; filename="' . $filename . '"');  
  13. 13.     header("Content-Length: " . filesize($filePath));  
  14. 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--,每周原创一篇技术干货。 

 

猜你喜欢

转载自blog.csdn.net/qq_23936389/article/details/84967398
今日推荐