• 某远未授权访问分析


    简介

    某远OA是一套办公协同软件。近日,阿里云应急响应中心捕获到多个利用致远OA文件上传与权限绕过漏洞的利用样本。由于某远OA旧版本某些接口存在未授权访问,以及部分函数存在过滤不足,攻击者通过构造恶意请求,可在无需登录的情况下上传恶意脚本文件,从而控制服务器。某远OA官方已针对该漏洞提供补丁,漏洞利用细节暂未公开。

    首先我们可以看出,这首先是一个未授权访问漏洞,再结合任意文件上传漏洞的利用。

    当然,这个非授权访问漏洞比较精彩,所以先分析这个洞。

    补丁下载

    某远oa的补丁是可以在官网下载的,当然,都是2020年10月补丁,可能是某里云搞错了。为啥突然诈尸一样更新了呢

    某远安装包

    百度一下破解版,只能这样。

    补丁分析

    首先我们分析补丁都改动了什么。这个才是重点

    com.seeyon.ctp.common.spring.CTPHandlerInterceptor

    CTPHandlerInterceptor这个东西,我们可以类比为spring版的filter,针对某些请求做过滤。我们可以看到,如果url出现"./", ";", ".#",则直接拦截请求。那么我们分析一下请求流程
    CTPHandlerInterceptor首先判断是否为ajax请求,也就是url是否包含ajax.do。

                boolean isAjax = "/ajax.do".equals(uri);
                String url = uri;
                String queryStr = request.getQueryString();
                if (queryStr != null) {
                    url = uri + "?" + queryStr;
                }
    
                String ignoreUrl = url;
                if (isAjax) {
                    String serviceName = request.getParameter("managerName");
                    String methodName = request.getParameter("managerMethod");
                    ignoreUrl = serviceName + "." + methodName;
                }
    

    记住ignoreUrl这个变量,这个变量随后就要分析

     if (!needlessUrl && !User.isIgnoreUrl(ignoreUrl, request, response)) {
                    boolean state = this.checkSessionPre(request, response, handler.getClass().getCanonicalName(), isAjax);
                    if (!state) {
                        return state;
                    }
    
                    User.validateResource(url, true);
                }
    

    User.isIgnoreUrl方法的作用主要是根据ignoreUrl是否需要重定向用户至登录页面。当然,部分ajax请求是不需要登录的,这也就给我们造成可乘之机。下面是isIgnoreUrl的简化代码
    com.seeyon.ctp.common.authenticate.domain.User#isIgnoreUrl

    我们直接分析ignoreUrl这个列表是从哪里生成的即可。

    也就是说,只要我们的ignoreUrl为图中的内容,就可以绕过登录。

    看到这里,再结合上面补丁diff的内容,是不是就明白这是什么漏洞了。

    这个漏洞其实就是绕过登录,访问被保护的接口,当然这里包括但不限于文件上传接口。所以官方直接就把未授权访问这个洞修复了。你可以把这个类比为weblogic的未授权访问,漏洞成因其实都是类似的

    所以分享一个网上的例子,也就是未授权访问结合任意文件上传的getshell

    Poc

    /seeyon/autoinstall.do.css/..;/ajax.do?method=ajaxAction&managerName=formulaManager&requestCompress=gzip
    

  • 相关阅读:
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    [PHP类] 分享一个强大的HTTP访问类(可做采集)
    php程序检测页面是否被百度收录
    php文章相似度计算 不用similar_text()函数
    php实现天干地支计算器示例 php算命程序
    Nginx 1.5.2 + PHP 5.5.1 + MySQL 5.6.10 在 CentOS 下的编译安装
    call和apply实现的继承
    Html语义化标签
  • 原文地址:https://www.cnblogs.com/potatsoSec/p/14253816.html
Copyright © 2020-2023  润新知