elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [APORTE] [PowerShell] Ejemplo para modificar los niveles de integridad de directorios
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [APORTE] [PowerShell] Ejemplo para modificar los niveles de integridad de directorios  (Leído 1,968 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.944



Ver Perfil
[APORTE] [PowerShell] Ejemplo para modificar los niveles de integridad de directorios
« en: 15 Abril 2025, 07:57 am »

El siguiente script, desarrollado en PowerShell, es una simple demostración de como podemos especificar un array de directorios para modificar su nivel de integridad, mediate el uso del comando ICACLS de Microsoft Windows.

Acerca de los niveles de integridad:
  👉 https://hacktricks.boitatech.com.br/windows/windows-local-privilege-escalation/integrity-levels

Cuando navegamos por un directorio con un nivel de integridad bajo, se nos mostrará la siguiente ventana de advertencia cuando se intenten copiar o mover archivos dentro o fuera de dicho directorio (utilizando el menú contextual de cortar / copiar / pegar):



Pueden comprobarlo en el directorio "C:\Users\{USUARIO}\AppData\LocalLow", que por defecto tiene un nivel de integridad bajo (Low) a menos que de alguna extraña forma esto se haya modificado en su sistema operativo.



Este comportamiento de advertencia puede resultar muy molesto, pero podemos deshacernos de esa ventana de advertencia cambiando el nivel de integridad por uno más alto (Medium):





El script lo he escrito de tal manera que se pueda embedir en un Batch-script:

Código
  1. powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
  2. "$folders = @{^
  3.    \"$env:USERPROFILE\AppData\Local\"    = @{level = 'Medium'; recurse = $false};^
  4.    \"$env:USERPROFILE\AppData\LocalLow\" = @{level = 'Medium'; recurse = $true};^
  5.    \"$env:USERPROFILE\AppData\Roaming\"  = @{level = 'Medium'; recurse = $false};^
  6.    \"$env:USERPROFILE\Desktop\"          = @{level = 'Medium'; recurse = $false};^
  7.    \"$env:USERPROFILE\Documents\"        = @{level = 'Medium'; recurse = $false};^
  8.    \"$env:USERPROFILE\Downloads\"        = @{level = 'Medium'; recurse = $false};^
  9.    \"$env:USERPROFILE\Favorites\"        = @{level = 'Medium'; recurse = $false};^
  10.    \"$env:USERPROFILE\Links\"            = @{level = 'Medium'; recurse = $false};^
  11.    \"$env:USERPROFILE\Music\"            = @{level = 'Medium'; recurse = $false};^
  12.    \"$env:USERPROFILE\Pictures\"         = @{level = 'Medium'; recurse = $false};^
  13.    \"$env:USERPROFILE\Videos\"           = @{level = 'Medium'; recurse = $false};^
  14. };^
  15. $sortedFolders = $folders.Keys ^| Sort-Object;^
  16. Write-Output \"Applying folder integrity levels...\";^
  17. Write-Output \"\";^
  18. Write-Output \"Level  | Recursive | Directory\";^
  19. Write-Output \"-------|-----------|----------\";^
  20. foreach ($folder in $sortedFolders) {^
  21.    $level = $folders[$folder].level;^
  22.    $recurseFlag = if ($folders[$folder].recurse) { '/T' } else { '' };^
  23.    $recurseText = if ($folders[$folder].recurse) { 'Yes' } else { 'No ' };^
  24.    Write-Output \"$level | $recurseText       | $folder\";^
  25.    ICACLS.exe \"$folder\" $recurseFlag /Setintegritylevel \"(OI)(CI)$level\" 2^>^$null 1^>^$null^
  26. }"



El cambio de nivel de integridad tiene efecto inmediato, no es necesario reiniciar sesión de usuario ni el PC.

* ⚠️ Antes de utilizar ese script, configurar el array con las rutas de los directorios que deseen incluir.



Como alternativa, les dejo este módulo de PowerShell, basado en la API de Windows para quien desee llevar a cabo una gestión más directa y sofisticada de los niveles de integridad sin necesidad de recurrir a comandos externos del sistema operativo como ICACLS:

  👉 https://github.com/jborean93/PSIntegrity/blob/master/PSIntegrity/PSIntegrity.psm1

Cmdlets incluídos:
Citar
Get-IntegrityLabel: Gets an instance of BaseObjectLabel for the resource specified
Remove-IntegrityLabel: Removes the mandatory integrity label set on an object
Set-IntegrityLabel: Adds or changes the mandatory integrity label set on an object

Atentamente,
Elektro.


« Última modificación: 15 Abril 2025, 08:05 am por Eleкtro » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.944



Ver Perfil
Re: [APORTE] [PowerShell] Ejemplo para modificar los niveles de integridad de directorios
« Respuesta #1 en: Ayer a las 20:14 »

⚠️ ATENCIÓN. He descubierto que al modificar/asignar un nivel de integridad al directorio 'USERPROFILE\AppData\Local', el ejecutable DISM.exe se vuelve defectuoso y devuelve el siguiente error al intentar utilizarlo:

Cita de: DISM
Código:
Error: 0x80040154

Clase no registrada

Lo he verificado en una máquina virtual mediante un proceso de prueba y error usando instantáneas (snapshots) del sistema. Esto confirma sin lugar a dudas que esa es la causa del error.

Así que si alguien ha cambiado el nivel de integridad de ese directorio con el script que compartí en el post inicial, aquí le dejo un script en PowerShell para revertir el cambio:

Código:
Install-Module -Name PSIntegrity -Scope CurrentUser
Import-Module PSIntegrity
Remove-IntegrityLabel -Path "$env:USERPROFILE\AppData\Local"
icacls "$env:USERPROFILE\AppData\Local"

Tras utilizar este script, DISM.exe vuelve a funcionar sin error 0x80040154.

Un saludo y disculpen las molestias.


« Última modificación: Ayer a las 20:15 por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines