【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析

 

0x00 环境准备

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

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

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

测试网站首页:

 【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析_第1张图片

0x01 代码分析

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

  1. public function index()  
  2. {  
  3.     $dirpath = $this->dirpath();//当前目录  
  4.     $dirlast = $this->dirlast();//上一层目录  
  5.     import("ORG.Util.Dir");  
  6.     $dir = new Dir($dirpath);  
  7.     $list_dir = $dir->toArray();  
  8.     if (empty($list_dir))  
  9.     {  
  10. 10.         $this->error('该文件夹下面没有文件!');  
  11. 11.     }  
  12. 12.     foreach($list_dir as $key=>$value)  
  13. 13.     {  
  14. 14.         $list_dir[$key]['pathfile'] = dami_url_repalce($value['path'],'desc').'|'.$value['filename'];  
  15. 15.     }  
  16. 16.     $_SESSION['tpl_jumpurl'] = '?s=Tpl/index/id/'.dami_url_repalce($dirpath,'desc');  
  17. 17.     if($dirlast && $dirlast != '.')  
  18. 18.     {  
  19. 19.         $this->assign('dirlast',dami_url_repalce($dirlast,'desc'));  
  20. 20.     }  
  21. 21.     $this->assign('dirpath',$dirpath);  
  22. 22.     $this->assign('list_dir',list_sort_by($list_dir,'mtime','desc'));  
  23. 23.     $this->display('index');  

24. }  

这段函数获取当前目录及上一层目录参数,然后进行列目录等操作,我们继续看一下程序是如何获取当前目录的参数的呢?

2、漏洞文件位置:/Admin/Lib/Action/TplAction.class.php  第45-61行中:

  1. public function dirpath()  
  2. {  
  3.     $id = dami_url_repalce(trim($_GET['id']));  
  4.     if ($id)   
  5.     {  
  6.         $dirpath = $id;  
  7.     }  
  8.     else  
  9.     {  
  10. 10.         $dirpath ='./Web/Tpl';  
  11. 11.     }  
  12. 12.     if (!strpos($dirpath,'Tpl'))   
  13. 13.     {  
  14. 14.         $this->error("不在模板文件夹范围内!");  
  15. 15.     }  
  16. 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\\..\\..\\

【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析_第2张图片

2、可以继续通过..\\遍历磁盘目录,获取更多敏感信息。

0x03 修复建议

1、过滤..等可能的恶意字符,防止目录跳转,最为推荐的方法;

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

最后

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

 

你可能感兴趣的:(【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析)