Java中可以进行代码注入吗?

2022-09-03 00:29:56

如今,您可以阅读很多关于代码注入,漏洞利用,缓冲区,堆栈和堆溢出等的信息,从而导致注入和运行代码。我想知道这些东西中有什么与Java相关。

我知道,Java语言中没有指针。但是JVM不是在堆和/或堆栈中组织数据吗?我知道没有eval函数(就像在PHP中一样),所以你不能轻易地将输入用作Java代码。我不太确定字节码级别发生了什么。

我认为XSS是可能的,例如在Java EE应用程序中,当没有输入被过滤时。但这不更像是JavaScript注入,因为注入的代码在浏览器中运行,而不是在JVM中运行吗?

那么,哪些代码注入是可以使用java的,哪些是不能的呢?对于其他Java平台语言也是如此吗?

提前致谢。


答案 1

Java程序本身几乎不容易受到代码注入的影响。但是,所有支持应用程序的本机代码都容易受到所有不同类型的代码注入的攻击 - 这包括应用程序或其库中的JVM和所有本机代码部分。

此外,还有一些需要考虑的事项:

任何将java用作其他系统网关的东西都是可能的:

SQL 注入

XSS(最终只不过是JavaScript注入)

如果java程序本身就是某种类型的解释器/编译器,则可以将代码注入到解释型语言/编译程序中(这包括使用您的程序作为java编译器...

当然,如果您可以让java程序将包含代码(无论是本机,java还是其他东西)的文件写入磁盘,则可以通过其他方式(这可能是您的应用程序,操作系统或其他应用程序中的不同漏洞)来执行它 - 这不是直接代码注入,但效果非常相似。


答案 2

如果服务器应用程序在运行时创建字节码(例如,使用 BCELJavassist),并且此创建可能会受到用户输入的影响,则可以进行代码注入。

但是,如果您的应用程序不使用魔术(应该是所有应用程序的99%),则不可能。


推荐