超大 Cookie 拒絕服務攻擊

2021-09-08 11:02:14 字數 2913 閱讀 5202

有沒有想過,如果**的 cookie 特別多特別大,會發生什麼情況?

不多說,馬上來試驗一下:

for (i = 0; i < 20; i++)

document.cookie = i + '=' + 'x'.repeat(2000)

什麼,**居然報錯了?

眾所周知,cookie 是塞在請求頭里的。如果 cookie 太多,顯然整個 http 頭也會被撐大。

然而現實中,幾乎所有的伺服器都會對請求頭長度做限制,避免畸形封包消耗伺服器資源。

那麼有趣的事就來了 —— cookie 是可以長期儲存的,所以只要不過期,對應的站點就一直無法訪問!

為什麼會這樣!因為是支援自定義裝扮的,使用者可以嵌入自己的指令碼。於是,一旦執行了惡作劇指令碼,站點 cookie 被汙染,導致整個**都無法訪問了!

根據這個原理,我們繼續挖掘 cookie 的相關屬性,讓攻擊效果變得更好。

cookie 之所以能被持久儲存,完全得益於expires這個過期值。

理論上,cookie 的過期時間可以足夠長。不過鑑於實際情況,最多也就幾個月的時間。

但對於網際網路來說,這也非常長了,誰能容忍乙個**幾個月沒法用?

所以,我們可以設定足夠久的過期時間 —— 只要使用者不主動清空 cookie,相應的站點就一直沒法訪問!

例如,所有使用者都在 www.cnblogs.com 下。除了這個主站,能否將其他的子站服務也一起破壞呢?

答案是可以!因為 cookie 具有乙個特殊的屬性domain,它允許子站設定上級站點的 cookie。甚至可以是根域!

於是 www.cnblogs.com 的頁面,就能寫入超大 cookie 到 cnblogs.com 域下了。

未來,只要使用者訪問 *.cnblogs.com 的資源,統統變成 400 了。

這個特徵可被利用到 xss 攻擊上:

不過太霸道也是不好的。尤其是這年頭大家都懂些網路知識,清快取這樣簡單的事,不少小白使用者都會嘗試下。

所以,為了低調起見,我們不對頁面進行遮蔽,以免被過早被使用者發現。

我們只遮蔽特殊的 url,例如 ajax 請求介面。這樣,頁面仍能正常開啟,只是後期的一些操作總是提示失敗 —— 於是,使用者大多會認為是**出問題了,而不會懷疑是自己的原因。

為了能更精確的控制 cookie 粒度,path屬性得利用起來。例如,我們只汙染的 /mvc/vote/votecomment.aspx 頁面:

for (i = 0; i < 20; i++)

document.cookie = i + '=' + 'x'.repeat(2000) + ';domain=cnblogs.com; path=/mvc/vote/votecomment.aspx'

這樣,頁面仍能正常瀏覽,只是把『點讚』功能給遮蔽了:

是不是很有趣:)

這種區域性遮蔽的效果,顯然有更好的迷惑性。

仔細回顧一遍 cookie 屬性,除了secure,再沒和 url scheme 相關的屬性了。

這意味著,http 和 https 的 cookie 預設都是共享的。因此,我們可以在 http 下遮蔽 https 站點了!

不過 xss 也不是也想有就能有的,但在特殊的條件下,任何站點都可以有 xss —— 那就是流量被劫持的時候。

當使用者流量被劫持時,中間人可以模擬出任何 http 站點,因此就能對任意站點設定 cookie:

當使用者開啟任意 http 頁面時,往其中注入指令碼。接著悄悄建立目標站點的隱藏框架頁,中間人返回特定的頁面內容,其中的指令碼即可修改目標站點 cookie 了。

下面就來嘗試一下吧。

通過**,我們模擬流量被劫持的場景。當開啟任意頁面時,開始對目標站點釋放 debuff:

主頁面的實現:

目標框架頁實現:

通過一堆框架頁,即可批量對目標站點的 cookie 進行修改。

最後,切換回正常網路 —— 發現**光環仍在生效:

更杯具的是,連加密傳輸的 https 站點也未能倖免:

中間人快取攻擊,又多了一種新玩法!

或許你要說了,這除了惡作劇惡搞之外,有實際意義嗎。

不過,只要充分發揮想象,還是能玩出一些有趣的效果。例如配合 xss:

或者流量劫持的場合:

當然,這種所謂的『拒絕服務』,只是本地自欺欺人而已,對真實伺服器並沒什麼影響。

雖然效果不及傳統攻擊,但這種方式顯得更文明一些。只對部分人、甚至部分功能實施攻擊,而完全不妨礙其他使用者。

拒絕服務攻擊

dos denial of service 指拒絕服務,是一種常用來使伺服器或網路癱瘓的網路攻擊手段。在平時更多提到的是分布式拒絕服務 ddos,distributed denial of service 攻擊,該攻擊是指利用足夠數量的傀儡計算機產生數量巨大的攻擊資料報,對網路上的一台或多台目標實施...

拒絕服務攻擊 DOS)

拒絕服務攻擊 dos dos是denial of service的簡稱,即拒絕服務,造成dos的攻擊行為被稱為dos攻擊,其目的是使計算機或網路無法提供正常的服務。最常見的dos攻擊有計算機網路頻寬攻擊和連通性攻擊。頻寬攻擊指以極大的通訊量衝擊網路,使得所有可用網路資源都被消耗殆盡,最後導致合法的使...

拒絕服務(DoS)攻擊

拒絕服務 denial of service,簡稱dos 型攻擊。四種常見dos攻擊型別 1.頻寬耗用 最陰險的dos攻擊形式是 頻寬耗用 bandwidth consumption 攻擊。其本質是攻擊者消耗掉某個網路的所有可用頻寬。這可以發生在區域網上,不過更常見的是攻擊者遠端消耗資源。這種攻擊有...