實戰介紹Windows下的PC客戶端常見漏洞挖掘

為什麼寫這篇文章

對於小白來說,WEB安全方面似乎已經有了很完備的知識體系和漏洞發掘流程,剛剛入門的朋友總是喜歡選擇web方向來作為自己的發展方向,因為針對web系統的滲透測試似乎獲得的成就感要更高,也有很多小白認為web似乎更好學,然而對於PC客戶端漏洞發掘,因為涉及到了一些計算機和操作系統底層的知識,很多人都不敢去碰,而實際上PC客戶端的漏洞比大家想象中要容易的多,甚至你並不需要精通匯編語言就能很容易的挖到PC客戶端漏洞,不過彙編語言是PC客戶端漏洞發掘的基礎,最好還是學好它。

另外,挖掘PC客戶端漏洞和挖掘WEB漏洞是一樣的,都需要細心和耐心,你要學會關注每一個細節,瞭解系統和軟件是如何協同工作的。本文主要講Windows下的PC客戶端漏洞發掘,為了淺顯易懂,不涉及ROP等高級內存攻擊和內存溢出技術,大佬請繞道。

0×01 工具

“工欲善其事,必先利其器” 。

PC客戶端漏洞挖掘主要是逆向工程和進程監控為主。

逆向工程方面我推薦兩個工具,一個是靜態分析之王:IDA pro,另一個是動態調試裡面最好用的:Ollydbg(推薦大家用吾愛破解論壇版本的)這兩個逆向分析工具一查就可以查到,在這裡就不多介紹了。

進程監控工具主要分為進程本地行為監控和進程網絡行為監控。

本地行為監控工具我推薦:ProcessExplorer進程監控和Autoruns進程監控,這兩個工具知名度不高,但是很好用。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


ProcessExplorer進程監控


實戰介紹Windows下的PC客戶端常見漏洞挖掘


Autoruns進程監控工具

本地監控工具裡還有一種工具是專門監控註冊表的工具,這裡推薦幾個:


實戰介紹Windows下的PC客戶端常見漏洞挖掘


Process Monitor:一個強大的註冊表監視工具,可以添加過濾規則,很方便。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


Regshot:一個註冊表備份和比對工具,可以通過保存快照和比對快照的方式來找出註冊表中哪些值發生了變化。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


RegfromApp:也是一個進程監控工具,可以選擇一個進程之後跟蹤其對註冊表的修改。

網絡行為監控工具當然首推大名鼎鼎的Wireshark啦,當然還有一個工具很小眾但是很好用,是歲月聯盟的工具,叫WSExplorer(進程抓包)。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


Wireshark


實戰介紹Windows下的PC客戶端常見漏洞挖掘


歲月聯盟的進程抓包工具WSExplorer,非常方便,左側是進程,右側是抓到的數據包。

有了以上這些工具,我們便可以對程序在我們的計算機上做了些什麼瞭如指掌,知己知彼方能百戰百勝,便可以開始下一步的漏洞發掘了。

0×02 缺陷

對於開發者來說,開發一款完全沒有漏洞的程序是不可能的,特別是這個程序的體量及其龐大時,則其必定存在漏洞,我們需要知道的就是哪些位置容易出現漏洞;

客戶端的授權認證漏洞:

一般正版的客戶端軟件都設有授權認證模塊,這些授權認證方式所需要達成的目的無非就是“買了的人能用,沒買的人不能用”,一般驗證採用註冊碼的形式並與個人計算機的機器碼相互綁定,或者與某種個人認證機制相互綁定,以達到驗證的目的。授權認證漏洞可以導致軟件和功能被破解,盜版程序流通等嚴重後果。授權認證漏洞往往是開發者在開發時沒有注重授權認證的保密性以及安全性所導致的。

客戶端的網絡服務漏洞:

這類漏洞一般是由於客戶端在發送數據包或接收時沒有進行嚴格的認證造成的,可導致無條件調用高級權限的服務。

客戶端功能邏輯漏洞:

這類漏洞一般是由客戶端功能設計不合理導致的,可以導致無授權的訪問等嚴重後果。

客戶端溢出漏洞:

這類漏洞包含屬於逆向工程中比較高難度的一塊,主要是由於開發時對內存的錯誤管理,或者程序本身的執行邏輯漏洞導致的。

本文僅介紹前三種漏洞。

0×03 實戰

客戶端功能邏輯漏洞:

挖掘這類漏洞應主要關注客戶端功能之間的邏輯,與Web邏輯漏洞類似。但是不同的是,功能邏輯漏洞也包括在反編譯之後的部分,一般情況下通過修改關鍵call函數之上的跳轉邏輯來進行漏洞挖掘,主要成因是客戶端邏輯過於簡單,採用了較少的邏輯判斷。這種漏洞在具有完備功能的客戶端上並不常見。

客戶端的授權認證漏洞:

1.基於本地註冊表的破解:

某些軟件雖然使用網絡進行授權驗證,但是由於其試用次數設計的驗證缺陷,可以導致通過修改註冊表來實現無限次數的試用,導致“不付費也能用”,即出現了授權認證漏洞。下面這款客戶端程序即是如此,我們在剛剛打開它的時候會提示試用次數還剩29次。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


