HTTP 請求走私(HTTP Request Smuggling)

HTTP 請求走私(HTTP Request Smuggling)是一種通過利用前端代理(如負載均衡器、CDN)和后端服務器在 解析 HTTP 請求時存在不一致性 的漏洞,從而實現 注入惡意請求 的攻擊技術。


一、基本原理

HTTP 請求走私主要依賴兩個請求頭字段的不一致處理:

  • Content-Length:指明請求體的長度。

  • Transfer-Encoding: chunked:指明請求體是分塊傳輸的。

不一致的場景

當前端和后端服務器對這兩個頭的解釋不一致時,攻擊者就能將多個請求“混淆”為一個請求,從而:

  • 繞過認證

  • 注入惡意請求

  • 劫持用戶會話

  • 發起緩存投毒

  • 進行 XSS / CSRF 攻擊

常見的組合方式:

名稱條件
CL.TE前端使用 Content-Length,后端使用 Transfer-Encoding
TE.CL前端使用 Transfer-Encoding,后端使用 Content-Length
TE.TE前端和后端都支持 Transfer-Encoding,但處理方式不同

二、CL.TE 類型攻擊示例

假設你有以下攻擊場景:

  • 前端(比如 Nginx)使用 Content-Length 解析請求;

  • 后端(比如 Apache)使用 Transfer-Encoding: chunked 解析請求。

攻擊請求如下:

POST / HTTP/1.1
Host: vulnerable.site
Content-Length: 62
Transfer-Encoding: chunked0GET /admin HTTP/1.1
Host: vulnerable.site

解析過程:

前端(Nginx)

  • 只看 Content-Length: 62,把整段請求當作一個完整請求發送到后端。

后端(Apache)

  • 看到 Transfer-Encoding: chunked,開始以分塊方式解析請求。

  • 0\r\n\r\n 表示請求體結束。

  • 后面的 GET /admin HTTP/1.1... 被解釋為另一個完整的 HTTP 請求

→ 后端就會執行這個攻擊者構造的請求 GET /admin,可能會繞過權限控制!


三、防御方式

  1. 統一前后端解析邏輯

    • 確保前后端對 HTTP 請求頭的處理一致。

  2. 禁止混合使用 Content-LengthTransfer-Encoding

    • 可以在 Web 應用防火墻(WAF)中檢測并拒絕。

  3. 升級服務器

    • 新版本的服務器通常修復了相關解析不一致的問題。

  4. 使用 Web Application Firewall(WAF)

    • 例如 ModSecurity 可以檢測這種模糊請求。

  5. 啟用 Chunked 請求白名單機制

    • 如果應用不需要 chunked 編碼,直接禁用該特性。


以下是一個真實的 HTTP 請求走私(HTTP Request Smuggling)攻擊案例,展示了其在現實世界中的危害性。


🧪 案例:利用請求走私劫持用戶會話

安全公司 Outpost24 在一次滲透測試中發現,某 Web 應用存在 TE:CL 類型的請求走私漏洞。通過精心構造的請求,攻擊者成功實現了響應隊列的不同步(Response Queue Desynchronization),從而劫持了其他用戶的會話。Outpost24+1Outpost24+1

攻擊過程:

  1. 識別漏洞:使用工具檢測到前端服務器使用 Transfer-Encoding 解析請求,而后端服務器使用 Content-Length,存在解析不一致。

  2. 構造惡意請求:發送包含兩個請求的單個 HTTP 請求,其中第一個請求設置了特定的頭部,使后端服務器將兩個請求視為一個,從而導致響應隊列不同步。

  3. 劫持會話:由于響應隊列不同步,攻擊者能夠接收到屬于其他用戶的響應,其中可能包含敏感信息,如訪問令牌。


🔍 案例:Apache Tomcat 中的請求走私漏洞(CVE-2021-33037)

Apache Tomcat 是廣泛使用的 Java Web 服務器。在 2021 年,發現其存在一個請求走私漏洞(CVE-2021-33037),影響版本包括 8.5.0 至 8.5.66、9.0.0.M1 至 9.0.46 和 10.0.0-M1 至 10.0.6。該漏洞源于 Tomcat 在某些情況下未正確解析 HTTP 的 Transfer-Encoding 請求頭,導致在與反向代理一起使用時可能發生請求走私。QualysPortSwigger+1Qualys+1

攻擊者可以利用該漏洞,隱藏惡意請求在正常請求中,繞過安全檢查,執行未授權的操作。該漏洞已在后續版本中修復,建議用戶升級至最新版本。

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

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

相關文章

【Google機器學習實踐指南(線性回歸篇)

🔍 Google機器學習實踐指南(線性回歸篇) Google機器學習實戰(3)-單變量線性回歸核心解析,掌握房價預測模型 一、建模流程全景圖 ▲ 四大核心步驟: 數據可視化→特征工程→模型訓練→預測推理 二、房價預測實戰 1. …

python打卡day16

NumPy 數組基礎 因為前天說了shap,這里涉及到數據形狀尺寸問題,所以需要在這一節說清楚,后續的神經網絡我們將要和他天天打交道。 知識點: numpy數組的創建:簡單創建、隨機創建、遍歷、運算numpy數組的索引&#xff1a…

ubuntu 20.04 更改國內鏡像源-阿里源 確保可用

鏡像源是跟linux版本一一對應的,查詢自己系統的版本號: 命令:lsb_release -a macw:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal macw:~$…

基于OpenCV的SIFT特征和FLANN匹配器的指紋認證

文章目錄 引言一、概述二、代碼解析1. 圖像顯示函數2. 核心認證函數2.1 創建SIFT特征提取器2.2 檢測關鍵點和計算描述符(源圖像)2.3 檢測關鍵點和計算描述符(模板圖像)2.4 創建FLANN匹配器2.5 使用K近鄰匹配 3. 匹配點篩選4. 認證…

