Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: FJDA en 12 Octubre 2017, 22:44 pm



Título: Crear una carpeta de acceso denegado
Publicado por: FJDA en 12 Octubre 2017, 22:44 pm
hola, estoy intentado crear una carpeta como la de SYSTEM INFORMATION.

(https://www.vichaunter.org/wp-content/uploads/2016/12/system-volume-information-ubicacion-no-disponible.jpg)

Hace poco hice una reparación de disco y se crearon unas carpetas

found.000
found.001
found.002

resulta que éstas carpetas son idénticas en comportamiento a las de 'system information'

La única manera de acceder a éstas carpetas es desde fuera del sistema. Ni en modo seguro se puede. O bien desde Linux, un disco de arranque o algo así.

Entonces tengo la curiosidad de cómo se crean estas carpetas.

He conseguido crear carpetas que deniegan el acceso con net y consola pero son fáciles de volver a hacerlas accesibles con simples comandos de consola.


gracias



Para anticiparme a posibles ejemplos. Esto no sirve:
Código
  1.        Dim fs As FileSystemSecurity = File.GetAccessControl(TextBox1.Text)
  2.        fs.AddAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny))
  3.        File.SetAccessControl(TextBox1.Text, CType(fs, FileSecurity))

No permite acceder pero el cuadro que muestra no es el mismo.




He estado un buen rato investigando y parece un tema relacionado permisos y auditoría de una carpeta o directorio.

Al hacer clic en la carpeta found.000 con el botón derecho. pestaña SEGURIDAD/OPCIONES AVANZADAS.

Vemos las pestañas Permisos y Auditoría. Toqueteando un poco y activando todos los permisos para mí, conseguí abrir la carpeta y además volverla al estado de "acceso denegado".

Ahora es cuestión de aplicarlo usando NET  :-\.

Continuaré investigando...


Título: Re: Crear una carpeta de acceso denegado
Publicado por: Eleкtro en 13 Octubre 2017, 11:08 am
resulta que éstas carpetas son idénticas en comportamiento a las de 'system information'

La única manera de acceder a éstas carpetas es desde fuera del sistema. Ni en modo seguro se puede. O bien desde Linux, un disco de arranque o algo así.

Para poder acceder al directorio "C:\System Volume Information" y/o cualquier directorio cuyo propietario sea "SYSTEM" y donde el usuario no tenga permisos, simplemente debes tomar posesión y conceder los permisos necesarios al usuario actual. No es necesario "salirse del sistema operativo" y usar una distro de Linux, lo único que hace falta es ser un usuario con permisos de Administrador:

(https://i.imgur.com/j6ZeV5u.png)

Para que veas lo sencillo que resulta acceder, con las herramientas command-line de Windows se haría de la siguiente manera:
Código
  1. @Echo OFF
  2.  
  3. Set "dirpath=C:\System Volume Information"
  4.  
  5. "Takeown.exe" /F "%dirpath%" /R /D S
  6. "Icacls.exe" "%dirpath%" /Grant "%USERNAME%":"F" /T

Y en VB.NET para concederle permisos de control total al usuario actual (suponiendo que este sea Administrador) lo harías de la siguiente manera:

Código
  1. Dim user As IdentityReference = WindowsIdentity.GetCurrent(TokenAccessLevels.AllAccess).User
  2. Dim acl As New FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow)
  3.  
  4. Dim dirpath As String = "C:\System Volume Information"
  5. Dim ds As DirectorySecurity = Directory.GetAccessControl(dirpath)
  6. ds.ResetAccessRule(acl)
  7. ' Si deseas modificar el propietario...
  8. ' ds.SetOwner(user)
  9. '
  10. ' Si deseas modificar el grupo...
  11. ' Dim group As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
  12. ' ds.SetGroup(group)
  13. Directory.SetAccessControl(dirpath, ds)

Nota: es probable que para modificar el propietario por motivos de seguridad primero debas habilitar el privilegio de proceso SE_TAKE_OWNERSHIP_NAME:
  • Privilege Constants | MSDN (https://msdn.microsoft.com/en-us/library/windows/desktop/bb530716(v=vs.85).aspx)
  • AdjustTokenPrivileges function | MSDN (https://msdn.microsoft.com/es-es/library/windows/desktop/aa375202(v=vs.85).aspx)
( en realidad se requiere mucho más p/invoking, como implementar la estructura LUID_AND_ATTRIBUTES, llamar a la la función OpenProcessToken, LookupPrivilegeValue, etc, pero no quiero colapsarte con más enlaces a la API de Windows. )



He conseguido crear carpetas que deniegan el acceso con net y consola pero son fáciles de volver a hacerlas accesibles con simples comandos de consola.

Bueno, arriba ya te he demostrado que siendo usuario Administrador es posible tener acceso a cualquier archivo y directorio del sistema de archivos, por lo tanto creo que lo que intentas hacer no tiene mucho sentido en realidad. No puedes pretender crear un directorio que realmente sea inaccesible para un usuario Administrador (siempre que éste tengo un mínimo de conocimiento para saber como acceder).

saludos