首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中漏洞的利用

Java中漏洞的利用
EN

Security用户
提问于 2014-09-09 19:49:37
回答 4查看 5.9K关注 0票数 6

我不太熟悉Java,所以这可能是个愚蠢的问题。

在C程序中,我可以找到缓冲区溢出,或者可能是基于ROP的漏洞来运行自定义代码。它是如何在Java上下文中完成的?有可能吗?在Java中,字符串或其他数据类型都是有界的,因此不可能覆盖内存。那么ROP的攻击呢?

或者更笼统地说,Java程序的典型攻击矢量是什么?

EN

回答 4

Security用户

发布于 2014-09-10 15:49:30

您将非常幸运地找到这样一种情况,您可以通过Java中的简单编码错误直接执行代码。JVM实现中的错误可能允许通过良性代码破坏内存,但在最坏的情况下却是罕见的。

但是,即使在JRE (OpenJDK)中,也有一部分库是用C编写的,因此在与不受信任的数据一起使用时包含内存损坏漏洞。呈现恶意JPEG将是典型的示例。

有许多与内存无关的错误,如注入(HTML、SQL、LDAP、HTTP头等),但这些错误通常不会直接引导您执行远程代码。

一个非常常见的情况是,一个方便的库故意执行远程代码,而应用程序程序员却没有刻意地启用它。Java (5.0) 准则3-8 /注入-8:注意解释不可信的代码的安全编码准则中给出的示例包括:脚本API、LiveConnect、XSLT扩展、JavaBeans组件的长期持久性、JavaBeans、LDAP和某些JDBC/SQL实现。应用程序可能会故意加载移动代码,从而导致整个世界。

票数 6
EN

Security用户

发布于 2014-09-09 22:53:47

一种选择是利用JVM本身--可能会有导致实际虚拟机“中断”并在沙箱之外执行任意操作的java代码;虽然它们似乎依赖于向受害者发送一些java代码来执行(即在浏览器沙箱上下文中),而不是利用随机的java程序,但也存在这样的漏洞。

另一种选择是识别和滥用程序中的逻辑问题。在C漏洞攻击中,典型的场景是使用糟糕的边界检查作为获取与特定检查无关的完全未定义的行为(例如执行任意代码)的一种方式;但是,如果没有这种行为,一些糟糕的边界检查或逻辑问题可能会实现(无意中)原始代码中的代码路径,并执行您想要的操作。

当然,多层应用程序复杂性的所有乐趣都有可能的攻击矢量--如果java应用程序链接到数据库,那么SQL注入,等等。

票数 3
EN

Security用户

发布于 2014-09-09 20:41:29

简单的回答是“所有其他的错误”,但不包括利用原始内存缓冲区溢出造成的简单错误。在没有溢出缓冲区的情况下,内存可能会被错误地使用,还有很多其他方法。

例如,在java中可能被归类为缓冲区溢出问题的是,如果应用程序使用try/catch来拦截尝试的缓冲区溢出,并且由于捕获了一个缓冲区溢出,而绕过了一些重要的代码。你可以想象一个写得不好的“校验密码”函数,如果给出一个字符太多的密码,它就会返回“成功”。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/67075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档