0x00 环境准备

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

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

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

测试网站首页:

 

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

 

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_存在任意文件删除漏洞分析_php_02

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

 

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

3、如何进一步利用?

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

Payload:

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

 

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

0x03 修复建议

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

最后

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

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