3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
* 原創作者:浪子_三少,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載現在很多網站都使用了 https 的方案,保證了傳輸中的數據不被修改或者被第三方封包軟體看見,但是由於https有一些隱含的缺陷或者伺服器驗證的不嚴格,https被劫持的可能性存在,就像之前出現了」凈廣大師」病毒劫持https,往百度搜索里插入廣告id,他使用的方法就是中間人攻擊,強行插入自己的證書實現解密https,今天我們介紹一種瀏覽器劫持的方法實現https劫持,現在我們就開始分析去找到瀏覽器中https加密的入口。一)分析方法首先我們打開瀏覽器(注意:這裡涉及的瀏覽器的名字都會被隱去),輸入baidu.com,在baidu里輸入666666我們可以看到baidu搜索時瀏覽器地址欄里,baidu的網站使用的是https鏈接地址。接下來使用調試器ollydbg去附加瀏覽器,然後在命令輸入bp WSASend然後重新點擊百度里的搜索按鈕,這是調試器會斷在WSASend地方:我們再看堆棧區域,往下翻堆棧會看到有sha256相關的hash計算的,這裡就是說在發送數據之前經過一些tls的計算的過程,下面我繼續走掉返回到調用WSASend的地方: 0x66F20F20這裡並不是明文所在的地方,一般進入發包的地方時已經被加密了,我們繼續走下去,返回到調用該函數區域的所在函數,因為這個函數沒什麼特徵性,應該還沒到達https加密前所在的地方,返回到一個調用比較特別的地方。當我們返回到這裡 CALL DWORD PTR DS:[EDX+8],我們要引起注意,可以大概這樣假設,這裡是調用 c++一個類的虛表函數。我們直接下斷點在CALL DWORD PTR DS:[EDX+8],然後F9,接下來瀏覽器就停在了這句代碼上,我們具體分析下內存EDX 地址是: 0×68337724發現此地址確實是個函數表這時我們在翻堆棧信息時發現了明文的請求信息按下快捷鍵: ctrl + G ,輸入0x66FC422D,進入該函數地址區域: 接下來我們把之前的所有斷點全部禁用然後在這個函數地方下斷點,重新開始baidu搜索,這時瀏覽器停在了這個函數call [eax+0x30]的地方 ,此時eax值為0x683A1908eax的內存所在的地址確實是個函數表,是虛表沒錯了,edi地址也有明文。在分析堆棧,該函數有三個參數在call [eax+0x30]前有三個push [ebp+8]push edipush esi說明該函數是三個參數,在上面堆棧中我們找到前三個值分別是0x197D8EE8是第一個參數,這是一個c++類地址,因為0x197D8EE8里的值就是eax的值。0x19F2A390 第二個參數為明文緩衝區地址0x6BF 第三個參數為緩衝區的長度下面我們驗證下我們對以上三個參數的驗證, 按F9,下次瀏覽器會繼續停在該函數的地方。查看堆棧,確實如上猜測 :我們再繼續回過頭分析eax這個值,0x683A1980, 這個地址在當前這個程序的這個代碼模塊內,且在這個模塊的」.rdata」程序段內,那這足以證明該地址就是一個https的加密類,而0×30 的偏移的函數就是加密函數入口。二)代碼實現分析到了具體的地方,我們就可以寫程序去掛鉤這個虛表函數去獲取瀏覽器每次發出去的明文請求。我們可以定義一個c++ 虛類其中pSSL_Crypt 這個地址就是0×30的偏移的函數指針,接著我就寫一個hijack類去實現hook瀏覽器 (想研究代碼的,還是閱讀原文吧,三少的代碼real長)在以上代碼我們獲取了模塊加密類的虛表地址后就替換剛才那個偏移地址,修改指針去實現hook,當我們在瀏覽器里百度搜索時,會停在我們的函數里Buffer參數Len值結果和我們預想的一樣,這樣我們就通過hook實現了瀏覽器https明文的截獲,在我們的hook函數中我們可以做任何事情,可以過濾數據,可以轉發數據,甚至我們還能修改請求數據,如果我們再hook了瀏覽器的https的解密函數,也能過濾或者修改從伺服器端接受的https數據回應信息,實現我們想要的各種功能。總結自此本文結束,綜上所講的hook技術能夠破壞瀏覽器程序本身,導致https被劫持,而瀏覽器卻無法察覺,可見瀏覽器廠商對自身的安全性保障也是一個很重要的、值得他們去深思研究的問題。(注意:本文只是屬於技術分享,請勿用於非正常途徑,故而會隱去瀏覽器的名稱)* 原創作者:浪子_三少,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

本文由yidianzixun提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