Java Unicode转义隐藏Payload技术解析

本文详细介绍了Java源代码中Unicode转义字符的特殊处理机制,攻击者可以利用\u0022等转义序列在字符串中隐藏恶意代码,实现远程代码执行,并探讨了在Bambda环境中的实际利用场景。

在Java源代码字符串中隐藏Payload | PortSwigger研究

发现背景

我们最近发布了一个名为Bambdas的强大新功能,允许用户使用Java代码过滤Burp中的项目。这让我们思考:能否诱使用户运行一个看似无害但实际在本地机器上执行任意代码的Bambda?

关键技术细节

当在Bambda中使用以下代码时会发生什么?

1
var log4jpayload = "%24%7Bjndi:ldap://psres.net/\u0022;Runtime.getRuntime().exec(\u0022open -a calculator\u0022);//%7D";

如果你期待这只是一个简单的字符串赋值,那就错了。实际情况是:

  • Java编译器将Unicode编码的双引号(\u0022)视为实际的双引号并关闭字符串
  • 随后执行Runtime.getRuntime()以及通过编码字符串传递的命令
  • Java几乎允许使用Unicode转义对整个语法进行编码

技术影响

这种技术此前未见公开文档记载。Java的这种特性使得攻击者能够在看似正常的字符串中隐藏恶意代码,特别是在Bambda这种允许任意代码执行的环境中。

安全建议

由于Bambda支持任意代码执行,在使用来自不可信源的Bambda时,务必在使用前进行验证!

相关研究:如需了解更多相关攻击技术,可参考这篇论文


发布日期:2024年1月23日 15:00 UTC
更新日期:2024年1月24日 12:27 UTC
作者:Gareth Heyes(研究员)
原文链接:@garethheyes

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计