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

 

0x00 环境准备

XIAOCMS官网: http://www.xiaocms.com/

网站源码版本:XiaoCms (发布时间:2014-12-29)

程序源码下载:http://www.xiaocms.com/download/XiaoCms_20141229.zip

测试网站首页:

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

 

0x01 代码分析

1、漏洞文件位置:/admin/controller/template.php  第79--91行:

  1. public function delAction() {  
  2.         $dir    = $this->get('dir') ? urldecode($this->get('dir')) : '';  
  3.         $dir = str_replace(array('..\\', '../', './', '.\\'), '', trim($dir));  
  4.         $dir    = substr($dir, 0, 1) == '/' ? substr($dir, 1) : $dir;  
  5.         $dir    = str_replace(array('\\', '//'), DIRECTORY_SEPARATOR, $dir);  
  6.         $filename  = urldecode($this->get('file'));  
  7.         $filepath = $this->dir . $dir.$filename;  
  8.       
  9.         if (@unlink($filepath))  
  10. 10.         $this->show_message('删除成功',1);  
  11. 11.         else  
  12. 12.         $this->show_message('删除失败',2, url('template', array('dir'=>$dir)));  
  13. 13.     }       

在这段函数中,首先对dir参数进行处理,然后将file进行路径拼接,然后带入unlink函数进行删除操作。可以看到参数并未进行任何过滤或处理,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件。如删除install.lock文件,进行CMS重装,劫持网站数据库。

0x02 漏洞利用

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

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

2、构造URL参数,可成功删除根目录下的test.txt文件

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

3、如何进一步利用?

构造参数删除install.lock文件,进入CMS重装界面。

Payload:

http://127.0.0.1/admin/index.php?c=template&a=del&file=..\\..\\..\\data\\install.lock&dir=images\

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

0x03 修复建议

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

最后

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

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