Thick client(也稱為rich客戶端或fat客戶端
1️⃣ 發現點(偵察階段)
確認:
應用程式架構(C/S 架構)
使用語言(如 .NET / Java)
框架版本、是否有弱點
找到應用入口、輸入點(表單、上傳接口、RPC)
常用工具:
ProcMon、Wireshark:觀察應用執行時的行為和網絡流量
dnSpy、ILSpy:.NET 反編譯
Ghidra / x64dbg:逆向分析
strings、binwalk:快速檢測檔案中敏感字串或嵌入內容
2️⃣ 從Thick-Client 客戶端應用程式中檢索硬編碼憑證
以下場景引導我們枚舉並利用胖客戶端應用程序,以便在滲透測試期間在公司網路內部橫向移動。在我們獲得對公開的 SMB 服務的存取權限後,該場景開始。
內部橫向移動
公開的 SMB 服務的存取權限
探索 SMB 服務的NETLOGON共用會發現RestartOracle-Service.exe和其他檔案。將可執行檔下載到本機並透過命令列運行它,但它似乎沒有運行或運行了一些隱藏的東西。
C:\Apps>.\Restart-OracleService.exe
C:\Apps>
從SysInternals下載工具ProcMon64並監控其流程
可執行檔確實在 C:\Users\Matt\AppData\Local\Temp 中建立了一個臨時檔案。

為了捕獲文件,需要更改Temp資料夾的權限以不允許刪除文件。為此,我們右鍵單擊資料夾 C:\Users\Matt\AppData\Local\Temp ,然後在Properties -> Security -> Advanced -> cybervaca -> Disable inheritance -> Convert inherited permissions into explicit permissions on this object -> Edit -> Show advanced permissions下,取消選擇Delete subfolders and files以及Delete複選框。

最後我們在開啟的視窗上點選OK > Apply > OK > OK 。一旦應用了資料夾權限,我們只需再次運行Restart-OracleService.exe並檢查temp資料夾。在 C:\Users\cybervaca\AppData\Local\Temp\2 下建立檔案6F39.bat 。每次服務運行時,產生的文件的名稱都是隨機的。
C:\Apps>dir C:\Users\cybervaca\AppData\Local\Temp\2
...SNIP...
04/03/2023 02:09 PM 1,730,212 6F39.bat
04/03/2023 02:09 PM 0 6F39.tmp@shift /0
@echo off
if %username% == matt goto correcto
if %username% == frankytech goto correcto
if %username% == ev4si0n goto correcto
goto error
:correcto
echo TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > c:\programdata\oracle.txt
echo AAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g >> c:\programdata\oracle.txt
<SNIP>
echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >> c:\programdata\oracle.txt
echo $salida = $null; $fichero = (Get-Content C:\ProgramData\oracle.txt) ; foreach ($linea in $fichero) {$salida += $linea }; $salida = $salida.Replace(" ",""); [System.IO.File]::WriteAllBytes("c:\programdata\restart-service.exe", [System.Convert]::FromBase64String($salida)) > c:\programdata\monta.ps1
powershell.exe -exec bypass -file c:\programdata\monta.ps1
del c:\programdata\monta.ps1
del c:\programdata\oracle.txt
c:\programdata\restart-service.exe
del c:\programdata\restart-service.exeCode: batch 代碼:批次處理
列出6F39批次檔的內容顯示以下內容
檢查文件內容後發現,批次檔刪除了兩個文件,在任何人能夠存取剩余文件之前它們就被刪除了。我們可以嘗試透過修改批次腳本並刪除來檢索這兩個檔案的內容。
@shift /0
@echo off
echo TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > c:\programdata\oracle.txt
echo AAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g >> c:\programdata\oracle.txt
<SNIP>
echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >> c:\programdata\oracle.txt
echo $salida = $null; $fichero = (Get-Content C:\ProgramData\oracle.txt) ; foreach ($linea in $fichero) {$salida += $linea }; $salida = $salida.Replace(" ",""); [System.IO.File]::WriteAllBytes("c:\programdata\restart-service.exe", [System.Convert]::FromBase64String($salida)) > c:\programdata\monta.ps1雙擊執行批次腳本後,我們等待幾分鐘,在目錄c:\programdata\下發現oracle.txt文件,其中包含另一個充滿 base64 行的文件,以及包含以下內容的腳本monta.ps1 。列出檔案monta.ps1的內容會顯示以下程式碼。
C:\> cat C:\programdata\monta.ps1
$salida = $null; $fichero = (Get-Content C:\ProgramData\oracle.txt) ; foreach ($linea in $fichero) {$salida += $linea }; $salida = $salida.Replace(" ",""); [System.IO.File]::WriteAllBytes("c:\programdata\restart-service.exe", [System.Convert]::FromBase64String($salida))這個腳本只是讀取oracle.txt檔案的內容並將其解碼為restart-service.exe可執行檔。運行此腳本將為我們提供一個可以進一步分析的最終可執行檔。
Attacking Thick Client Applications 攻擊胖客戶端應用程式
C:\> ls C:\programdata\
Mode LastWriteTime Length Name
<SNIP>
-a---- 3/24/2023 1:01 PM 273 monta.ps1
-a---- 3/24/2023 1:01 PM 601066 oracle.txt
-a---- 3/24/2023 1:17 PM 432273 restart-service.exe
現在,當執行restart-service.exe時,我們會看到由HelpDesk在 2010 年創建的橫幅Restart Oracle 。
C:\> .\restart-service.exe
____ __ __ ____ __
/ __ \___ _____/ /_____ ______/ /_ / __ \_________ ______/ /__
/ /_/ / _ \/ ___/ __/ __ `/ ___/ __/ / / / / ___/ __ `/ ___/ / _ \
/ _, _/ __(__ ) /_/ /_/ / / / /_ / /_/ / / / /_/ / /__/ / __/
/_/ |_|\___/____/\__/\__,_/_/ \__/ \____/_/ \__,_/\___/_/\___/
by @HelpDesk 2010
PS C:\ProgramData>透過ProcMon64檢查可執行檔的執行情況表明,它正在查詢註冊表中的多個內容,但沒有顯示任何可靠的內容。
讓我們啟動x64dbg ,導航到Options - > Preferences ,然後取消選中除Exit Breakpoint之外的所有選項:
透過取消選取其他選項,偵錯將直接從應用程式的退出點開始,我們將避免瀏覽應用程式啟動前載入的任何dll檔案。然後,我們可以選擇file -> open ,並選擇restart-service.exe進行導入並開始偵錯。導入後,我們在CPU視圖內單擊滑鼠右鍵,然後Follow in Memory Map :

檢查執行此階段的記憶體映射,特別感興趣的是大小為0000000000003000的映射,其類型為MAP且保護設定為-RW-- 。

記憶體映射文件允許應用程式存取大文件,而無需一次讀取或寫入整個文件到記憶體中。相反,該檔案被映射到記憶體的某個區域,應用程式可以像記憶體中的常規緩衝區一樣讀取和寫入該區域。這可能是尋找硬編碼憑證的地方。
如果我們雙擊它,我們將在ASCII列中看到神奇位元組MZ ,這表示該檔案是DOS MZ 執行檔。

讓我們返回到「記憶體映射」窗格,然後透過右鍵單擊位址並選擇「將記憶體轉儲到檔案」將新發現的映射項目從記憶體匯出到Dump Memory to File 。在導出的文件上運行strings會揭示一些有趣的資訊。
C:\> C:\TOOLS\Strings\strings64.exe .\restart-service_00000000001E0000.bin
<SNIP>
"#M
z\V
).NETFramework,Version=v4.0,Profile=Client
FrameworkDisplayName
.NET Framework 4 Client Profile
<SNIP>讀取輸出顯示轉儲包含.NET可執行檔。我們可以使用De4Dot將 restart-service_00000000001E0000.bin 拖曳到de4dot執行檔上,將.NET執行檔反轉回原始程式碼。
de4dot v3.1.41592.3405
Detected Unknown Obfuscator (C:\Users\cybervaca\Desktop\restart-service_00000000001E0000.bin)
Cleaning C:\Users\cybervaca\Desktop\restart-service_00000000001E0000.bin
Renaming all obfuscated symbols
Saving C:\Users\cybervaca\Desktop\restart-service_00000000001E0000-cleaned.bin
Press any key to exit...
現在,我們可以透過將匯出的應用程式拖放到DnSpy可執行檔中來讀取其原始程式碼。
3️⃣ “對 C:\Apps\Restart-OracleService.exe 進行分析並識別隱藏在其原始程式碼中的憑證。使用使用者名稱:密碼格式提交答案。”
4️⃣ fat-client 應用程式中 ServerStatus -> Ipconfig 標籤下 eth0 介面的 IP 位址是什麼?
cybervaca:&aue%C)}6g-d{w產生目標機器後,學生需要先使用 RDP 使用憑證連接到目標:
代號:shell
利用胖客戶端應用程式中的 Web 漏洞
隨後,學生需要打開文件資源管理器,導航到C:\Apps並右鍵單擊fatty-client以提取文件:

將厚客戶端的內容解壓縮到一個資料夾後,學生需要進入新建立的目錄並編輯beans.xml文檔,將連接埠替換8000為1337:

此外,學生需要從中刪除哈希值META-INF/MANIFEST.MF,確保檔案以新行結尾:

此外,學生必須刪除1.RSA和1.SF文件:

儲存變更後,學生需要開啟 PowerShell 並更新fatty-client.jar,將其儲存為fatty-client-new.jar:
代碼:powershell
利用胖客戶端應用程式中的 Web 漏洞
同學們需要將新的 jar 檔案拖曳到 中jd-gui,然後選擇File--> Save All Sources:

隨後,學生需要將fatty-client-new.jar.src.zip檔案解壓縮到桌面並編輯fatty-client-new.jar.src/htb/fatty/client/gui/ClientGuiTest.java文件,將configs資料夾名稱替換為..:

儲存變更後,學生需要開啟 PowerShell 並編譯ClientGuiTest.Java檔案:
代碼:powershell
利用胖客戶端應用程式中的 Web 漏洞
然後,學生需要fatty-client-new-2.jar透過右鍵單擊並選擇來解壓縮Extract Here:

之後,學生需要htb/fatty/client/gui/*.class用更新的課程文件涵蓋所有現有文件:
代碼:powershell
利用胖客戶端應用程式中的 Web 漏洞
現在,學生可以建立新的 JAR 檔案:
代碼:powershell
利用胖客戶端應用程式中的 Web 漏洞
完成後,學生需要啟動traverse.jar並驗證身份qtc:clarabibi。然後,他們需要前往FileBrowser--> Configs,查看 start.sh 腳本:

該實用程式允許胖客戶端查看/檢索遠端伺服器上託管的文件,並揭示應用程式伺服器的存在fatty-server.jar。
現在,學生需要修改open中的函數fatty-client-new.jar.src/htb/fatty/client/methods/Invoker.java以便能夠下載檔案fatty-server.jar:
程式碼:java

程式碼:java

儲存變更後,學生需要再次重建 jar:
代碼:powershell
利用胖客戶端應用程式中的 Web 漏洞
啟動新編譯的jar,學生需要登入下載fatty-server.jar:


學生需要將 拖曳fatty-server.jar到 上jd-gui,然後點選File--> Save All Sources:

使用 JD-GUI反編譯會 顯示 包含 處理登入功能的函數的fatty-server.jar 檔案 。此函數根據提供的使用者名稱檢索使用者詳細資訊。然後,它將檢索到的密碼與提供的密碼進行比較:htb/fatty/server/database/FattyDbSession.classcheckLogin()
程式碼:java
登入按鈕 ClientGuiTest.this.user 為該類別 建立新的物件User 。然後它 使用相應的用戶名和密碼值來呼叫 setUsername() 和 函數。setPassword()然後將這些函數傳回的值傳送到伺服器:

當從中檢查setUsername() 和 setPassword() 函數 時htb/fatty/client/shared/resources/user.java,學生將知道用戶名未經任何修改就被接受,但密碼被更改為sha256用戶名值、密碼值和字串「clarabibimakeseverythingsecure」的雜湊摘要:
程式碼:java
學生會注意到使用者名稱沒有被清理並直接用於 SQL 查詢,這使得它容易受到 SQL 注入的攻擊。學生需要利用現場注入 username 來創建虛假的使用者條目:
程式碼:java
事先,學生需要編輯程式碼htb/fatty/shared/resources/User.java以從客戶端應用程式提交密碼:
程式碼:java

程式碼:java

同學需要重新編譯java類別文件,然後建立一個新的JAR:
代碼:powershell
利用胖客戶端應用程式中的 Web 漏洞
最後,學生需要執行新編譯的inject.jar並使用 SQL 注入負載(用作abc密碼)繞過登入:
程式碼:sql

成功繞過特權使用者登入後,學生最終需要檢查eth0介面的 IP 位址,發現它是172.28.0.3:


答:{隱藏}
5️⃣ 連鎖漏洞路徑(Exploit Chain)
SMB 訪問
從可存取的共享目錄下載執行檔
smbclient / net use
ProcMon 偵察
觀察 EXE 行為,發現有臨時檔案、隱藏 PowerShell 腳本
ProcMon64
修改 Temp 權限
阻止自動刪除,保留生成的 .bat、.ps1、.txt 文件
手動調整 NTFS 權限
Base64 解碼
從 oracle.txt 抽出 payload,還原成 restart-service.exe
certutil -decode 或 Python 腳本
Memory Dump
透過 x64dbg Memory Map 区域 Dump
x64dbg + strings
反混淆
使用 de4dot 還原 .NET 可執行檔
de4dot
反編譯
在 dnSpy 中獲得原始碼,找到硬編碼帳戶 / 密碼
dnSpy
服務重啟 & 本地權限升級
找到 runas 腳本可利用漏洞,自行透過 PowerShell 利用帳密重啟服務提權
PowerShell
內網橫向移動
利用硬編碼憑證登入其他 SMB / SQL Server,執行 lateral movement
psexec / crackmapexec / smbexec
✅ 範例結果展示(提取硬編碼憑證)
發現後,可用此憑證登入其他 SMB、SQL、或者 Windows AD
如目標機存在弱 SMB/WinRM,直接用
psexec.py或smbexec.py嘗試橫向滲透
🔎 高級玩法(進階連鎖漏洞)
1️⃣ 從服務中提取帳號
2️⃣ 利用帳號在內網中橫向登入(WinRM / RDP)
3️⃣ 尋找敏感檔案(如 DB 備份 / 密碼清單)
4️⃣ 攻擊 SQL Server,取得進一步 RCE
5️⃣ 使用該主機作為 Pivot,內網掃描 → 嘗試攻擊域控
✅ 如果你需要,我可以幫你製作一份:
【胖客戶端滲透測試 Cheat Sheet】PDF
附帶 Payload 清單 + 工具組合推薦 + 常見漏洞檢查路線
最后更新于
这有帮助吗?

















