Java Unicode转义字符串中的隐藏载荷技术解析

本文揭示了Java源代码中Unicode转义字符的独特处理机制,展示了攻击者如何利用\u0022等Unicode转义来隐藏恶意载荷,实现字符串提前终止和任意代码执行,为Java安全开发提供了重要警示。

Java源代码字符串中隐藏载荷的技术分析

在这篇文章中,我们将展示Java如何处理源代码字符串中的Unicode转义字符,这种方式可能会让你感到惊讶 - 以及如何滥用它们来隐藏恶意载荷。

我们最近发布了一个名为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转义编码整个语法!

我们在任何公开文档中都找不到这种技术的记录,但如果你喜欢这个技术,你可以在这篇论文中找到一系列相关的攻击方法。

请记住,Bambda允许任意代码执行,因此当使用来自不受信任来源的Bambda时,请确保在使用前对其进行验证!

相关标签: RCE、Java

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