HttpOnly 隱私嗅探器

wyzsk發表於2020-08-19
作者: EtherDream · 2014/08/19 11:29

0x00 前言


終於趕上個想寫點東西的日子,原本打算繼續更新那拖了好久的流量劫持系列的部落格和工具。不過中午閒來無事去烏雲逛了圈,發現百度的漏洞又雙叒叕上頭條了!而且還是那個 BDUSS 洩露的問題,記不得這已經是第幾回了。儘管這事和我們沒啥關係,但本著拯救世界和平的目的,還是打算去研究下:)

既然是 cookie 洩露,無非就兩種。要麼就是硬傷,例如之前 Apache 就會因為太多的請求頭,導致 HttpOnly 也被輸出到錯誤頁裡,當然這種嚴重的漏洞,隨著補丁的更新很快就能解決;另一個當然就是內傷,由於程式猿的粗心大意,把重要的資料不加掩蓋就放到頁面裡了。

前者很好解決,把線上的伺服器都掃描一遍,修復一個就少一個。而後者就不那麼容易了,產品經常更新迭代,誰也不能保證每次升級之後是否出現新的隱患。

既然找不到一勞永逸的方案,不如就用最簡單最原始的土辦法 —— 暴力窮舉:把網頁一個個抓回來,看看裡面是否出現隱私資料了。當然你會說這也太挫太低效了,不過事實上這種方案還是有意義的,至少能很快的找出一些明顯的問題。而且在此基礎上,我們還可以再做最佳化和改進,讓它變得更完善。

說到抓網頁,大家總是先想到蜘蛛。雖然全自動化的流程是我們的終極目標,但在目前遐想階段,就開始搞這麼複雜的一套系統,還是不合適。而且如今遍地都是 AJAX 的互動網頁,蜘蛛也很難爬到一些動態資料。

所以,不如先從最簡單的開始:Chrome 外掛。在我們平時看網頁的時候,同時對頁面進行分析。這樣既節省了蜘蛛服務,而且還充分利用了真實的使用者行為,覆蓋到更多的動態互動內容。

0x01 獲取隱私資料


使用 Chrome 外掛來實現這個基本功能,是非常簡單的。只要得到了帶 HttpOnly 的 cookie 值,在瀏覽頁面時掃描下 HTML 字元就可以了。

首先得獲取瀏覽器的 cookie 資料庫,得到我們想要的。例如,我們獲取所有百度域下的 cookie:

#!js
chrome.cookies.getAll({domain: 'baidu.com'}, function(cookies) {
    console.dir(cookies);
});

chrome_cookie.png

稍加過濾即可獲得 HttpOnly 的資料。

詳細 API 可以參考這裡。關於 Chrome 外掛開發這裡就不詳細介紹了。

值得注意的是,有些 cookie 值很簡單,例如 1、true、ok 之類的;或者很常見,例如使用者名稱、日期數字等,這些都得排除掉,否則會有太多的匹配。

0x02 掃描頁面內容


有了關鍵字列表,我們就可以對頁面內容做分析了。

我們新建一個 content 指令碼,向 background 指令碼獲取列表。之後在頁面的 DOMContentLoaded 事件裡,即可對文件的 HTML 進行關鍵字掃描了:

#!js
// content.js
chrome.extension.sendRequest('GET_LIST', function(list) {

    window.addEventListener('DOMContentLoaded', function() {
        var html = document.documentElement.outerHTML;

        list.forEach(function(item) {
            if (html.indexOf(item) >= 0) {
                alert('found: ' + item);
            }
        });
    });
});

// background.js
chrome.extension.onRequest.addListener(function(message, sender, sendResponse) {
    if (message == 'GET_LIST') {
        sendResponse(list);
    }
});

到此,一個最簡易的隱私嗅探器完成了。我們馬上就來試驗下,看看是否有效果。

先試試百度首頁上的幾個產品。不到 10 秒鐘,就逮到了一個:

demo.png

開啟原始檔一搜,果然看見了傳說中帶 HttpOnly 的 BDUSS:

demo_src_1.png

趕緊測試其他頁面。開始的幾分鐘時間裡,不斷發現新的洩漏點:

demo_src_2.png

demo_src_3.png

demo_src_4.png

。。。

不過十分鐘後,出現的越來越少了。我們是不是漏了些什麼東西?

0x03 擴大掃描範圍


顯然,如果只掃描 HTML 內容,這和爬蟲有什麼區別?

我們之所以做成瀏覽器外掛,就是為了能得到真實的使用者行為操作。要是放棄了那些透過互動產生的動態資料,意義就大幅下降了。

遺憾的是,Chrome API 裡並沒有獲得網路資料的介面。即使是 HTML,我們也是透過 

相關文章