【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

时间:2021-05-08 17:36:20

 

0x00 环境准备

ukcms官网:https://www.ukcms.com/

程序源码下载:http://down.ukcms.com/down.php?v=1.1.0

测试网站首页:

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

0x01 代码分析

1、文件位置: /application/admin/controller/Filemanage.php 第93-208行中:

  1. private function saveFile($dir = '', $from = '', $module = '', $thumb = 0, $thumbsize = '', $thumbtype = '', $watermark = 1, $sizelimit = -1, $extlimit = '') {
  2. if (!function_exists("finfo_open")) {
  3. switch ($from) {
  4. case 'ueditor':
  5. return json(['state' => '检测到环境未开启php_fileinfo拓展']);
  6. default:
  7. return json([
  8. 'status' => 0,
  9. 'info' => '检测到环境未开启php_fileinfo拓展'
  10. 10.                 ]);
  11. 11.         }
  12. 12.     }
  13. 13.     // 附件大小限制
  14. 14.     // 附件类型限制
  15. 15.     // 获取附件数据
  16. 16.     // 判断附件是否已存在
  17. 17.     // 判断附件大小是否超过限制
  18. 18.     // 判断附件格式是否符合
  19. 19.     $file_name = $file->getInfo('name');
  20. 20.     $file_ext = strtolower(substr($file_name, strrpos($file_name, '.') + 1));
  21. 21.     $error_msg = '';
  22. 22.     if ($ext_limit == '') {
  23. 23.         $error_msg = '获取文件后缀限制信息失败!';
  24. 24.     }
  25. 25.     try {
  26. 26.         $fileMine = $file->getMime();
  27. 27.     } catch (\Exception $ex) {
  28. 28.         $error_msg = $ex->getMessage();
  29. 29.     }
  30. 30.     if ($fileMine == 'text/x-php' || $fileMine == 'text/html') {
  31. 31.         $error_msg = '禁止上传非法文件!';
  32. 32.     }
  33. 33.     if (!in_array($file_ext, $ext_limit)) {
  34. 34.         $error_msg = '附件类型不正确!';
  35. 35.     }

 

这段代码中saveFile函数经过一些大小、类型限制,到最后进行判断附件格式是否符合存在问题。注意看红色代码部分,首先获取文件名和后缀名,判断后缀是否为空,然后对文件头MIME_TYPE字段校验,这里客户端可通过抓包伪造MIME_TYPE类型,导致绕过,最后的附件类型限制是客户端参数可控的。

综上,程序在实现上对文件上传类型过滤不严,导致可以被绕过,通过该漏洞上传脚本木马,获取服务器控制权限。

0x02 漏洞利用

A、        如何登陆后台

思路1通过默认后台入口及默认账号密码进行登录。

程序在安装过程中,自动默认账号密码,管理员要在后台进行更改,很大的几率存在弱口令情况。

后台入口:admin.php

后台默认账户/密码:admin/123456

思路2通过爆破备份文件路径,获取数据库备份文件。

数据库备份文件格式:\data\db\20180119-214910-1.sql.gz,以时间戳为命名方式,存在被爆破的风险,通过爆破备份文件路径,获取数据库敏感信息。

B、文件上传漏洞利用

1、登录后台—系统参数—参数设置—上传,首先在允许上传的图片后缀添加PHP:

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

2、此时如果直接上传php文件,还是会被提示“禁止上传非法文件”:

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

3、如何绕过MIME_TYPE的检测呢?上传一张包含有一句话木马的图片,抓包,修改文件为3.php,然后上传,最后点击确认修改,保存文件到服务器。

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

4、通过右键查看图片文件路径,访问php文件,执行脚本代码

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

5、通过菜刀连接,获取网站服务器控制权限。

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

0x03 修复建议

1、通过白名单限制上传文件后缀

2、禁止上传目录脚本执行权限。

最后

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

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析