此问题与Exploitable PHP Functions类似。
受污染的数据来自用户,或者更具体地来说是攻击者。当受污染的变量达到接收器功能时,您就会有漏洞。例如,执行sql查询的函数是接收器,而GET / POST变量是污点源。
Java类库中的所有接收函数(适用于任何Java风格)都是什么?我正在寻找引入漏洞或software weakness的功能。我对远程执行代码漏洞特别感兴趣。是否存在整个类/库,其中包含黑客想要影响的功能恶劣?人们如何不小心制造危险的Java代码?
答案 0 :(得分:31)
这是一个基于我对客户端Java安全性的个人研究的列表,并使用Eclipse IDE查看SecurityManager检查的方法。
ClassLoaders定义类(=任意java代码执行):
java.lang.ClassLoader.defineClass
java.net.URLClassLoader
=代码执行
Java Beans Introspection可能会将ClassLoaders转移到来自不受信任来源的加载类(example 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
=任意代码执行
答案 1 :(得分:8)
代码执行漏洞:
(这是关于.net,但我希望Java非常相似)
数据注入
然后是注入函数系列,通常可以通过不对字符串进行操作但使用专用库函数来防止。这些通常不会导致任意代码注入。
答案 2 :(得分:7)
我确信这个列表会随着我开始寻找真正的漏洞而增长:
吞下的例外情况 - 正如已经指出的,吞食例外可能不会直接导致剥削,但它可能导致未发现剥削。
String[] commands = {args[0]};
Runtime.getRuntime().exec(commands);
&& del /
如果在Windows上或;rm -rf /
在* nix上人们制造危险的Java代码的最大方式就是懒惰。正如您所说,在运行之前没有清理用户输入。