在Java源代码字符串中隐藏Payload | PortSwigger研究
发现背景
我们最近发布了一个名为Bambdas的强大新功能,允许用户使用Java代码过滤Burp中的项目。这让我们思考:能否诱使用户运行一个看似无害但实际在本地机器上执行任意代码的Bambda?
关键技术细节
当在Bambda中使用以下代码时会发生什么?
|
|
如果你期待这只是一个简单的字符串赋值,那就错了。实际情况是:
- 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