现在你可以读到很多关于代码注入,漏洞,缓冲区,堆栈和堆溢出等导致注入和运行代码的内容。我想知道这些东西中有哪些与Java相关。
我知道,Java语言中没有指针。但是JVM不是在堆和/或栈中组织数据吗?我知道没有eval函数(就像在PHP中一样),所以您不能轻易地将输入用作Java代码。我不太确定字节码级别发生了什么。
我认为XSS是可能的,例如在Java应用程序中,当没有过滤任何输入时。但这不是更像是JavaScript注入吗,因为注入的代码在浏览器中运行,而不是在JVM虚拟机中运行?
那么在java中哪些代码注入是可能的,哪些不是呢?其他Java平台语言也是这样吗?
提前谢谢。
发布于 2009-12-10 21:33:55
java程序本身几乎不容易受到代码注入的影响。然而,支持应用程序的所有本机代码都容易受到各种不同类型的代码注入的攻击--包括JVM和应用程序或其库中的所有本机代码部分。
此外,还有一些事情需要考虑:
使用java作为其他系统的网关的任何事情都是可能的:
SQL注入
XSS (最终不过是JavaScript注入)
如果java程序本身是某种解释器/编译器,那么可以将代码注入到解释语言/编译程序中(这包括将您的程序用作java编译器……)。
当然,如果你能让java程序把一个包含代码的文件写到磁盘上(不管是本机的、java的还是其他的),你也许可以通过其他方式(这可能是你的应用程序、操作系统或其他应用程序中的一个不同的漏洞)来执行它--这不是直接的代码注入,但在效果上非常相似。
发布于 2009-12-10 21:30:15
如果服务器应用程序在运行时创建字节码(例如,使用BCEL或Javassist),并且此创建可以受到用户输入的影响,则可以进行代码注入。
然而,如果你的应用程序不使用魔法(它应该占所有应用程序的99% ),这将是不可能的。
发布于 2016-12-13 07:16:07
有几种方法可以将Java代码注入到应用程序中,例如使用脚本API或动态JSP包含。
下面的代码允许用户将任意Javascript注入Java的脚本引擎。
import javax.script.*;
public class Example1 {
public static void main(String[] args) {
try {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
System.out.println(args[0]);
engine.eval("print('"+ args[0] + "')");
} catch(Exception e) {
e.printStackTrace();
}
}
}在这种情况下,攻击者决定注入在文件系统上创建文件的代码。
hallo'); var fImport = new JavaImporter(java.io.File); with(fImport) { var f = new File('new'); f.createNewFile(); } //查看owasp网站以了解更多示例
https://stackoverflow.com/questions/1880929
复制相似问题