可利用的Java功能

roo*_*ook 24 java security java-me java-ee

此问题类似于可利用的PHP函数.

受污染的数据来自用户,或者更具体地来说是攻击者.当受污染的变量达到接收器功能时,您就会有漏洞.例如,执行sql查询的函数是接收器,而GET/POST变量是污点源.

Java类库中的所有接收函数(对于任何Java风格)都是什么?我正在寻找引入漏洞或软件弱点的功能.我对远程执行代码漏洞特别感兴趣.是否存在整个类/库,其中包含黑客想要影响的功能恶劣?人们如何不小心制造危险的Java代码?

Sam*_*ivu 31

这是一个基于我对客户端Java安全性的个人研究的列表,并使用Eclipse IDE查看SecurityManager检查的方法.

ClassLoaders定义类(=任意java代码执行):

java.lang.ClassLoader.defineClass
java.net.URLClassLoader
Run Code Online (Sandbox Code Playgroud)

=代码执行

Java Beans Introspection可能会将ClassLoaders转移到从不受信任的来源加载类(例如,vuln-cve-2010-1622)

java.beans.Instrospector.getBeanInfo
Run Code Online (Sandbox Code Playgroud)

=代码执行

文件访问权限

java.io.File (constructor)
java.io.File.delete
java.io.File.renameTo
java.io.File.listFiles
java.io.File.list
Run Code Online (Sandbox Code Playgroud)

=删除/重命名文件,目录列表

文件流/阅读器类

java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter
java.io.RandomAccessFile
Run Code Online (Sandbox Code Playgroud)

=文件读/写访问权限

Java系统属性

System.setProperty
System.getProperties
System.getProperty
Run Code Online (Sandbox Code Playgroud)

=某些系统属性可能包含一些几乎敏感的信息,而某些系统属性可能会改变关键内容的执行,我没有示例,尽管

加载本机库

System.load
System.loadLibrary
Run Code Online (Sandbox Code Playgroud)

=任意代码执行

执行操作系统可执行文件

Runtime.exec
ProcessBuilder (constructor)
Run Code Online (Sandbox Code Playgroud)

生成本机系统输入事件

java.awt.Robot.keyPress/keyRelease
java.awt.Robot.mouseMove/mousePress/mouseRelease
Run Code Online (Sandbox Code Playgroud)

(可能很牵强,因为服务器可能甚至没有图形环境)

Java反射 - 访问任意(甚至私有)字段和方法

java.lang.Class.getDeclaredMethod
java.lang.Class.getDeclaredField
java.lang.reflection.Method.invoke
java.lang.reflection.Field.set
java.lang.reflection.Field.get
Run Code Online (Sandbox Code Playgroud)

=从披露敏感信息到最终代码执行,具体取决于具体情况

Java脚本引擎

javax.script.ScriptEngine.eval
Run Code Online (Sandbox Code Playgroud)

=任意代码执行


Cod*_*aos 8

代码执行漏洞:

  1. 私人反思,但受污染的数据以危险的方式到达那里并不常见
  2. 本机互操作代码,它不足以验证它的参数
  3. 反序列化器.可能是最危险的,因为您可能希望从不受信任的数据中反序列化.一些序列化程序相对安全,只使用公共构造函数/ setter,但其他序列化程序访问私有字段.如果没有类型白名单,它可以实例化任意类型并在它们上调用setter.
  4. 任何形式的IO,特别是文件
  5. 动态加载库.特别是使用相对路径.特别是相对于工作目录而不是可执行目录

(这是关于.net的,但我希望Java非常相似)

数据注入

然后是注入函数系列,通常可以通过不对字符串进行操作但使用专用库函数来防止.那些通常不会导致任意代码注入.

  1. html注入/ XSS(很大程度上是由一个自动转义输出并干净地分离转义和未转义字符串的视图引擎阻止的(可能使用不同的类型))
  2. SQL注入(由预准备语句阻止)
  3. 文件路径注入


Woo*_*Moo 7

我确信这个列表会随着我开始寻找真正的漏洞而增长:

  1. Spring类加载器

  2. 吞噬异常 - 正如已经指出的,吞咽异常可能不会直接导致剥削,但它可能导致不利用剥削.

  3. String[] commands = {args[0]};
    Runtime.getRuntime().exec(commands);

    我意识到这是一个相当简单的项目,但运行类似于上面的代码可以允许你传递这样的东西:&& del /如果在Windows或;rm -rf /*nix

人们制造危险的Java代码的最大方式就是懒惰.正如您所说,在运行之前没有清理用户输入.

  • @Rook我有一个关于Apache Tomcat的内容,但在供应商解决之前我不会在此发布. (2认同)