可利用的 Java 函数 [已关闭]

2022-09-01 18:36:01

这个问题类似于可利用的PHP函数

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

Java类库中的所有接收器函数是什么(对于任何风格的Java)?我正在寻找引入漏洞或软件弱点的功能。我对远程执行代码漏洞特别感兴趣。是否有整个类/库包含黑客想要影响的令人讨厌的功能?人们如何意外地制作危险的Java代码?


答案 1

以下是我个人对客户端Java安全性的研究的列表,并使用Eclipse IDE查看SecurityManager检查哪些方法。

类加载器定义类(=任意 java 代码执行)

java.lang.ClassLoader.defineClass
java.net.URLClassLoader

= 代码执行

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

java.beans.Instrospector.getBeanInfo

= 代码执行

文件访问

java.io.File (constructor)
java.io.File.delete
java.io.File.renameTo
java.io.File.listFiles
java.io.File.list

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

文件流/读取器类

java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter
java.io.RandomAccessFile

=文件读/写访问

Java 系统属性

System.setProperty
System.getProperties
System.getProperty

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

加载本机库

System.load
System.loadLibrary

= 任意代码执行

执行操作系统可执行文件

Runtime.exec
ProcessBuilder (constructor)

生成本机系统输入事件

java.awt.Robot.keyPress/keyRelease
java.awt.Robot.mouseMove/mousePress/mouseRelease

(也许是牵强附会的,因为服务器甚至可能没有图形环境)

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

java.lang.Class.getDeclaredMethod
java.lang.Class.getDeclaredField
java.lang.reflection.Method.invoke
java.lang.reflection.Field.set
java.lang.reflection.Field.get

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

Java 脚本引擎

javax.script.ScriptEngine.eval

=任意代码执行


答案 2

代码执行漏洞:

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

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

数据注入

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

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