IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    某小型CMS漏洞复现审计

    dingjiacan@antvsion.com发表于 2024-12-18 08:27:41
    love 0

    SQL注入

    漏洞复现:

    登陆后台,点击页面删除按钮,抓包:

    rid参数存在sql注入,放入sqlmap检测成功:

    代码分析:

    Ctrl+Shift+F检索路由:

    定位具体代码,为删除功能:

    发现deleteByIds调用了传参rid,跟进:

    发现进入Dao层,此处依旧调用的deleteByIds,于是找ICommonDao接口实现类:

    定位到该类,发现以ids参数接受原先用户传入的rid参数,并在new一个sql对象后,直接将ids参数进行拼接,并通过原生jdbc执行返回结果。



    模板注入

    内容管理-文件管理-themes-flatweb-about.html,选择编辑,插入payload:

    <#assignvalue="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

    访问首页,点击关与我们:

    执行命令,弹出计算机:

    代码分析:

    配置文件存在freemark

    文件上传

    漏洞复现:

    这个CMS感觉上传文件路径不是很好找,所以上传时先找个合适的目录再点击上传文件。

    文件管理处点击admin进入目录:

    再点击文件上传:

    通过上传jsp马,不过需要以jspx或者jspf后缀绕过上传。

    代码分析:

    上传时抓包,根据路由全局搜索:

    定位到具体代码段:

    用filePath参数接受path参数与file参数拼接,再从filePth参数中取出文件名赋值给fname参数。

    跟进getSuffix:

    发现只是以简单点来获取后缀。

    检测是否为jsp文件后,如果不为则进入为空判断,并以FileOutputStream与write直接上传写入。

    任意文件删除

    漏洞复现:

    上传jsp马后,点击右方删除文件,抓包。

    将下方数据包改为admin上级目录,删除我先前上传但没找到路径的test.jspx文件,删除成功:

    代码分析:

    根据数据包在IDEA全局搜索,定位到delete代码段:

    该方法接收三个参数:path、name 和 data,这些参数通过 \@RequestParam注解从请求中提取,并进行简单拼接,赋值给file对象,此时file对象代表实际的文件名称。

    跟进delete方法:

    发现对传入的path参数进行了检查,继续跟进:

    发现仅仅采用java自带的类java.security.AccessController下的checkPermission(Permissionperm)静态方法校验权限。

    如果权限满足便直接通过fs.delete()方法删除,造成任意文件删除漏洞。

      



沪ICP备19023445号-2号
友情链接