四品種交易策略

策略概述 策略思路: 交易品種:同時交易四個品種,每個品種使用總資金的10%。 合約選擇:使用連續合約(data0)發出交易信號,實際交易 主力合約(data1)和下一個主力合約(data2)。 資金管理:總資金用A_CurrentEquity表示,交易手數據此計算。 止損執行:盤中達到止損…

MySQL事務的一些奇奇怪怪知識

Gorm事務有error卻不返回會發生什么 Gorm包是大家比較高頻使用。正常的用法是,如果有失敗返回error,整體rollback,如果不返回error則commit。下面是Transaction的源碼: // Transaction start a transaction as a block, return …

時序數據庫、實時數據庫與實時數倉:如何為實時數據場景選擇最佳解決方案?

隨著物聯網、金融交易、在線游戲等場景對實時數據處理需求的增長,市場上涌現出多種專門針對實時數據處理的數據庫解決方案。然而,面對時序數據庫、實時數據庫和實時數據倉庫這三種看似相似的技術,許多技術決策者常常感到困惑:它們…

Spring3+Vue3項目中的知識點——JWT

全稱:JOSN Web Token 定義了一種簡潔的、自包含的格式,用于通信雙方以json數據格式的安全傳輸信息 組成: 第一部分:Header(頭),記錄令牌類型、簽名算法等。 第二部分:Payload&am…

微服務架構詳解

微服務架構詳解:從概念到實踐(附代碼案例) 目錄 微服務架構詳解:從概念到實踐(附代碼案例) 一、微服務架構概述 1.1 什么是微服務? 1.2 微服務的核心思想 二、微服務架構的優勢與挑戰 2.1 優勢 2.2 挑戰 三、微服務架構的核心組件 3.1 服務注冊與發現 示例代…

linux下編寫shell腳本一鍵編譯源碼

0 前言 進行linux應用層編程時,經常會使用重復的命令對源碼進行編譯,然后把編譯生成的可執行文件拷貝到工作目錄,操作非常繁瑣且容易出錯。本文編寫一個簡單的shell腳本一鍵編譯源碼。 1 linux下編寫shell腳本一鍵編譯源碼 shell腳本如下&…

學習!FastAPI

目錄 FastAPI簡介快速開始安裝FastApiFastAPI CLI自動化文檔 Reqeust路徑參數Enum 類用于路徑參數路徑參數和數值校驗 查詢參數查詢參數和字符串校驗 請求體多個請求體參數嵌入單個請求體參數 CookieHeader表單文件直接使用請求 ResponseResponse Model多個關聯模型 響應狀態碼…

DAY 4 缺失值的處理

\1. 打開數據 import pandas as pd data pd.read_csv(rdata.csv) data\2. 查看數據 # 打印數據集的基本信息(列名、非空值數量、數據類型等) print("data.info() - 數據集的基本信息(列名、非空值數量、數據類型等)&#…

Java面試實戰:從Spring Boot到分布式緩存的深度探索

Java面試實戰:從Spring Boot到分布式緩存的深度探索 場景介紹 在一家著名的互聯網大廠,面試官老王正對求職者“水貨程序員”明哥進行Java技術面試。明哥帶著一點緊張和自信,迎接這場技術“拷問”。 第一輪:基礎問題 老王&#…

UART、SPI、IIC復習總結

一、UART 1、UART和USART的異同? 相同點 基本功能:都是用于串行通信的數據收發設備,能夠實現數據在不同設備之間的傳輸。在異步通信模式下,二者的工作方式相似,都使用起始位、數據位、校驗位(可選&#…

PostGIS實現矢量數據轉柵格數據【ST_AsRaster】

ST_AsRaster函數應用詳解:將矢量數據轉換為柵格數據 [文章目錄] 一、函數概述 二、函數參數與分組說明 三、核心特性與注意事項 四、示例代碼 五、應用場景 六、版本依賴 七、總結 一、函數概述 ST_AsRaster是PostGIS中用于將幾何對象(如點、線…

Linux 線程(上)

前言:大家早上中午晚上好!!今天來學習一下linux系統下所謂的線程吧!!! 一、重新理解進程,什么是進程? 1.1 圖解 其中黑色虛線部分一整塊就是進程,注意:一整…

Java API學習筆記

一.類 1. String 類 不可變性:String對象創建后不可修改,每次操作返回新對象 String str "Hello"; str.length(); str.charAt(0); str.substring(1, 4); str.indexOf("l"); str.equals("hel…

醫療信息系統安全防護體系的深度構建與理論實踐融合

一、醫療數據訪問系統的安全挑戰與理論基礎 1.1 系統架構安全需求分析 在醫療信息系統中,基于身份標識的信息查詢功能通常采用分層架構設計,包括表現層、應用層和數據層。根據ISO/IEC 27001信息安全管理體系要求,此類系統需滿足數據保密性…

5.18本日總結

一、英語 復習list3list28 二、數學 學習14講部分內容,1000題13講部分 三、408 學習計網5.3剩余內容 四、總結 計網TCP內容比較重要,連接過程等要時常復習;高數學到二重積分對定積分的計算相關方法有所遺忘,需要加強鞏固。…

MATLAB2025新功能

截至2023年9月,MATLAB官方尚未公布2025版本的具體更新內容。根據歷史更新規律和技術發展趨勢,未來版本可能會在以下方面進行優化: AI與深度學習增強 可能新增自動化模型壓縮工具強化生成式AI模型支持改進的ONNX格式轉換接口 性能提升 矩陣運…