Redis教程

Redis学习记录

本文主要是介绍Redis学习记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

redis入门

基础内容可以在菜鸟教程

redis实践

环境搭建

攻击机:kali redis4-5

靶机:Ubuntu redis4-5

apt install redis-server#安装即可

Ubuntu下

redis日志文件地址 /var/log/redis/redis-server.log

配置文件地址 /etc/redis/redis.conf

redis未授权访问

靶机配置

vim /etc/redis/redis.conf

image-20210928103808923

漏洞原理

Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。

漏洞复现

首先

sudo ufw status查看防火墙状态,可能会防止未知ip访问,这里要关掉,或者允许攻击机的IP访问。

然后,注释bind,修改protested-mode

image-20210928104219269

记得重启redis服务器

systemctl restart redis-server

攻击机访问成功

image-20210928104353600

如果不修改 redis.conf文件

访问失败

image-20210928104511742

redis写webshell

触发条件:

  • redis未授权访问
  • 用读写的权限
  • 知道web目录的路径

漏洞原理

类似mysql的into outfile写shell。即可通过redis在指定的web目录下写入一句话木马,用菜刀连接可达到控制服务器的目的。

漏洞复现

靶机启动redis服务

注意:这里需要sudo命令下启动redis,否则会因为权限不够,导致写shell失败

image-20210928150121958

靶机启动web服务

image-20210928150313471攻击机未授权访问后,写shell步骤

image-20210928150223008

查看web目录 ,发现写入的文件

image-20210928150522236

Apache服务访问shell文件,写shell成功

image-20210928150649995

利用计划任务反弹shell

漏洞原理

crontab是做计划任务的,启动的任务存放在/var/spool/cron中,利用Redis未授权漏洞,可以通过写入文件到系统计划任务目录 /var/spool/cron下来执行。

漏洞复现

由于靶机Ubuntu的环境问题,首先修改 /bin/sh指向 bash

image-20210928222833654

详情访问https://www.dazhuanlan.com/knight9001/topics/1061140

攻击机kali进行端口监听

image-20210928223103430

靶机sudo启动redis服务,攻击机写入文件

image-20210928225402659

通过本地文件查看,也确实写入了shell

![image-20210928225607690](/Users/a/Library/Application Support/typora-user-images/image-20210928225607690.png)

image-20210928225830625

听说由于Ubuntu编码问题,就无法反弹shell

CentOS 作为靶机最佳

写 ssh-keygen 公钥登录服务器

漏洞原理

SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。

所谓密钥验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:

(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端; (2)客户端发起登录请求,发送自己的相关信息; (3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端; (4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证; (5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

触发条件:

  • redis未授权访问
  • 服务器开启了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

漏洞复现

靶机开启SSH

sudo service ssh start

攻击机生成公钥,全部默认

image-20210928232154045

找到存放key的位置

image-20210928232306568

这里出现了靶机Ubuntu找不到 .ssh/文件的情况,实际需要靶机使用ssh默认生成个公钥,就会产生 .ssh

image-20210928233316668

写入攻击机的公钥

image-20210928233759461

本地查看写入认证文件

image-20210928233929645通过攻击机ssh连接成功

image-20210928233709648

Redis主从复制RCE

漏洞原理

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。在redis 4.x之后,通过外部拓展可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

触发条件

  • Redis 版本(4.x~5.0.5)(新增模块功能,可以通过C语言并编译出恶意.so文件)

  • redis弱密码或者无密码

  • root启动redis

漏洞复现

首先设置主从模式

image-20210929151822336

选择使用Ubuntu为主机,kali为从机,所以主机只能读,从机只能写

尝试用主机执行写操作,失败

image-20210929151949924

实现从机写,主机读操作

image-20210929152059328

image-20210929152128017

使用工具,反弹shell即可

redis-rogue-server工具下载地址:https://github.com/n0b0dyCN/redis-rogue-server

该工具的原理就是首先创建一个恶意的Redis服务器作为Redis主机(master),该Redis主机能够回应其他连接他的Redis从机的响应。有了恶意的Redis主机之后,就会远程连接目标Redis服务器,通过 slaveof 命令将目标Redis服务器设置为我们恶意Redis的Redis从机(slaver)。然后将恶意Redis主机上的exp同步到Reids从机上,并将dbfilename设置为exp.so。最后再控制Redis从机(slaver)加载模块执行系统命令即可。

该工具无法对Redis密码进行Redis认证,也就是说该工具只适合目标存在Redis未授权访问漏洞时使用。如果存在密码可以使用下面这个工具。

Awsome-Redis-Rogue-Server工具下载地址:https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server

Redis主从复制例题

[网鼎杯 2020 玄武组]SSRFMe

https://www.freebuf.com/articles/network/260636.html

https://blog.csdn.net/cjdgg/article/details/119921735?

https://blog.csdn.net/qq_41891666/article/details/107103116

GKCTF-ezweb

  • https://blog.csdn.net/qq_45691294/article/details/109031354?

更多redis内容可以参考

https://www.cnblogs.com/W4nder/p/12960596.html

浅析Redis中SSRF的利用

https://www.cnblogs.com/wjrblogs/p/14456190.html

本文参考

https://www.freebuf.com/articles/web/249238.html

https://www.freebuf.com/articles/web/289231.html

这篇关于Redis学习记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!