【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析
0x00 环境准备
大米CMS官网:http://www.damicms.com
网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15)
程序源码下载:http://www.damicms.com/downes/dami.rar
测试网站首页:

0x01 代码分析
1、漏洞文件位置:/Admin/Lib/Action/TplAction.class.php 第20-43行中:
- public function index()
- {
- $dirpath = $this->dirpath();//当前目录
- $dirlast = $this->dirlast();//上一层目录
- import("ORG.Util.Dir");
- $dir = new Dir($dirpath);
- $list_dir = $dir->toArray();
- if (empty($list_dir))
- {
- 10. $this->error('该文件夹下面没有文件!');
- 11. }
- 12. foreach($list_dir as $key=>$value)
- 13. {
- 14. $list_dir[$key]['pathfile'] = dami_url_repalce($value['path'],'desc').'|'.$value['filename'];
- 15. }
- 16. $_SESSION['tpl_jumpurl'] = '?s=Tpl/index/id/'.dami_url_repalce($dirpath,'desc');
- 17. if($dirlast && $dirlast != '.')
- 18. {
- 19. $this->assign('dirlast',dami_url_repalce($dirlast,'desc'));
- 20. }
- 21. $this->assign('dirpath',$dirpath);
- 22. $this->assign('list_dir',list_sort_by($list_dir,'mtime','desc'));
- 23. $this->display('index');
24. }
这段函数获取当前目录及上一层目录参数,然后进行列目录等操作,我们继续看一下程序是如何获取当前目录的参数的呢?
2、漏洞文件位置:/Admin/Lib/Action/TplAction.class.php 第45-61行中:
- public function dirpath()
- {
- $id = dami_url_repalce(trim($_GET['id']));
- if ($id)
- {
- $dirpath = $id;
- }
- else
- {
- 10. $dirpath ='./Web/Tpl';
- 11. }
- 12. if (!strpos($dirpath,'Tpl'))
- 13. {
- 14. $this->error("不在模板文件夹范围内!");
- 15. }
- 16. return $dirpath;
17. }
从GET方式获取参数id,判断参数是否为空,默认目录是./web/tpl,然后检测参数中是否包含tpl字符串,最后返回当前目录。我们可以构造参数id,绕过代码检测,从而导致程序在实现上存在目录遍历漏洞,攻击者可利用该漏洞获取敏感信息。
0x02 漏洞利用
1、登录后台,代码检测参数中是否包含tpl字符串,因此我们可以在参数包含.\\Web\\Tpl\\,然后通过..\\,跳转到上一层目录,获取网站目录结构。
获取网站根目录Payload:
http://127.0.0.1/admin.php?s=/Tpl/index/id/.\\Web\\Tpl\\..\\..\\

2、可以继续通过..\\遍历磁盘目录,获取更多敏感信息。
0x03 修复建议
1、过滤..等可能的恶意字符,防止目录跳转,最为推荐的方法;
2、正则判断用户输入的参数的格式,看输入的格式是否合法:这个方法的匹配最为准确和细致,但是有很大难度,需要大量时间配置规则。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析的更多相关文章
- 【代码审计】711cms_V1.0.5 目录遍历漏洞分析
0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...
- 【代码审计】CLTPHP_v5.5.3后台目录遍历漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- [cyber security][php]pfSense目录遍历漏洞分析
0×00 导言 pfSense是一个基于FreeBSD,专为防火墙和路由器功能定制的开源版本. 在本文中,我们将向大家介绍在pfSense的2.1.3以及更低版本中的CVE-2014-4690漏洞:对 ...
- 【代码审计】大米CMS_V5.5.3 代码执行漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- 【代码审计】大米CMS_V5.5.3 SQL注入漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- Kali学习笔记31:目录遍历漏洞、文件包含漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...
- HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
参考文献: http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下载地 ...
- 目录遍历漏洞简介 转载于h3c
参考文章: 攻防:目录遍历漏洞简介
- nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现
nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...
随机推荐
- 基于Python的SQLAlchemy的操作
安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...
- nginx编译安装on mac
一.编译安装模块 如果是原有包中就有的模块,编译时, ./configure --with-xxx 就可以, 如果是第三方模块,可使用 --add-module, 如果有多个模块的话,只需要多次使用- ...
- JetBrains Rider 2018.1 汉化
之前说过了JetBrains系列的破解(最新版本也可以破解)https://www.cnblogs.com/dunitian/p/8478252.html 不少人对全英文的开发环境还是不太适应,那就来 ...
- GIS中栅格数据结构的显示与计算
在GIS中,根据数据存储的表现形式不同,通常将空间数据分为矢量数据和栅格数据.最简单的区别是:当栅格数据放大到一定程度时,就会呈现出我们熟悉的讨厌的"马赛克". 栅格数据存储 最简 ...
- Fix Corrupt Blocks on HDFS
来自:http://centoshowtos.org/hadoop/fix-corrupt-blocks-on-hdfs/ How do I know if my hadoop hdfs filesy ...
- 【Zookeeper】源码分析之网络通信(三)之NettyServerCnxn
一.前言 前面已经学习了NIOServerCnxn,接着继续学习NettyServerCnxn. 二.NettyServerCnxn源码分析 2.1 类的继承关系 public class Netty ...
- PL/SQL学习笔记之记录
一:记录 记录是一种高可以容纳不同数据类型的数据的数据结构. PL/SQL可以处理记录的以下几种类型: 基于数据表 基于游标的记录 用户自定义的记录 二:使用 %ROWTYPE属性 创建基于表格或基于 ...
- curl重写php file_get_contents
file_get_contents在连接不上的时候会提示Connection refused,有时候会带来不便:另外,curl的性能比file_get_contents高,所以用curl重写file_ ...
- Eclipse插件的安装(手动安装),以安装SVN插件和中文语言包为例
Eclipse 插件的手动配置 今天自己亲自手动安装了Eclipse插件,参考了网络上的一些文章,总结一下安装的方法.下面通过两个例子来分享一下自己的收获. 例1:SVN插件安装 1.在Eclipse ...
- 译:6.RabbitMQ Java Client 之 Remote procedure call (RPC,远程过程调用)
在 译:2. RabbitMQ 之Work Queues (工作队列) 我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务. 但是如果我们需要在远程计算机上运行一个函数并等待结果呢?嗯,这 ...