0x00 环境准备

大米CMS官网:http://www.damicms.com

网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15)

程序源码下载:http://www.damicms.com/downes/dami.rar

测试网站首页:

0x01 代码分析

1、漏洞文件位置1:/Admin/Lib/Action/TplAction.class.php  第118-135行中:

  1. public function del()
  2. $id = dami_url_repalce(str_replace('*','.',trim($_GET['id'])));
  3. if (!substr(sprintf("%o",fileperms($id)),-3))
  4. {
  5. $this->error('无删除权限!');
  6. }
  7. @unlink($id);
  8. if (!empty($_SESSION['tpl_jumpurl']))

10. {

  1. 11.     $this->assign("jumpUrl",$_SESSION['tpl_jumpurl']);

12. }

13. else

14. {

  1. 15.     $this->assign("jumpUrl",'?s=Tpl/index');

16. }

17. $this->success('删除文件成功!');

  1. 18.   }

这段删除模板的函数中,首先对获取的参数进行替换,然后判断文件是否有删除权限,接着带入unlink函数中进行删除操作,可以看到参数并未进行任何过滤或处理,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件,如删除install.lck进行CMS重装,劫持网站数据库。

2、漏洞文件位置2:/install/index.php 第102-112行:

  1. $fp = fopen($source_file,"r");
  2. $configStr = fread($fp,filesize($source_file));
  3. fclose($fp);
  4. $configStr = str_replace('localhost',$dbhost,$configStr);
  5. $configStr = str_replace('damidb',$dbname,$configStr);
  6. $configStr = str_replace("'DB_USER'=>'admin'","'DB_USER'=>'{$dbuser}'",$configStr);
  7. $configStr = str_replace("'DB_PWD'=>'admin'","'DB_PWD'=>'{$dbpwd}'",$configStr);
  8. if($dbport!='3306'){$configStr = str_replace("'DB_PORT'=>'3306'","'DB_PORT'=>'{$dbport}'",$configStr);}
  9. $fp = fopen($target_file,"w") or die("<script>alert('写入配置失败,请检查$target_file是否可写入!');history.go(-1);</script>");

10. fwrite($fp,$configStr);

11. fclose($fp);

这段函数中,首先读取配置文件,然后通过正则匹配字符串,最后写入配置中。

参数未经任何过滤,直接写入配置文件。攻击者可以构造脚本代码写入配置文件,从而导致程序在实现上存在代码执行漏洞。

0x02 漏洞利用

1、在网站根目录新建test.txt作为任意文件删除漏洞测试文件:

2、登录后台,构造UTL链接:http://127.0.0.1/admin.php?s=Tpl/Del/id/.|test.txt

可成功删除根目录下的text.txt文件:

3、如何进一步利用呢?

删除根目录下install.lck进行CMS重装,劫持网站数据库

http://127.0.0.1/admin.php?s=Tpl/Del/id/.|install.lck

4、结合/install/index.php下过滤不当,可以将脚本代码写入配置文件,从而进一步触发代码执行漏洞。

5、进一步触发代码执行漏洞,获取网站服务器控制权限。

0x03 修复建议

1、对于要删除的文件,通过正则判断用户输入的参数的格式,看输入的格式是否合法。

2、写入配置文件前,对特殊字符(如<、>等)进行htmlencode处理;全局配置可考虑写入数据库进行调

最后

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

【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析的更多相关文章

  1. CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析

    [CNNVD]Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞(CNNVD-201201-110)    Microsoft Wi ...

  2. 【代码审计】QYKCMS_v4.3.2 后台down.php页面代码执行漏洞分析

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

  3. 【代码审计】LaySNS_v2.2.0 System.php页面存在代码执行漏洞分析.

      0x00 环境准备 LaySNS官网:http://www.laysns.com/ 网站源码版本:LaySNS_v2.2.0 程序源码下载:https://pan.lanzou.com/i0l38 ...

  4. phpMyAdmin Transformation 任意文件包含/远程代码执行漏洞

    漏洞参考 https://yq.aliyun.com/articles/679633 国外提供了一个在线测试的靶场     默认密码  root  toor https://www.vsplate.c ...

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

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

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

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

  7. 【代码审计】iZhanCMS_v2.1 后台任意文件删除漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

  8. 【代码审计】大米CMS_V5.5.3 代码执行漏洞分析

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

  9. 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析

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

随机推荐

  1. Objective-C学习笔记(三)——用Objective-C编写第一个程序:Hello,World!

    不管是哪一个程序猿,或者是学习哪一门计算机语言.写的第一个程序基本上就是Hello World. 今天我们用OC来实现第一个程序:Hello World. 在Xcode中选择新建一个项目,在对话框中选 ...

  2. AngualrJS中制作一个有关菜单的Directive

    通常我们这样写一个菜单: <ul> <li data-ng-class="{'active': highlight('/orders')}"> <a ...

  3. Spring boot 远程调试

    设置远程调试,可以在正式环境上随时跟踪与调试生产故障. 依赖 在 pom.xml 中增加远程调试依赖(试了下,不加也行). <plugins> <plugin> <gro ...

  4. grid - 初识

    Grid有三个参数 目前介绍以下两种:grid.inline-grid <view class="grid"> <view class='grid-row'> ...

  5. 【Zookeeper】源码分析之网络通信(二)之NIOServerCnxn

    一.前言 前面介绍了ServerCnxn,下面开始学习NIOServerCnxn. 二.NIOServerCnxn源码分析 2.1 类的继承关系 public class NIOServerCnxn ...

  6. 解锁scott账户方法

    装完了数据库,忘了给scott账户解锁.这时可以在sql plus工具里,也可以在控制台通过命令行给scott账户解锁. 在第一种情况下,以system账户+自己安装时设置的密码,登录SQL Plus ...

  7. Uploadify导致Chrome频繁崩溃Crash

    上传功能是工作中经常会遇到的问题,应该作为开发标配的技能每个人都会. 我选用的是Uploadify 3.1.2进行上传,使用方法参考之前的一篇文章, 今天记录下一个我遇到的很神奇的bug chrome ...

  8. C语言判断文件夹或者文件是否存在的方法【转】

     C语言判断文件夹或者文件是否存在的方法   方法一:access函数判断文件夹或者文件是否存在 函数原型: int access(const char *filename, int mode); 所 ...

  9. Hadoop2.2.0分布式安装配置详解[2/3]

    前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试.文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题.搭建环境过程不重要,重要点 ...

  10. CPP Note

    hello.cpp -> 编译代码g++ hello.cpp -o a -> a.out 区分大小写的编程语言 内置类型 一些基本类型可以使用一个或多个类型修饰符进行修饰: signed: ...