【代码审计】大米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、漏洞文件位置1:/Admin/Lib/Action/TplAction.class.php  第118-135行中:

  1. public function del()  
  2.   
  3. $id = dami_url_repalce(str_replace('*','.',trim($_GET['id'])));  
  4. if (!substr(sprintf("%o",fileperms($id)),-3))  
  5. {  
  6.     $this->error('无删除权限!');  
  7. }  
  8. @unlink($id);  
  9. 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--,每周原创一篇技术干货。 

 

猜你喜欢

转载自www.cnblogs.com/xiaozi/p/10053536.html