Java代码审计之SpEL表达式注入
再来看看这个 filterSubscriptions 函数在那边挪用。从函数的挪用回溯追踪挪用链如下:
2. sendMessageToSubscribers 即发送动静的成果 回首一下整个流程,SpEL 表达式从 headers 中 selector 获取,即发送哀求时添加 selector 到哀求的 header 即可传入,然后天生 expression 工具传入 this.subscriptionRegistry,然后当发送动静的时辰,最终会直接从 this.subscriptionRegistry 取出并挪用 expression.getValue() 执行我们传入的 SpEL 表达式。 验证进程,在 expression.getValue() 这里打个断点,看看发送动静是否会拦截并查察挪用链是否如上述说明一样。 Bingo! 简朴总结一下 SpEL 表达式注入的说明思绪,可以先全局搜刮 org.springframework.expression.spel.standard, 或是 expression.getValue()、expression.setValue(),定位到详细裂痕代码,再说明传入的参数能不能操作,最后再追踪参数来历,看看是否可控。Spring Data Commons Remote Code Execution 的 SpEL 注入导致的代码执行同样可以用相同的思绪说明。 五、裂痕修复 SimpleEvaluationContext、StandardEvaluationContext 是 SpEL 提供的两个 EvaluationContext:
SimpleEvaluationContext 旨在仅支持 SpEL 说话语法的一个子集。它不包罗 Java 范例引用,结构函数和 bean 引用;以是最直接的修复方法是行使 SimpleEvaluationContext 替代 StandardEvaluationContext。 这是我小我私人进修代码审计进程中的小总结,也许逻辑性相对来说没那么严谨,可是小我私人认为这是一个较量普通易懂的说明要领,不喜勿喷。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |