那「一剎那」的防禦

2021-12-30 10:37:24 字數 1492 閱讀 8131

看到這個我因為baidu又出現了0day了?利用類似這樣的子網域名稱可以繞過白名單? 通過自己測試發現沒辦法「重現」。於是我想起了以前在hi群討論過的 關於heart牛在baidu彈了1年多的jj的那個問題 :

當時在hi群討論的時候,有人說是「時間遺忘攻擊」,也有人說是「儲存不動」導致的,其實我認為他們這些只是看到的「表象」,沒有看到漏洞產生的「實質」,我們先看看這個應用程式裡,變數與函式的關係,在《高階php應用程式漏洞審核技術》一文的前面有一段這樣的敘述:

[web應用程式漏洞查詢基本上是圍繞兩個元素展開:變數與函式。也就是說一漏洞的利用必須把你提交的惡意**通過變數經過n次變數轉換傳遞,最終傳遞給目標函式執行,還記得ms那句經典的名言嗎?「一切輸入都是有害的」。這句話只強調了變數輸入,很多程式設計師把「輸入」理解為只是gpc[$_get,$_post,$_cookie],但是變數在傳遞過程產生了n多的變化。導致很多過濾只是個「紙老虎」!我們換句話來描敘下**安全:「一切進入函式的變數是有害的」]

過程類似如下:

外部變數--->n次內部變數轉換--->進入函式【實現功能】

在「n次內部變數轉換」的過程 還包括「變數的儲存與提取」:

外部變數--①-->n次內部變數轉換--②-->資料庫[變數的儲存與提取]--②-->n次內部變數轉換--③-->進入函式【實現功能】

我們以baidu為例子來分析下修補的方法:

①就是傳統理解的「一切輸入都是有害的」,也是現在主流的方法。baibu的處理也是這樣的,在輸入段過濾,然後就後面的就不處理了,現在問題裡面牽扯到了乙個「時間」因素,在baidu在①處過濾前,攻擊者的**已經當到了②與③之間的」資料庫」裡了,然後baidu在①處過濾後,資料庫裡的**然後被提取出來進入函式導致漏洞繼續.......

那麼我們應該怎麼理解和防禦這個問題呢?我們的理解應該是前面提到的:「一切進入函式的變數是有害的」,所以我們的防禦:「進入函式前那剎那的防禦才是王道」。

大風在hi群裡談論這個問題的時候提到了乙個補救的方案:

大風懸鈴 16:52:59

輸出防禦+資料庫檢查歷史資料

大風懸鈴 16:53:09

or,輸入防禦+檢查歷史資料

就不談效率的問題上,大風這些方案還是違背了「剎那」規則的。而且「資料庫檢查歷史資料 」這個是有缺陷的,比如資料的儲存還在變數傳遞的過程,表現的方式是很難**的,最起碼的就是編碼了,可能在資料庫裡的資料是urldecode base64等常見編碼,根本就沒有什麼「特徵**」,而且從資料庫裡select出來的變數又要經過n次的轉換和呼叫.這些都是不可以預料的.....

以上都是對於防禦者來談的,那麼對於攻擊者有什麼啟示沒呢?是的那就是「測試用的poc需要預留攻擊介面」比如heart牛如果1年前他預留了乙個『介面』,那麼現在也不是簡單的彈jj了!!!!!

對於這樣的攻擊其實有很多例子,比如我之前的blog文《我在qqmail上放了*個後門》,其實對於「預留攻擊介面」這是一種攻擊思路,不單單用在本文的例子,還有可能誕生很多的精彩故事?

期待你的精彩故事! :)

當你在搜尋框按下enter的一剎那發生了什麼?

現在,讓我們開始向網路通訊的世界邁出第一步。類似 這樣的 被稱為url 統一資源定位符 其中http是協議名稱,www是網路服務標識,baidu.com是網域名稱。要找資源必然要先找有該資源的地方,網域名稱就是這個地方的代號,這個地方被人們稱為伺服器 一種專門用於響應服務請求,並處理的計算機 區分計...

那一年的我們 那一年我們

那一年的我們 那一年我們很有錢 那一年我們好像很有錢 走進宿舍樓的時候會買一包爸爸都捨不得抽的煙 那一年我們好像很有錢 你會在櫃檯前挑半天的化妝品 可媽媽用的最多的 化妝品 卻是年復一年陪伴她的透明皂和洗滌靈 那一年我們好像很有錢 冷天出門就叫計程車 而爸媽上班卻頂著凜冽的寒風騎著自行車 那一年我們...

下雨的那一幕

昨天又下雨了,看著車窗外的水珠,從上往下,乙個乙個的下落。當乙個水珠下落過程中遇到另外乙個水珠的時候,它們結合在一起往下落。兮兮,這一幕看過很多多年了,那麼熟悉,那麼親切,心中莫名的興奮和失落中伴隨著些許憂傷。活了很多年了,有些事情不能夠忘記,還是被水珠結伴下落那一刻感動,它們比獨自下落時快了很多。...