H2 Database Console未授权访问漏洞封堵

背景

H2 Database Console未授权访问,默认情况下自动创建不存在的数据库,从而导致未授权访问。各种未授权访问的教程,但是它怎么封堵呢?

-ifExists

启动参数添加 -ifExists ,它的含义:

[-ifExists] Only existing databases may be opened (all servers)

应用出厂时先创建好数据库文件后,修改启动脚本,添加该参数:

dir=$(dirname "$0")
nohup java -cp "$dir/h2-2.x.xx.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Server -tcpAllowOthers -webAllowOthers -tcpPort -ifExists "$@" &

这样启动 h2 后首次访问时会因为 test 数据库不存在而无法连接:
在这里插入图片描述
只有输入正确的出厂数据库路径、帐号和密码,才能连接到数据库操作页面。

Preferences 未授权问题

上面只能封堵针对数据库操作的未授权访问,未登录时 Preferences 这个操作页面的 “shutdown” 按钮可以直接将 h2 服务停止,比前面的未授权更严重
在这里插入图片描述

解决办法是升级到 2.x 版本,它自带了控制台管理员密码 webAdminPassord 配置,必须输入密码才能进入可选项配置页面。

在这里插入图片描述

悬案

1.x 版本控制台的可选项配置还是存在未授权访问问题,要么禁用 console 工具,要么配置防火墙策略允许特定主机访问 console 控制台请求,否则未授权情况下直接 shutdown 服务的话,就很危险了。

2.224 最新版本里面设置了adminLogin 登录密码,但是它的值设置是什么呢?
按最新操作手册说明,这个配置的值应该是用 org.h2.server.web.WebServer.encodeAdminPassword(明文) 运行出来的一个 hash 值,但是我在配置文件里面设置密码的哈希值后,输入密码始终不正确。而关于 h2 数据库的资料又少的可怜,好在升级为 2.224 最新版本的话,就不存在可选项配置的未授权访问问题了。

如果要搞明白这个管理员密码到底是何方神圣,估计只有运行源码来分析了!

### edusrc未授权访问漏洞挖掘方法 在处理edusrc平台上的未授权访问漏洞时,理解其工作原理和技术细节至关重要。当面对登录界面时,虽然弱口令爆破是一种常见的攻击手段,但在实际操作中成功率较低[^1]。因此,转向探索系统的其他潜在弱点成为更有效的策略。 #### 探索API端点 对于Web应用程序而言,API端点往往是安全防护中的薄弱环节之一。开发者通常会基于功能需求创建多个API路径来实现不同业务逻辑,而这些路径往往遵循一定的命名规律。例如,“student”接口用于学生管理,则很可能也存在名为“teacher”的接口负责教师权限的操作[^2]。通过猜测或枚举类似的URL模式,可以找到隐藏的功能模块或者配置不当的服务入口。 #### 利用已知信息扩展测试范围 一旦成功获取到某个特定权限下的资源列表或其他内部数据结构后,应进一步分析该部分内容与其他组件之间的关联关系。比如,在上述案例中提到service接口泄露了大量敏感资料;此时不妨推测是否存在同级别的system或者其他相似名称的替代选项,并对其进行验证性请求尝试。这不仅有助于发现新的安全隐患,还能评估现有整改措施的有效性和全面性。 #### 绕过检测机制 值得注意的是,在某些情况下即使发现了疑似存在的风险点也可能受到诸如安恒EDR(终端威胁防御系统)、IP白名单等措施限制无法深入探究。针对这种情况可以从以下几个方面入手: - **研究目标环境特性**:了解所处网络架构特点以及部署的安全产品版本号等相关背景材料; - **寻找公开文档/源码库**:借助官方手册、第三方论坛甚至GitHub仓库内的开源项目作为参考资料指导后续动作规划; - **借鉴社区经验分享**:积极参与国内外知名信息安全交流群组讨论热点话题并学习他人总结归纳出来的方法论应用于实践当中去解决遇到的技术难题。 ```python import requests def test_unauthorized_access(base_url, endpoint_list): headers = {'User-Agent': 'Mozilla/5.0'} for endpoint in endpoint_list: url = f"{base_url}/{endpoint}" try: response = requests.get(url, headers=headers) if response.status_code == 200 and "error" not in response.text.lower(): print(f"[+] Potential unauthorized access found at {url}") except Exception as e: print(f"[-] Error occurred while testing {url}: {str(e)}") if __name__ == "__main__": base_urls = ["http://example.com/api"] endpoints_to_test = ["students", "teachers", "services", "systems"] for base in base_urls: test_unauthorized_access(base, endpoints_to_test) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值