• 华为云云耀云服务器L实例评测|认识redis未授权访问漏洞 & 漏洞的部分复现 & 设置连接密码 & redis其他命令学习


    在这里插入图片描述

    前言

    最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到过MySQL数据库被攻击的情况,数据丢失,还好我有几份备份,没有造成太大的损失。昨天收到华为云的邮箱提醒,我的redis数据库没有设置密码,也就是说只要知道我服务器的ip以及redis的端口就能连上我的redis数据库。我说怎么我的redis里面的数据总是会莫名消失。。。

    本篇博客介绍redis连接密码设置以保证redis缓存数据库的安全性,以及查看redis数据库相关情况的命令。

    在这里插入图片描述

    其他相关的华为云云耀云服务器L实例评测文章列表如下:

    在这里插入图片描述

    引出


    1.redis漏洞—轻微:攻击者知道ip+端口就可以访问redis,所以redis的数据会被泄露,另外,攻击者可以执行flushall命令来清空所有数据;
    2.redis漏洞—严重:通过eval命令来执行lua脚本;
    3.redis漏洞—危险:如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登陆受害服务器;

    在这里插入图片描述

    一、redis允许任何人访问的风险

    1.认识redis未授权访问漏洞

    Redis未授权访问漏洞是指,如果Redis服务器没有采取相应的安全策略,如添加防火墙规则阻止非信任来源的IP访问,那么未经授权的用户就可以直接访问和操作Redis服务。

    这个漏洞产生的原因主要是Redis默认绑定在0.0.0.0:6379,并未开启认证。所以如果攻击者可以访问目标服务器,那么他们无需授权就可以访问Redis服务,甚至可以读取Redis的数据。

    如果一个系统存在这个漏洞,攻击者可能会利用该漏洞进行恶意操作。比如,攻击者可以利用Redis提供的config命令,进行写文件操作,将ssh公钥写入目标服务器的/root/.ssh文件夹中的authorized_keys文件,从而利用ssh服务登录目标服务器。

    在我之前的redis设置中,(1)允许任何ip访问;(2)免密码登陆redis服务;因此存在较大风险。

    bind 允许任何ip访问

    在这里插入图片描述

    保护模式关闭

    在这里插入图片描述

    2.漏洞的危害

    (1)轻微:攻击者知道ip+端口就可以访问redis,所以redis的数据会被泄露,另外,攻击者可以执行flushall命令来清空所有数据;

    * FLUSHALL [ASYNC | SYNC] 
    * 功能:删除所有数据;
    * Delete all the keys of all the existing databases
    
    • 1
    • 2
    • 3

    (2)严重:通过eval命令来执行lua脚本;

    * EVAL script numkeys [key [key ...]] [arg [arg ...]]
    * 功能:执行lua脚本;
    * Invoke the execution of a server-side Lua script.
    
    • 1
    • 2
    • 3

    (3)危险:如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登陆受害服务器;

    https://www.zoomeye.org/ 用这个网址搜索结果如下:

    在这里插入图片描述

    redis漏洞

    在这里插入图片描述

    二、漏洞的复现

    1.数据泄密+flush删库跑路

    在windows中安装redis的以cmd的方式运行redis-cli客户端

    redis通过监听一个TCP端口或socket的方式接收来自客户端的连接,
    当与客户端建立连接后,redis内部会进行如下操作:

    • (1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型;
    • (2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;
    • (3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。

    在这里插入图片描述

    启动一下之前搭的从,端口6380,在windows上连接,数据泄密,然后flushall删库跑路

    在这里插入图片描述

    D:\Myprogram\redis>redis-cli -h 124.70.138.34 -p 6380
    124.70.138.34:6380> keys *
    1) "backup3"
    2) "backup4"
    3) "backup2"
    4) "backup1"
    124.70.138.34:6380> flushall
    (error) READONLY You can't write against a read only replica.
    124.70.138.34:6380> slaveof no one
    OK
    124.70.138.34:6380> flushall
    OK
    124.70.138.34:6380> keys *
    (empty list or set)
    124.70.138.34:6380> set pet 123
    OK
    124.70.138.34:6380> keys *
    1) "pet"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    通过上述操作,从变成了主,黑白颠倒

    在这里插入图片描述

    三、漏洞的解决

    1.数据泄密的初步解决—加连接密码

    在redis.cnf中设置连接redis数据库的密码

    在这里插入图片描述

    root@hcss-ecs-52b8:~# docker exec -it redis_6379 bash
    root@706d04b2ea4d:/data# redis-cli
    127.0.0.1:6379> keys *
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth 设置的密码
    OK
    127.0.0.1:6379> keys *
    1) "backup1"
    2) "backup3"
    3) "jwt1"
    4) "backup4"
    5) "backup2"
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) 设置的密码
    127.0.0.1:6379> 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    四、redis的其他命令学习

    1.database的设置和切换

    在redis.cnf中设置,databases参数,默认是16个数据库

    在这里插入图片描述

    进入redis-cli客户端后利用select 3进行数据库切换

    在这里插入图片描述

    用config get databases可以获得配置的参数

    在这里插入图片描述

    [root@localhost ~]# docker exec -it redis_6379 bash
    root@5d04e3abf91f:/data# redis-cli
    127.0.0.1:6379> keys *
     1) "book"
     2) "weather"
     3) "stu"
     4) "usernames"
     5) "tom_bank"
     6) "dress"
     7) "peter"
     8) "username"
     9) "goods"
    10) "mycar"
    127.0.0.1:6379> select 3
    OK
    127.0.0.1:6379[3]> keys *
    (empty array)
    127.0.0.1:6379[3]> config get databases
    1) "databases"
    2) "16"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    RedisDesktopManager软件连接时,在超出索引自动退出

    在这里插入图片描述

    2.client 相关命令

    • CLIENT LIST获取客户端列表
    • CLIENT SETNAME 设置当前连接点redis的名称
    • CLIENT GETNAME 查看当前连接的名称
    • CLIENT KILL ip:port 杀死指定连接

    在这里插入图片描述

    127.0.0.1:6379> info clients
    # Clients
    connected_clients:1
    cluster_connections:0
    maxclients:10000
    client_recent_max_input_buffer:8
    client_recent_max_output_buffer:0
    blocked_clients:0
    tracking_clients:0
    clients_in_timeout_table:0
    total_blocking_keys:0
    total_blocking_keys_on_nokey:0
    127.0.0.1:6379> config get maxclients
    1) "maxclients"
    2) "10000"
    127.0.0.1:6379> CLIENT LIST
    id=12 addr=127.0.0.1:44442 laddr=127.0.0.1:6379 fd=8 name= age=1123 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22426 events=r cmd=client|list user=default redir=-1 resp=2 lib-name= lib-ver=
    127.0.0.1:6379> CLIENT LIST
    id=12 addr=127.0.0.1:44442 laddr=127.0.0.1:6379 fd=8 name= age=2903 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22426 events=r cmd=client|list user=default redir=-1 resp=2 lib-name= lib-ver=
    id=47 addr=112.21.24.25:19880 laddr=172.18.12.79:6379 fd=9 name= age=604 idle=447 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=1928 events=r cmd=setex user=default redir=-1 resp=3 lib-name= lib-ver=
    127.0.0.1:6379> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    总结

    1.redis漏洞—轻微:攻击者知道ip+端口就可以访问redis,所以redis的数据会被泄露,另外,攻击者可以执行flushall命令来清空所有数据;
    2.redis漏洞—严重:通过eval命令来执行lua脚本;
    3.redis漏洞—危险:如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登陆受害服务器;

  • 相关阅读:
    【程序员必备的十个网站推荐】
    【Java】异常
    Mysql中完整性约束语法问题
    matlab查找符号表达式中的符号变量
    wget用法随笔
    打exit_hook,如何找exit_hook的偏移
    windows 开启ssh服务器
    融云云盘,不止于存储
    jQuery实现下拉菜单
    javaEE幼儿园学生管理系统
  • 原文地址:https://blog.csdn.net/Pireley/article/details/132918794