0x00 环境准备

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

程序源码下载:http://down.ukcms.com/down.php?v=1.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:

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

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

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

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

0x03 修复建议

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

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

最后

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

【代码审计】UKCMS_v1.1.0 文件上传漏洞分析的更多相关文章

  1. PHPcms v9.6.0 文件上传漏洞

    title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...

  2. 1.5 webshell文件上传漏洞分析溯源(1~4)

    webshell文件上传漏洞分析溯源(第一题) 我们先来看基础页面: 先上传1.php ---->   ,好吧意料之中 上传1.png  ---->   我们查看页面元素 -----> ...

  3. 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

      0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...

  4. 【代码审计】QYKCMS_v4.3.2 任意文件上传漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  5. 【代码审计】BootCMS v1.1.3 文件上传漏洞分析

      0x00 环境准备 BootCMS官网:http://www.kilofox.net 网站源码版本:BootCMS v1.1.3  发布日期:2016年10月17日 程序源码下载:http://w ...

  6. 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  7. 【代码审计】XYHCMS V3.5文件上传漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  8. UEditor编辑器两个版本任意文件上传漏洞分析

    0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...

  9. [转]UEditor编辑器两个版本任意文件上传漏洞分析

    0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...

随机推荐

  1. matlab std函数 用法及实例

    MATLAB常常用到std函数来进行标准差计算,下面我就通过实例介绍一下 matlab std函数怎么用. 1. std函数是用来计算标准偏差的一个函数,由于其有不同的参数,我们就用下面的例子进行介绍 ...

  2. Check which .NET Framework version is installed

    his article will help you to know which .NET Framework version is installed from command line. Check ...

  3. Mac使用git/github小结

    介绍 git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度快 2. github是一个git项目托管网站 注册地 ...

  4. Opencv-Python:图像尺寸、图像的读取、显示、保存与复制

    Opencv-Python:图像尺寸.图像的读取.显示.保存与复制 原创 2017年11月23日 21:30:49 4440 在使用opencv的方法时,首先必须导入opencv包.新的opencv导 ...

  5. 自定义python web框架

    -- Bootstrap http://www.bootcss.com/ -- Font Awesome http://fontawesome.io/ -- bxslider http://bxsli ...

  6. 【转】JS对Cookie的读写删除

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...

  7. Java如何使用finally块来捕捉异常?

    在Java编程中,如何使用finally块来捕捉异常? 此示例显示如何使用finally块来通过使用e.getMessage()捕获运行时异常(Illegalargumentexception). p ...

  8. Java 訪问权限控制:你真的了解 protected keyword吗?

    摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...

  9. QStandardItemModel角色控制及QTreeView添加不同的右键菜单

    http://blog.csdn.net/czyt1988/article/details/26018513

  10. at 命令

    每天什么时候执形at 12:00 /every:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday shutdown -r