067-Web攻防-Java安全&JNDI项目&审计源码&工具箱等
067-Web攻防-Java安全&JNDI项目&审计源码&工具箱等
知识点:
1、Java安全-RCE执行-5大类函数调用
2、Java安全-JNDI注入-RMI&LDAP&高版本
3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j
Java安全-RCE执行-5大类
白盒审计Java中代码执行的类:
- Groovy
- RuntimeExec
- ProcessImpl
- ProcessBuilder
- ScriptEngineManager
检测:(大部分白盒)
黑盒看URL的参数名和参数值
白盒看类函数名和可控变量
Groovy
1 | @GetMapping("/groovy") |
RuntimeExec
Process proc = Runtime.getRuntime().exec(cmd); 这句代码直接将用户传入的 `cmd` 参数,作为系统命令执行。* 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
* <img src="/img/image-20250628134416471.png" alt="image-20250628134416471" style="zoom:50%;" />
### ProcessImpl
* 这里通过**反射调用了 JDK 内部的私有类 `ProcessImpl` 的 `start()` 方法**,本质上是调用系统命令。用户传入的 `cmd` 字符串直接作为参数执行,**且没有任何验证或限制**。
* ```
Class<?> clazz = Class.forName("java.lang.ProcessImpl");
Method method = clazz.getDeclaredMethod("start", String[].class, Map.class, String.class, ProcessBuilder.Redirect[].class, boolean.class);
method.setAccessible(true);
Process e = (Process) method.invoke(null, new String[]{cmd}, null, null, null, false);
ProcessBuilder
这个 Controller 实现了一个 “根据用户输入的 IP 进行 ping 操作” 的功能。
String[] cmdList = {"cmd", "/c", "ping -n 1 " + ip}; ProcessBuilder pb = new ProcessBuilder(cmdList);
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 0xMouise!