現在我們打開Process Monitor,使用過濾功能添加白名單使Pm僅顯示該進程的相關信息。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


實戰介紹Windows下的PC客戶端常見漏洞挖掘


添加過濾白名單,僅顯示該進程

關鍵部位做了處理。。

之後停止所有捕獲,關閉並重啟客戶端,多次重複後我們監控到每次客戶端打開時,會自動做一次RegsetValue(註冊表值修改),如下:

經過測試後,發現剩餘試用次數是用整數30減去註冊表中一個名為Nowtimes的鍵下面的值。

於是我們編寫一個BAT腳本,修改該客戶端指向的那個值,並讓他在客戶端啟動時自動運行,即可鎖定試用次數為30次,不會減少。

Reg add HKCU\Software\客戶端名字\一個位置 /v Nowtimes /t REG_DWORD /d 0 /f


實戰介紹Windows下的PC客戶端常見漏洞挖掘


這個漏洞的成因主要是因為試用次數認的方法太簡單了,不聯網不加密直接寫進註冊表中,並且鍵名還那麼淺顯易懂叫做“Nowtimes”,這種存在在註冊表的漏洞發掘和利用方法還是比較簡單的,但是問題是這樣的漏洞還蠻多的,所以大家在挖掘時注意關注註冊表。另外如果註冊表禁止監控,我們可以用REGshot來保存前後的快照進行比對分析。

2.基於網絡授權驗證的hosts欺騙破解

這一部分內容需要用到一部分逆向工程的知識。這次破解的客戶端沒有設置試用機制,所以第一種路子行不通 ,我們轉而把眼光放到它的網絡驗證模式上來,看看到底這個客戶端的網絡授權驗證方式是如何工作的。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


關鍵位置打碼處理


實戰介紹Windows下的PC客戶端常見漏洞挖掘


隨便輸一個註冊碼進去

隨便輸入一個註冊碼然後確定,根據彈出的錯誤窗口來定位到客戶端的註冊檢測驗證的函數處。拖入OLLYdbg查找字串“註冊碼有誤”,並跟蹤到彙編窗口。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


於是我們得到了註冊授權的服務器地址。為了進一步驗證,我們使用wireshark來分析這個客戶端註冊時的網絡請求。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


<>可以看出客戶端攜帶著我們的機器碼和幾個其他數據請求了服務器的/verifycheck/login.php

再回到我們的彙編窗口中,我們可以看到幾個unicode的編碼,疑似服務器的返回,記錄下來。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


直接用瀏覽器訪問,可以發現返回值和彙編窗口的記錄值中的一條相同,所以我們猜測可以構造一個假服務器,修改主機的hosts文件來實現請求重定向,讓我們的服務器返回註冊成功的信息。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


修改hosts文件,將服務器域名綁定到我們自己的假服務器的ip地址

在服務器上構造不同的payload,可以得到客戶端不同的反應,說明漏洞成功了一半。

實戰介紹Windows下的PC客戶端常見漏洞挖掘


實戰介紹Windows下的PC客戶端常見漏洞挖掘


實戰介紹Windows下的PC客戶端常見漏洞挖掘


至此我們可以排除掉其他的payload,從而確定一個格式化日期返回值是註冊成功的標誌。所以我們構造一個格式化時間,並且重新打開客戶端輸入任意註冊碼註冊,即可看到註冊成功的窗口。


實戰介紹Windows下的PC客戶端常見漏洞挖掘


最終的payload


實戰介紹Windows下的PC客戶端常見漏洞挖掘


這一漏洞的成因為客戶端軟件在校驗註冊碼返回時的數據太過簡單,進而非常容易構造註冊成功的返回。並且客戶端的反編譯能力也非常差,敏感信息在反編譯後直接就能夠看到。在挖掘這一類漏洞時,我們需要一些逆向工程的基本知識,以及計算機網絡的一些基礎知識,重點關注客戶端與網絡服務器之間的通訊數據,利用抓包工具來進行漏洞挖掘。

客戶端的網絡服務漏洞:

由於想拿來做例子的漏洞廠商還沒有修復,所以這裡不放例子了。網絡服務漏洞發掘主要採用客戶端網絡請求分析的方式,主要的工具就是前面提到的進程抓包工具以及Wireshark, 大部分網絡服務漏洞起因是由於在客戶端的網絡請求中沒有采取驗證方式或者採取了安全性非常低的驗證方式,從而使得任何人都可以以客戶端合法的名義來請求這個網絡服務,實現沒有權限的調用私有網絡服務接口。常常出現在客戶端vip付費資源的試聽服務,客戶端付費的查詢功能接口處等,不安全的客戶端請求可以被攔截並分析,進而實現越權調用無權限的資源或接口。在挖掘這類漏洞時,我們需要更多的關注客戶端的網絡傳輸層面上的東西,儘可能的分析客戶端的每一個通過網路服務器實現的功能,來進行漏洞挖掘。


分享到:


相關文章: