【TryHackMe】Biohazard CTF Writeup!流れに沿って詳しく解説!

【TryHackMe】Biohazard CTF Writeup!流れに沿って詳しく解説!
  • URLをコピーしました!

今回は、TryHackMEのバイオハザードに基づいたCTFをやってみます。
ゲームのようなCTFは、初めてなのでどんな感じなのかもきになるところですね!

「TryHackMe-Biohazard:https://tryhackme.com/room/biohazard

解説は、ネタバレになりますので、注意してください。

おすすめの参考書
\楽天ポイント5倍セール!/
楽天市場
著:IPUSIRON
¥3,850 (2024/05/18 00:12時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
著:Justin Seitz, 著:Tim Arnold, 監修:萬谷 暢崇, 翻訳:新井 悠, 翻訳:加唐 寛征, 翻訳:村上 涼
¥3,520 (2024/05/18 17:48時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
目次

Introduction

「Start Machine」からターゲットマシンを起動します。

下記のように、IP Addressが表示されていればOKです!

Deploy the machine and start the nightmare(マシンをデプロイしてナイトメアを開始する)

これは、回答不要なので、ターゲットマシンを起動できたら完了にしましょう。

Answer

How many open ports?(オープンポートは何個?)

オープンしているポートを探します。使うのはnmapですね。

┌──(hacklab㉿hacklab)-[~]
└─$ nmap -sV 10.10.156.237   
Starting Nmap 7.92 ( https://nmap.org ) at 2023-04-20 20:16 JST
Nmap scan report for 10.10.156.237
Host is up (0.24s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
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 39.76 seconds

Answer

What is the team name in operation(運用中のチーム名について)

httpがオープンなので、ブラウザからアクセスしてみましょう。

ここにチーム名が記載されています。

Answer

The Mansion(ザ・マンション)

Collect all necessary items and advanced to the next level. The format of the Item flag:
(必要なアイテムを集めて、次のレベルへ進んでください。アイテムフラッグの形式です:)

Item_name{32 character}

Some of the doors are locked. Use the item flag to unlock the door.
(一部の扉はロックされています。アイテムフラッグを使って、ロックを解除してください。)
Tips: It is better to record down all the information inside a notepad
(ヒント:メモ帳にすべての情報を記録しておくとよいでしょう。)

アイテムフラッグを集めて、攻略していくようです。

What is the emblem flag(エンブレムフラッグとは)

まずは、emblem flagを探します。
Main hallに遷移するリンクがあるので、選択してみましょう。

Main hollに移動しました。

ソースのコメントに下記の記載がありました。

<!-- It is in the /diningRoom/ -->

Dining Roomに移動してみます。

YESを選択してみましょう。

emblem{fec832623ea498e20bf4fe1821d58727}

Look like you can put something on the emblem slot, refresh /diningRoom/
(エンブレムスロットに何か入れられそうだな、/diningRoom/をリフレッシュ。)

フラグがありましたね、また/diningRoom/をrefreshしろとも書かれています。

Answer

What is the lock pick flag(ロックピックフラッグとは)

Look like you can put something on the emblem slot, refresh /diningRoom/
(エンブレムスロットに何か入れられそうだな、/diningRoom/をリフレッシュ。)

先ほどの言葉通りリフレッシュしてみます。

なんかemblem flagを入力するところがありました。
先ほど入手したのを入力してみます。

違うらしい。。。

Dining roomのソースにハッシュがあるので、解析してみました。

<!-- SG93IGFib3V0IHRoZSAvdGVhUm9vbS8= -->
┌──(hacklab㉿hacklab)-[~]
└─$ echo "SG93IGFib3V0IHRoZSAvdGVhUm9vbS8=" | base64 -d
How about the /teaRoom/ 

base64でエンコーディングされていることがわかりました。

指示通り、Tea Roomに移動してみましょう。

Lockpikリンクを押してみます。

lock pick flagがありました!

Answer

What is the music sheet flag(楽譜旗とは)

先ほどのTea Roomのパスです。

「Barry also suggested that Jill should visit the /artRoom/」とあるので、Art roomに移動してみます。

YESを押してみましょう。

Look like a map

Location:
/diningRoom/
/teaRoom/
/artRoom/
/barRoom/
/diningRoom2F/
/tigerStatusRoom/
/galleryRoom/
/studyRoom/
/armorRoom/
/attic/

どうやら、ディレクトリ(部屋)の情報らしいです。

上から言ったことのないディレクトリに移動してみましょう。

先ほど取得した、lock pick flag を入力して、submitします。

Bar Roomに入れました。
READを選択してみます。

NV2XG2LDL5ZWQZLFOR5TGNRSMQ3TEZDFMFTDMNLGGVRGIYZWGNSGCZLDMU3GCMLGGY3TMZL5

またもや、ハッシュがありますね。。。

一致しなかったので、「https://gchq.github.io/CyberChef/」を利用して、色々試してみます。

music_sheet{362d72deaf65f5bdc63daece6a1f676e}

試した結果、base32でエンコードされていたことがわかりました。もっといいやり方ないのか。。。

Answer

What is the gold emblem flag(ゴールドエンブレムフラッグとは)

一度Bar Roomにもどりました。

music_sheetがわかったので、入力してsubmitします。

YESを選択してみましょう。

gold_emblem{58a8c41a9d08b8a4e38d02a4d7ff4843}

Look like you can put something on the emblem slot, refresh the previous page

gold_emblemもありました。

Answer

What is the shield key flag(シールドキーフラッグとは)

Secret bar roomにまた戻ります。

「gold_emblem」を入力しても何も起きなかったので、1番の「emblem」を入力したところ、次の画面に遷移できました。

「rebecca」は、何かのキーでしょうか。とりあえず、これはメモをしておきます。

とりあえず、進むところがなくなったので、最初にemblemを入力しても何も起きなかった箇所に「gold emblem flag」をいれてみたらどうなるか試してみようと思います。

diningRoomに戻りましょう。
ここで、emblemのinput flagに「gold emblem flag」を入力してみます。

正しかったようです。

klfvg ks r wimgnd biz mpuiui ulg fiemok tqod. Xii jvmc tbkg ks tempgf tyi_hvgct_jljinf_kvc

文字がずらされているように見えるので、ROT13を疑ってCyberChefを試してみます。

んー、違ったようです。
https://www.boxentriq.com/code-breaking/cipher-identifier」を使って暗号文かどうか見てみましょう。

「Vigenere Cipher」でエンコードされていたようです。
Vigenereでエンコードする際は、秘密鍵が必要ですが、これは「rebecca」だと推測できます。

there is a shield key inside the dining room. The html page is called the_great_shield_key
(食堂の中に盾の鍵があります。htmlページ名はthe_great_shield_keyです。)

無事、エンコードできました。

shield_key{48a7a9227cd7eb89f0a062590798cbac}

Answer

What is the blue gem flag(ブルージェムフラッグとは)

次は、新しくdiningRoom2Fに進んでみます。

ソースを見てみると、下記のようなコメントがありました。
こちらもROT13を疑ってCyberChefを試してみます。

<!-- Lbh trg gur oyhr trz ol chfuvat gur fgnghf gb gur ybjre sybbe. Gur trz vf ba gur qvavatEbbz svefg sybbe. Ivfvg fnccuver.ugzy -->
You get the blue gem by pushing the status to the lower floor. The gem is on the diningRoom first floor. Visit sapphire.html
(ステータスを押して下の階に行くと、青い宝石が手に入ります。宝石はdiningRoom1Fにあるわよ。sapphire.htmlを見る)

予想通り、ROT13で文字列を解読できました。

文字通り、「/diningRoom/sapphire.html」を見てみます。

blue_jewel{e1d457e96cac640f863ec7bc475d48aa}

Answer

What is the FTP username(FTPのユーザー名を教えてください)

次は、FTPユーザー名を探していきます。
新しい「/tigerStatusRoom/」を覗いてみます。

「blue_jewel{e1d457e96cac640f863ec7bc475d48aa}」を入れて、submitしてみます。

crest 1:
S0pXRkVVS0pKQkxIVVdTWUpFM0VTUlk9
Hint 1: Crest 1 has been encoded twice
Hint 2: Crest 1 contanis 14 letters
Note: You need to collect all 4 crests, combine and decode to reavel another path
The combination should be crest 1 + crest 2 + crest 3 + crest 4. Also, the combination is a type of encoded base and you need to decode it

--翻訳
紋章1
S0pXRkVS0pKQkxIVVdTWUpFM0VTUlk9
ヒント1:紋章1が2回エンコードされている
ヒント2:紋章1は14文字含む
注:4つの紋章をすべて集め、合成し、解読することで別の道を進むことができます。
組み合わせは、紋章1+紋章2+紋章3+紋章4とする。また、この組み合わせは暗号化されたベースの一種であり、それを解読する必要がある

紋章を4つ組み合わせないといけない様です。
とりあえず、紋章1を解いてみます。2回のエンコードのようです。

1回目のエンコーディングが何か、base32~64を試します。

末尾が「=」になっていることから、正しくデコードしているように見えました。

次に、2回目も同じ手順を試します。

base32でデコードしてあげると、下記を得ることができました。
文字数も14文字です。多分正しそうですね。

RlRQIHVzZXI6IG

紋章2を探すために、部屋を移動します。
次は、「/galleryRoom/」に進んでみます。

EXAMINEを選択すると、紋章2が出てきました。

crest 2:
GVFWK5KHK5WTGTCILE4DKY3DNN4GQQRTM5AVCTKE
Hint 1: Crest 2 has been encoded twice
Hint 2: Crest 2 contanis 18 letters
Note: You need to collect all 4 crests, combine and decode to reavel another path
The combination should be crest 1 + crest 2 + crest 3 + crest 4. Also, the combination is a type of encoded base and you need to decode it

--翻訳
紋章2
GVFWK5KHK5WTGTCILE4DKY3DNN4GQQRTM5AVCTKE
ヒント1:紋章2が2回エンコードされている
ヒント2:紋章2は18文字含む
注:4つの紋章をすべて集め、合成し、解読することで別の道を進むことができます。
組み合わせは、紋章1+紋章2+紋章3+紋章4とする。また、この組み合わせは暗号化されたベースの一種であり、それを解読する必要がある

またまた、2回エンコードされていると。。。
同じようにbase32~64まで試してみます。

base32が正しい文字列を出せていそうです。
そのまま、2回目のデコードも試しましょう。

正しい文字列になっていたのは、base58でした。
文字数もあっているので、下記で正しいと思います。

h1bnRlciwgRlRQIHBh

次は、「/armorRoom/」に遷移して、紋章3を探してみます。(/studyRoom/は、helmet key flagが必要でした。。。)

「shield key flag」を入力して、submitしてみます。

ArmorRoomに入れました。
READを選択してみると。。

crest 3:
MDAxMTAxMTAgMDAxMTAwMTEgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAwMTEgMDAxMDAwMDAgMDAxMTAxMDAgMDExMDAxMDAgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAxMTAgMDAxMDAwMDAgMDAxMTAxMDAgMDAxMTEwMDEgMDAxMDAwMDAgMDAxMTAxMDAgMDAxMTEwMDAgMDAxMDAwMDAgMDAxMTAxMTAgMDExMDAwMTEgMDAxMDAwMDAgMDAxMTAxMTEgMDAxMTAxMTAgMDAxMDAwMDAgMDAxMTAxMTAgMDAxMTAxMDAgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTAxMTAgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTEwMDEgMDAxMDAwMDAgMDAxMTAxMTAgMDExMDAwMDEgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTEwMDEgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTAxMTEgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAxMDEgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAwMDAgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTEwMDAgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAwMTAgMDAxMDAwMDAgMDAxMTAxMTAgMDAxMTEwMDA=
Hint 1: Crest 3 has been encoded three times
Hint 2: Crest 3 contanis 19 letters
Note: You need to collect all 4 crests, combine and decode to reavel another path
The combination should be crest 1 + crest 2 + crest 3 + crest 4. Also, the combination is a type of encoded base and you need to decode it

-- 翻訳
紋章3
MDAxMTAxMTAgMDAxMTAwMTEgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAwMTEgMDAxMDAwMDAgMDAxMTAxMDAgMDExMDAxMDAgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAxMTAgMDAxMDAwMDAgMDAxMTAxMDAgMDAxMTEwMDEgMDAxMDAwMDAgMDAxMTAxMDAgMDAxMTEwMDAgMDAxMDAwMDAgMDAxMTAxMTAgMDExMDAwMTEgMDAxMDAwMDAgMDAxMTAxMTEgMDAxMTAxMTAgMDAxMDAwMDAgMDAxMTAxMTAgMDAxMTAxMDAgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTAxMTAgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTEwMDEgMDAxMDAwMDAgMDAxMTAxMTAgMDExMDAwMDEgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTEwMDEgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTAxMTEgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAxMDEgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAwMDAgMDAxMDAwMDAgMDAxMTAxMDEgMDAxMTEwMDAgMDAxMDAwMDAgMDAxMTAwMTEgMDAxMTAwMTAgMDAxMDAwMDAgMDAxMTAxMTAgMDAxMTEwMDA=
ヒント1:紋章3は3回エンコードされている
ヒント2:紋章3は19文字含む
注:4つの紋章をすべて集め、合成し、解読することで別の道を進むことができます。
組み合わせは、紋章1+紋章2+紋章3+紋章4とする。また、この組み合わせは暗号化されたベースの一種であり、それを解読する必要がある

続いては、3回エンコーディングされているとのこと。。。

まずは、素直にbase32~64で試してみます。

base64が正しそうです。
出力結果は、バイナリ(2進数データ)なので、バイナリをデコードします。

バイナリでデコードすると、Hex(16進数)がでてきました。
Hexでデコードしてみます。

デコードできました。文字数も正しそうですね!

c3M6IHlvdV9jYW50X2h

最後の部屋「/attic/」に移動します。

ここも、shleld symbolが必要です。

noteがありますね、READしてみましょう。

crest 4:
gSUERauVpvKzRpyPpuYz66JDmRTbJubaoArM6CAQsnVwte6zF9J4GGYyun3k5qM9ma4s
Hint 1: Crest 2 has been encoded twice
Hint 2: Crest 2 contanis 17 characters
Note: You need to collect all 4 crests, combine and decode to reavel another path
The combination should be crest 1 + crest 2 + crest 3 + crest 4. Also, the combination is a type of encoded base and you need to decode it

-- 翻訳
紋章4
gSUERauVpvKzRpyPpuYz66JDmRTbJubaoArM6CAQsnVwte6zF9J4GGYyun3k5qM9ma4s
ヒント1:紋章2が2回エンコードされている
ヒント2:紋章2は17文字含む
注:4つの紋章をすべて集め、合成し、解読することで別の道を進むことができます。
組み合わせは、紋章1+紋章2+紋章3+紋章4とする。また、この組み合わせは暗号化されたベースの一種であり、それを解読する必要がある

紋章2と書かれてますが、おそらく紋章4のことです。ミスだと思う。。。

とりあえず、細かいところは忘れて。。。デコードしてみましょう。
今回も今まで通り、base32~64を試してみます。

base58が正しそうです。
Hex(16進数)なので、デコードしてみます。

下記で正しそうですね。

pZGVfZm9yZXZlcg==

紋章1~4をつなげると下記になります。

RlRQIHVzZXI6IGh1bnRlciwgRlRQIHBhc3M6IHlvdV9jYW50X2hpZGVfZm9yZXZlcg==

とりあえず、Hashesをかけてみます。

base64だったようですね。FTPのuserとpassを取得できました。

FTP user: hunter, FTP pass: you_cant_hide_forever

Answer

What is the FTP password(FTPのパスワードは何ですか)

こちらは、さきほどのpassが答えになります。

Answer

The guard house(ガードハウス)

After gaining access to the FTP server, you need to solve another puzzle.
(FTPサーバーにアクセスした後、別のパズルを解く必要があります。)

とのことなので、とりあえずFTPサーバーにアクセスします。

┌──(hacklab㉿hacklab)-[~]
└─$ ftp hunter@10.10.156.237                                                     
Connected to 10.10.156.237.
220 (vsFTPd 3.0.3)
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

先ほどの、userとpassで無事FTPサーバーにアクセスできましたね。

Where is the hidden directory mentioned by Barry(Barryが言っていた隠しディレクトリはどこにあるのでしょうか)

まずは、隠しディレクトリを探すらしいです。

ftp> ls
229 Entering Extended Passive Mode (|||10379|)
150 Here comes the directory listing.
-rw-r--r--    1 0        0            7994 Sep 19  2019 001-key.jpg
-rw-r--r--    1 0        0            2210 Sep 19  2019 002-key.jpg
-rw-r--r--    1 0        0            2146 Sep 19  2019 003-key.jpg
-rw-r--r--    1 0        0             121 Sep 19  2019 helmet_key.txt.gpg
-rw-r--r--    1 0        0             170 Sep 20  2019 important.txt
226 Directory send OK.

とりあえず、ファイルと鍵らしきものがあるので、ローカルに落としておきます。

ftp> mget *
mget 001-key.jpg [anpqy?]? 
229 Entering Extended Passive Mode (|||51303|)
150 Opening BINARY mode data connection for 001-key.jpg (7994 bytes).
100% |*************************************************************************************************|  7994        2.58 KiB/s    00:00 ETA
226 Transfer complete.
7994 bytes received in 00:03 (2.39 KiB/s)
mget 002-key.jpg [anpqy?]? 
229 Entering Extended Passive Mode (|||24041|)
150 Opening BINARY mode data connection for 002-key.jpg (2210 bytes).
100% |*************************************************************************************************|  2210      849.01 KiB/s    00:00 ETA
226 Transfer complete.
2210 bytes received in 00:00 (8.78 KiB/s)
mget 003-key.jpg [anpqy?]? 
229 Entering Extended Passive Mode (|||27793|)
150 Opening BINARY mode data connection for 003-key.jpg (2146 bytes).
100% |*************************************************************************************************|  2146        1.97 MiB/s    00:00 ETA
226 Transfer complete.
2146 bytes received in 00:00 (8.56 KiB/s)
mget helmet_key.txt.gpg [anpqy?]? 
229 Entering Extended Passive Mode (|||28546|)
150 Opening BINARY mode data connection for helmet_key.txt.gpg (121 bytes).
100% |*************************************************************************************************|   121        1.94 KiB/s    00:00 ETA
226 Transfer complete.
121 bytes received in 00:00 (0.38 KiB/s)
mget important.txt [anpqy?]? 
229 Entering Extended Passive Mode (|||57273|)
150 Opening BINARY mode data connection for important.txt (170 bytes).
100% |*************************************************************************************************|   170        3.52 MiB/s    00:00 ETA
226 Transfer complete.
170 bytes received in 00:00 (0.67 KiB/s)
ftp> 

最初にみたいのは、「important.txt」ですね。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ cat important.txt 
Jill,

I think the helmet key is inside the text file, but I have no clue on decrypting stuff. Also, I come across a /hidden_closet/ door but it was locked.

From,
Barry

-- 翻訳
ジルです、

ヘルメットの鍵はテキストファイルの中にあると思うのですが、復号化の手がかりが全くありません。また、/hidden_closet/の扉に出くわしたが、鍵がかかっていた。

からです、
バリー

隠しディレクトリは、「/hidden_closet/」のようです。

Answer

Password for the encrypted file(暗号化ファイルのパスワード)

まずは、隠しディレクトリの「/hidden_closet/」を見てみます。

helmet symbolが必要とのことなので、helmet symbolを探してみましょう。
怪しいのは、helmet_key.txt.gpgなのですが、あいにく鍵がかかってます。

00x-key.jpgを解読する必要がありそうです。
1からやっていきます。最初、exiftoolで調べましたが、大した情報はありませんでした。

念のため、steghideでファイルを抽出してみたところ。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ steghide extract -sf 001-key.jpg 
Enter passphrase: 
wrote extracted data to "key-001.txt".

key-001.txtを抽出できました。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ ll
合計 28
-rw-r--r-- 1 hacklab hacklab 7994  9月 19  2019 001-key.jpg
-rw-r--r-- 1 hacklab hacklab 2210  9月 19  2019 002-key.jpg
-rw-r--r-- 1 hacklab hacklab 2146  9月 19  2019 003-key.jpg
-rw-r--r-- 1 hacklab hacklab  121  9月 19  2019 helmet_key.txt.gpg
-rw-r--r-- 1 hacklab hacklab  170  9月 20  2019 important.txt
-rw-r--r-- 1 hacklab hacklab   15  4月 20 21:55 key-001.txt
                                                                                                                                              
┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ cat key-001.txt       
cGxhbnQ0Ml9jYW

内容を確認すると、何かのハッシュっぽいです。

base64だと思うのですが、Strict modeにすると、エラーになるので、情報が足りませんね。
002-keyを解いてみましょう。

exiftoolでメタ情報をみたら、ハッシュがありました。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ exiftool 002-key.jpg                                       
ExifTool Version Number         : 12.57
File Name                       : 002-key.jpg
Directory                       : .
File Size                       : 2.2 kB
File Modification Date/Time     : 2019:09:19 15:08:31+09:00
File Access Date/Time           : 2023:04:20 21:47:47+09:00
File Inode Change Date/Time     : 2023:04:20 21:47:47+09:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : None
X Resolution                    : 1
Y Resolution                    : 1
Comment                         : 5fYmVfZGVzdHJveV9
Image Width                     : 100
Image Height                    : 80
Encoding Process                : Progressive DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 100x80
Megapixels                      : 0.008

ハッシュは、Commentにありますね。

つなげると、文字列らしきものがでてきました。
最後の003も解いていきます。

こちらもexiftoolを実行します。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ exiftool 003-key.jpg
ExifTool Version Number         : 12.57
File Name                       : 003-key.jpg
Directory                       : .
File Size                       : 2.1 kB
File Modification Date/Time     : 2019:09:19 15:19:17+09:00
File Access Date/Time           : 2023:04:20 21:47:49+09:00
File Inode Change Date/Time     : 2023:04:20 21:47:49+09:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : None
X Resolution                    : 1
Y Resolution                    : 1
Comment                         : Compressed by jpeg-recompress
Image Width                     : 100
Image Height                    : 80
Encoding Process                : Progressive DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 100x80
Megapixels                      : 0.008

こちらもCommentに「Compressed by jpeg-recompress」と記載がありました。
jpeg-recompressを使って、圧縮されているとのことなので、binwalkを使って解凍します。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ binwalk -e 003-key.jpg             

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
1930          0x78A           Zip archive data, at least v2.0 to extract, uncompressed size: 14, name: key-003.txt
2124          0x84C           End of Zip archive, footer length: 22

無事解凍できました。中身を見てみましょう。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ cd _003-key.jpg.extracted 
                                                                                                                                              
┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard/_003-key.jpg.extracted]
└─$ ll
合計 8
-rw-r--r-- 1 hacklab hacklab 216  4月 20 22:03 78A.zip
-rw-r--r-- 1 hacklab hacklab  14  9月 19  2019 key-003.txt
                                                                                                                                              
┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard/_003-key.jpg.extracted]
└─$ cat key-003.txt          
3aXRoX3Zqb2x0

key-003.txtがありましたね、最後のハッシュが見つかりました。

Answer

What is the helmet key flag(ヘルメットキーフラッグとは)

先ほどの、キーを利用してhelmet_key.txt.gpgを見てみましょう。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ gpg helmet_key.txt.gpg
gpg: *警告*: コマンドが指定されていません。なにを意味しているのか当ててみます ...
gpg: AES256.CFB暗号化済みデータ
gpg: 1 個のパスフレーズで暗号化

helmet_key.txtにhelmet key flagがありそうです。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ ll
合計 36
-rw-r--r-- 1 hacklab hacklab 7994  9月 19  2019 001-key.jpg
-rw-r--r-- 1 hacklab hacklab 2210  9月 19  2019 002-key.jpg
-rw-r--r-- 1 hacklab hacklab 2146  9月 19  2019 003-key.jpg
drwxr-xr-x 2 hacklab hacklab 4096  4月 20 22:05 _003-key.jpg.extracted
-rw-r--r-- 1 hacklab hacklab   45  4月 20 22:11 helmet_key.txt
-rw-r--r-- 1 hacklab hacklab  121  9月 19  2019 helmet_key.txt.gpg
-rw-r--r-- 1 hacklab hacklab  170  9月 20  2019 important.txt
-rw-r--r-- 1 hacklab hacklab   15  4月 20 21:55 key-001.txt
                                                                                                                                              
┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ cat helmet_key.txt    
helmet_key{458493193501d2b94bbab2e727f8db4b}

やっと、helmet_keyが取得できました。

Answer

The Revisit(リビジット)

Done with the puzzle? There are places you have explored before but yet to access.
(パズルはもういい?以前探検したことがあっても、まだアクセスできていない場所があります。)

What is the SSH login username(SSHログインユーザー名を教えてください)

まだ、helmet symbolがなくては入れていない部屋が「/studyRoom/」ですね

helmet symbolを使って入ってみます。

EXAMINEを選択すると「doom.tar.gz」がダウンロードできます。
これを解凍してみましょう。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ tar -xf doom.tar.gz 
                                                                                                                                              
┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ ll
合計 44
-rw-r--r-- 1 hacklab hacklab 7994  9月 19  2019 001-key.jpg
-rw-r--r-- 1 hacklab hacklab 2210  9月 19  2019 002-key.jpg
-rw-r--r-- 1 hacklab hacklab 2146  9月 19  2019 003-key.jpg
drwxr-xr-x 2 hacklab hacklab 4096  4月 20 22:05 _003-key.jpg.extracted
-rw-r--r-- 1 hacklab hacklab  149  4月 21 22:32 doom.tar.gz
-rw-r--r-- 1 hacklab hacklab   25  9月 20  2019 eagle_medal.txt
-rw-r--r-- 1 hacklab hacklab   45  4月 20 22:11 helmet_key.txt
-rw-r--r-- 1 hacklab hacklab  121  9月 19  2019 helmet_key.txt.gpg
-rw-r--r-- 1 hacklab hacklab  170  9月 20  2019 important.txt
-rw-r--r-- 1 hacklab hacklab   15  4月 20 21:55 key-001.txt
                                                                                                                                              
┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ cat eagle_medal.txt      
SSH user: umbrella_guest

eagle_medal.txtがあって、この中にSSHのユーザーがありました。

Answer

What is the SSH login password(SSHログインパスワードを教えてください)

もう一つ、helmet symbolがなくて入れなかった部屋が、「/hidden_closet/」ですね。

先ほど取得した、helmet symbolを入力して、submitします。

EXAMINEを選択してみます。

SSH password: T_virus_rules

SSHの鍵がありました。

Answer

Who the STARS bravo team leader(Who the STARS ブラボーチームリーダー)

これは、Closet Roomに記載がありましたね!

Answer

Underground laboratory(地下の実験室)

Time for the final showdown. Can you escape the nightmare?
(最終決戦の時だ。あなたは悪夢から逃れられるか?)

やっと、最後までたどり着きました。(長かった。。。)

Where you found Chris(クリスを見つけた場所)

とりあえず、先ほどのCloset Roomのthe MO disk 1を見てみましょう。

wpbwbxr wpkzg pltwnhro, txrks_xfqsxrd_bvv_fy_rvmexa_ajk

ハッシュがありますね。
ROT13でデコードしてみましたが、うまくいかなかったので、暗号化されているか確認してみます。

Beaufortで暗号化されているようです。
CyberChefで、Beaufortはないのですが、Vigenereでよさそうです。

キーがないので、キーを探して生きます。

先ほど、SSHできるようになったので、SSHで接続してみましょう。

┌──(hacklab㉿hacklab)-[~/tryhackme/biohazard]
└─$ ssh umbrella_guest@10.10.62.13
The authenticity of host '10.10.62.13 (10.10.62.13)' can't be established.
ED25519 key fingerprint is SHA256:dOQYq6o72K3z+Nn6HtAR4ZFXoEZklDafT3VuF728yWc.
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.62.13' (ED25519) to the list of known hosts.
umbrella_guest@10.10.62.13's password: 
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

320 packages can be updated.
58 updates are security updates.

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

Last login: Fri Sep 20 03:25:46 2019 from 127.0.0.1
umbrella_guest@umbrella_corp:~$ 

無事接続できました。

umbrella_guest@umbrella_corp:~$ ll -a
total 64
drwxr-xr-x  8 umbrella_guest umbrella 4096 Sep 20  2019 ./
drwxr-xr-x  5 root           root     4096 Sep 20  2019 ../
-rw-r--r--  1 umbrella_guest umbrella  220 Sep 19  2019 .bash_logout
-rw-r--r--  1 umbrella_guest umbrella 3771 Sep 19  2019 .bashrc
drwxrwxr-x  6 umbrella_guest umbrella 4096 Sep 20  2019 .cache/
drwxr-xr-x 11 umbrella_guest umbrella 4096 Sep 19  2019 .config/
-rw-r--r--  1 umbrella_guest umbrella   26 Sep 19  2019 .dmrc
drwx------  3 umbrella_guest umbrella 4096 Sep 19  2019 .gnupg/
-rw-------  1 umbrella_guest umbrella  346 Sep 19  2019 .ICEauthority
drwxr-xr-x  2 umbrella_guest umbrella 4096 Sep 20  2019 .jailcell/
drwxr-xr-x  3 umbrella_guest umbrella 4096 Sep 19  2019 .local/
-rw-r--r--  1 umbrella_guest umbrella  807 Sep 19  2019 .profile
drwx------  2 umbrella_guest umbrella 4096 Sep 20  2019 .ssh/
-rw-------  1 umbrella_guest umbrella  109 Sep 19  2019 .Xauthority
-rw-------  1 umbrella_guest umbrella 7546 Sep 19  2019 .xsession-errors

色々さがして、.jailcellに気になるファイルがありました。

umbrella_guest@umbrella_corp:~$ cd .jailcell/
umbrella_guest@umbrella_corp:~/.jailcell$ ll
total 12
drwxr-xr-x 2 umbrella_guest umbrella 4096 Sep 20  2019 ./
drwxr-xr-x 8 umbrella_guest umbrella 4096 Sep 20  2019 ../
-rw-r--r-- 1 umbrella_guest umbrella  501 Sep 20  2019 chris.txt
umbrella_guest@umbrella_corp:~/.jailcell$ cat chris.txt 
Jill: Chris, is that you?
Chris: Jill, you finally come. I was locked in the Jail cell for a while. It seem that weasker is behind all this.
Jil, What? Weasker? He is the traitor?
Chris: Yes, Jill. Unfortunately, he play us like a damn fiddle.
Jill: Let's get out of here first, I have contact brad for helicopter support.
Chris: Thanks Jill, here, take this MO Disk 2 with you. It look like the key to decipher something.
Jill: Alright, I will deal with him later.
Chris: see ya.

MO disk 2: albert

-- 翻訳
ジルです: クリス、あなたなの?
クリス:ジル、やっと来てくれたね。しばらく牢屋に閉じ込められていたんだ。ウィスカーが黒幕らしいよ。
ジル えっ?ウィースカー?彼が裏切り者なの?
クリス:そうだよ、ジル。残念なことに、彼は私たちをいまいましいバイオリンのように弾くんだ。
ジル まずはここから出ましょう、ブラッドに連絡してヘリコプターのサポートをお願いしてあります。
クリス:ありがとうジル、ほら、このMOディスク2を持っていってくれ。何かを読み解く鍵になりそうだ。
ジル: わかったわ、あとで彼と話すわ。
クリス:またね。

chrisがあるのは、.jailcellの中でした。
また、MO disk 2がありました。albertがキーのようですね。

Answer

Who is the traitor(裏切り者は誰なのか)

先ほど、Chrisがweaskerが裏切者だと言ってましたね。

Answer

The login password for the traitor(裏切り者のログインパスワード)

キーがわかったので、デコードしてみます。

weasker login password, stars_members_are_my_guinea_pig

weaskerのパスワードになってました。

Answer

The name of the ultimate form(究極のフォームの名前)

パスワードがわかったので、suでユーザーをweaskerに切り替えます。

umbrella_guest@umbrella_corp:~$ su weasker
Password: 
weasker@umbrella_corp:/home/umbrella_guest$ cd
weasker@umbrella_corp:~$ 

ホームディレクトリの中身を確認してみましょう。

weasker@umbrella_corp:~$ ll
total 80
drwxr-xr-x  9 weasker weasker 4096 Sep 20  2019 ./
drwxr-xr-x  5 root    root    4096 Sep 20  2019 ../
-rw-------  1 weasker weasker   29 Apr 21 06:47 .bash_history
-rw-r--r--  1 weasker weasker  220 Sep 18  2019 .bash_logout
-rw-r--r--  1 weasker weasker 3771 Sep 18  2019 .bashrc
drwxrwxr-x 10 weasker weasker 4096 Sep 20  2019 .cache/
drwxr-xr-x 11 weasker weasker 4096 Sep 20  2019 .config/
drwxr-xr-x  2 weasker weasker 4096 Sep 19  2019 Desktop/
drwx------  3 weasker weasker 4096 Sep 19  2019 .gnupg/
-rw-------  1 weasker weasker  346 Sep 20  2019 .ICEauthority
drwxr-xr-x  3 weasker weasker 4096 Sep 19  2019 .local/
drwx------  5 weasker weasker 4096 Sep 19  2019 .mozilla/
-rw-r--r--  1 weasker weasker  807 Sep 18  2019 .profile
drwx------  2 weasker weasker 4096 Sep 19  2019 .ssh/
-rw-r--r--  1 weasker weasker    0 Sep 20  2019 .sudo_as_admin_successful
-rw-r--r--  1 root    root     534 Sep 20  2019 weasker_note.txt
-rw-------  1 weasker weasker  109 Sep 20  2019 .Xauthority
-rw-------  1 weasker weasker 5548 Sep 20  2019 .xsession-errors
-rw-------  1 weasker weasker 6749 Sep 20  2019 .xsession-errors.old

どうやらweasker_note.txtが怪しそうです。

weasker@umbrella_corp:~$ cat weasker_note.txt 
Weaker: Finally, you are here, Jill.
Jill: Weasker! stop it, You are destroying the  mankind.
Weasker: Destroying the mankind? How about creating a 'new' mankind. A world, only the strong can survive.
Jill: This is insane.
Weasker: Let me show you the ultimate lifeform, the Tyrant.

(Tyrant jump out and kill Weasker instantly)
(Jill able to stun the tyrant will a few powerful magnum round)

Alarm: Warning! warning! Self-detruct sequence has been activated. All personal, please evacuate immediately. (Repeat)
Jill: Poor bastard

-- 翻訳
弱くなりました: やっと来たね、ジル。
ジル: ウィーカー!やめて、人類を滅ぼすわよ。
ウィーカー: 人類を滅ぼす?新しい」人類を作るのはどうだろう。強い者だけが生き残れる世界を。
ジル: 正気とは思えません。
ウィースカー: 究極の生命体、タイラントをお見せしましょう。

(タイラントが飛び出し、ウィースカーを即死させる)
(ジルは強力なマグナム弾数発でタイラントを気絶させることができる)

警報です: 警告!警告です!自爆装置が作動しました。すべての個人は、すぐに避難してください。(繰り返し)
ジルです: かわいそうな人

Tyrantと呼ぶようです。

Answer

The root flag(ルートフラッグ)

最後にRootフラグを取得します。

sudo -lで権限を確認してみます。

weasker@umbrella_corp:~$ sudo -l
[sudo] password for weasker: 
Matching Defaults entries for weasker on umbrella_corp:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User weasker may run the following commands on umbrella_corp:
    (ALL : ALL) ALL

なんとほぼすべての権限にアクセスができますね。
であれば、簡単です。sudo su でrootを取得しましょう。

weasker@umbrella_corp:~$ sudo su
root@umbrella_corp:/home/weasker# whoami
root
root@umbrella_corp:/home/weasker# cd
root@umbrella_corp:~# ls
root.txt
root@umbrella_corp:~# ll
total 36
drwx------  4 root root 4096 Sep 20  2019 ./
drwxr-xr-x 24 root root 4096 Sep 18  2019 ../
-rw-------  1 root root   76 Sep 20  2019 .bash_history
-rw-r--r--  1 root root 3106 Apr  9  2018 .bashrc
drwx------  2 root root 4096 Apr 26  2018 .cache/
drwxr-xr-x  3 root root 4096 Sep 19  2019 .local/
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
-rw-r--r--  1 root root  493 Sep 20  2019 root.txt
-rw-r--r--  1 root root  207 Sep 19  2019 .wget-hsts
root@umbrella_corp:~# cat root.txt 
In the state of emergency, Jill, Barry and Chris are reaching the helipad and awaiting for the helicopter support.

Suddenly, the Tyrant jump out from nowhere. After a tough fight, brad, throw a rocket launcher on the helipad. Without thinking twice, Jill pick up the launcher and fire at the Tyrant.

The Tyrant shredded into pieces and the Mansion was blowed. The survivor able to escape with the helicopter and prepare for their next fight.

The End

flag: 3c5794a00dc56c35f2bf096571edf3bf

これで、rootフラグの取得もできました!

Answer

まとめ

今回は、TryHackMEのバイオハザードに基づいたCTFをやってみました。
いやー、難しかったです。ゲーム形式?のCTFの初めてだったので、なかなかのやりごたえがありました。

ハッシュがどのようにエンコードされているか、1つづつ試してましたが、何かいいツールなどがあるのか。。。
今後探してみようと思います。

参考文献・サイト

Hassan Sheikh:https://infosecwriteups.com/tryhackme-biohazard-ctf-writeup-detailed-3d9dd491539e
Yebberdog:https://yebberdog.medium.com/try-hack-me-biohazard-walkthrough-4c43fda578ed

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

情報セキュリティを勉強するために始めたブログです。
新人のため、広い心を持って見ていただけると嬉しく思います。
楽しくプログラミングを勉強するために、「Teech Lab.」もありますので、ソフトウェア開発にも興味があればぜひ覗いて見てください!

目次