三十8、SSRF漏洞進階實踐-攻擊內網Redis

經過gopher協議攻擊Redis,若是內網中的Redis存在未受權訪問漏洞,當Redis服務以root權限運行時,利用gopher協議攻擊內網中的Redis,經過寫入定時任務能夠實現反彈shell。
預備知識

1.   SSRF簡介html

      SSRF(Server-Side Request Forgery,服務端請求僞造),是攻擊者讓服務端發起構造的指定請求連接形成的漏洞。python

 

      因爲存在防火牆的防禦,致使攻擊者沒法直接入侵內網;這時攻擊者能夠以服務器爲跳板發起一些網絡請求,從而攻擊內網的應用及獲取內網數據。linux

      大都是因爲服務端提供了從其餘服務器獲取數據的功能,好比使用戶從指定的URL web應用獲取圖片、下載文件、讀取文件內容等。但又沒有對目標地址作嚴格過濾與限制,致使攻擊者能夠傳入任意的地址來讓後端服務器對其發送請求,並返回對該目標地址請求的數據。web

      最多見的例子:攻擊者傳入一個未經驗證的URL,後端代碼直接請求這個URL,就會形成SSRF漏洞。redis

2.   SSRF的類型shell

       1)顯示對攻擊者的響應(basic):在服務器獲取攻擊者要求的URL後,把響應發送回攻擊者。數據庫

       2)不顯示響應(blind):在服務器獲取攻擊者要求的URL後,不會把響應內容發送給攻擊者,須要經過查看服務器日誌判斷是否存在服務端請求僞造漏洞。後端

3.    拓展攻擊面瀏覽器

       結合gopher協議攻擊內網FTP、Telnet、Redis、FastCGI、Memcache,也能夠進行get、post請求。安全

4.    Redis簡介:https://redis.io/topics/protocol

5.    Redis相關實驗:Redis數據庫安全實踐

實驗目的

經過該實驗瞭解SSRF漏洞的基礎知識及進階實踐。

實驗環境

操做系統:

CentOS:SSRF漏洞環境 + 模擬內網Redis服務;ip:10.1.1.100

Kali Linux:Redis服務 + 漏洞利用;ip:10.1.1.200

輔助工具:Mozilla Firefox、burpsuite

源碼請在實驗機內下載使用:http://tools.hetianlab.com/tools/T039.zip

實驗步驟一

咱們的任務分爲3個部分:

1.環境部署與Blind SSRF:經過觀察響應時間和響應狀態判斷指定端口是否打開。

2.CentOS機器開啓Redis服務,kali機器寫定時任務到CentOS機器中。

3.kali機器經過gopher協議攻擊CentOS機器Redis。

 

任務描述:搭建SSRF漏洞環境,瞭解Blind SSRF經過觀察響應時間和響應狀態判斷指定端口是否打開。

1.   CentOS機器中進行SSRF漏洞環境搭建,詳見:SSRF漏洞分析與實踐

2.   Kali機器用瀏覽器訪問 http://10.1.1.100/ssrf.html檢測環境是否搭建成功:

      

 

3.   火狐瀏覽器配置代理:瀏覽器搜索框輸入 about:preferences#general 進入配置選項,下拉到頁面最後,點擊settings進入network proxy選項,選擇Manual proxy configuration,輸入HTTP proxy爲127.0.0.1,端口port爲8080,點擊ok確認退出

      

      

      打開linux終端輸入burpsuite,便可打開burpsuite抓包

      

4.   開啓抓包,在‘無回顯的SSRF’處輸入 http://127.0.0.1:22,點擊‘TEST IT’後,右鍵選擇Send to Repeater發送到重放模塊(快捷鍵 Ctrl+R)

      

      

 

      點擊‘go’以後Response很快響應,表示CentOS機器22端口開啓。

5.   將IP改成10.1.1.12,從新點擊‘go’觀察Response的反應:

      

      

 

 

      發現Response響應了一段時間纔有結果,表示10.1.1.12的IP地址未開啓22端口。

      關於burpsuite詳細操做,詳見:Burpsuite簡介

實驗步驟二

任務描述:CentOS機器開啓Redis服務,kali機器寫定時任務到CentOS機器中。

1.  Redis服務安裝時默認綁定IP爲127.0.0.1,此處不須要設置,查看Redis配置文件redis.conf:

      # find  /  -name  redis.conf

      # vi  /root/redis-5.0.4/redis.conf

      

 

2.   CentOS機器開啓Redis服務:

      # cd  /usr/local/bin

      # ./redis-server  /root/redis-5.0.4/redis.conf

      

3.   查看kali機器的Redis版本:

      # cd  /usr/redis/

      # ./redis-server  –v

      

 

4.   啓動Redis服務器:

      # ./redis-server

      

 

5.   另外開啓一個終端,測試啓動:

      # cd  /usr/redis/

      # ./redis-cli  ping

      

 

      啓動成功。

6.   在kali機器寫一個redis反彈shell的bash腳本:

      # vi  shell.sh

      

 

      保存退出;

      在Redis的第0個數據庫中添加key爲1,名爲root的定時任務,value字段最後會多一個n是由於echo重定向最後會自帶一個換行符,位置爲CentOS機器的/var/spool/cron/,10.1.1.200爲獲取反彈shell的本地IP地址,666爲反彈shell的監聽端口,可隨意設置。

實驗步驟三

任務描述:經過gopher協議攻擊Redis,若是內網中的Redis存在未受權訪問漏洞,當Redis服務以root權限運行時,利用gopher協議攻擊內網中的Redis,經過寫入定時任務能夠實現反彈shell。

1.   Kali機器另外開啓一個終端,使用socat進行端口轉發,獲取Redis攻擊的TCP數據包:

      # socat  -v tcp-listen:2333,fork  tcp-connect:127.0.0.1:6379

      將本地的2333端口轉發到Redis服務器的6379端口,訪問本地的2333端口實際上是訪問Redis服務器的6379端口。

      

 

2.   執行腳本:#bash  shell.sh  127.0.0.1  2333

      

 

      捕獲到的數據:

      

 

3.   利用腳本將數據轉換成適配於gopher協議的URL,轉換規則:

      1)若是第一個字符是 > 或者 < ,則丟棄該行字符串,表示請求和返回的時間;

      2)若是前三個字符是 +OK,則丟棄該行字符串,表示返回的字符串;

      3)將\r字符替換成 %0d%0a;

      4)將空白行替換成 %0a。

4.   下載實驗所需腳本:# wget http://tools.hetianlab.com/tools/T039.zip

5.   先將socat獲取的數據保存爲socat.log文件,而後執行腳本進行數據轉換:

      # vi  socat.log

      將socat捕獲的數據粘貼到socat.log中(終端沒法複製粘貼能夠在文件管理器中進行操做):

      

 

      保存文件。

      # python  tran2gopher.py  socat.log

      

 

6.   nc開啓監聽:

      # nc  -lvvp  666

      

 

7.   攻擊CentOS機器的Redis服務:

      在‘有回顯的SSRF’處輸入gopher://127.0.0.1:6379/_+數據轉換的內容:

      

 

      點擊‘TEST IT’後查看監聽結果:

      

 

      成功獲取反彈shell。

      在瀏覽器的‘SEE THE RESULT’處也能夠看到定時任務寫入成功:

 

      

漏洞修復

1.限制協議爲HTTP、HTTPS;

2.禁止30x跳轉;

3.設置URL白名單或限制內網IP。

相關文章
相關標籤/搜索