0x00 环境准备
XIAOCMS官网: http://www.xiaocms.com/
网站源码版本:XiaoCms (发布时间:2014-12-29)
程序源码下载:http://www.xiaocms.com/download/XiaoCms_20141229.zip
测试网站首页:
0x01 代码分析
1、漏洞文件位置:/admin/controller/database.php 第38-56行:
- public function importAction() {
- $dir = DATA_DIR . 'bakup' . DIRECTORY_SEPARATOR;
- $path = $this->get('path');
- if ($path && is_dir($dir . $path)) {
- $fileid = $this->get('fileid');
- $this->importdb($path, $fileid);
- exit;
- }
- if ($this->post('submit')) {
- 10. $paths = $this->post('paths');
- 11. if (is_array($paths)) {
- 12. foreach ($paths as $path) {
- 13.
- 14. delete_dir($dir . $path .'/' );
- 15. @rmdir($dir . $path );
- 16. }
- 17. }
- 18. $this->show_message('操作成功', 1,url('database/import'));
- 19. }
在这段函数中,首先判断参数path/dir是否存在,如果存在就导入数据备份文件,继续往下走,判断是否获取sumbmit、paths参数,遍历数组,接着删除数组中提交的文件目录。可以看到参数并未进行任何过滤或处理,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件。
0x02 漏洞利用
1、在网站根目录新建test目录。作为漏洞测试目录:
2、构造URL参数,可成功删除根目录下的test目录
3、当提交的参数paths[]=..\\..\\时,可删除整个网站根目录,如果继续往上遍历,将删除整个服务器文件,存在较大的威胁。
0x03 修复建议
1、对于要删除的文件,通过正则判断用户输入的参数的格式,看输入的格式是否合法。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。