[HACK] Re: W2k y la linea de commandos

g4nd4lf g4nd4lf at terra.es
Thu May 8 13:28:53 CEST 2003


Creo que si nos miramos el API de win32 se puede sacar algo en claro sobre
RunAs y otras
posibilidades.

Existen dos formas basicas de impersonar:

- ImpersonateLoggedOnUser()

- CreateProcessAsUser()

La primera cambia el contexto de seguridad del thread actual, se puede
retornar al contexto anterior
usando la funcion RevertToSelf(), al no modificar el Token de seguridad
primario del proceso
queda claro que si se crea otro proceso desde ese thread impersonado lo hara
con el contexto
de seguridad inicial.

La segunda crea un proceso con un Token de seguridad primario igual a la del
usuario que hemos impersonado,
no es reversible y todos los procesos y threads que se creen desde ese nuevo
proceso tendran por defecto
el nuevo contexto de seguridad.

Las dos funciones dependen de LogonUser para crear el nuevo Token de
seguridad, para usar esa funcion
se necesita de un privilegio que nadie tiene por defecto (excepto SYSTEM)
'Act as part of the operating system',
la segunda necesita ademas otro que tampoco esta por defecto ''Replace a
process level token'.

Esto explica porque runas  necesita de un servicio que corra como SYSTEM, de
esa forma cualquier usuario
puede impersonar sin necesidad de tocar sus privilegios.

Tambien podemos deducir que runas utiliza la segunda de las funciones, por
ello podriamos asegurar
que los procesos creados con runas deberian comportarse correctamente sin
temor a 'cosas raras'.

Mirando estrictamente el API de win32 nos damos cuenta que no se puede crear
ningun token
de seguridad si no es sabiendo su login y pass (LogonUser ) o teniendo
privilegios para sacarlo de un
proceso activo (OpenProcessToken).

Mirando los privilegios de Win2k nos damos cuenta que existe uno muy
sugerente 'Create a token object',
evidentemente el SO tiene que poder crear tokens de seguridad desde zero sin
tener que saber la pass
de ningun usuario, en la misma documentacion de Win nos habla de ese
privilegio y de una funcion del
api nativa asociada NtCreateObject, esa funcion ya ha sido utilizada y
existe extensa documentacion
en internet.

En definitiva, un usuario pelao no podra hacer un su en Win2K si no es
apoyado por un servicio que corra
sobre SYSTEM u otra cuenta que tenga ciertos privilegios, tambien a destacar
que un su que no necesite
password se debe apoyar sobre SYSTEM o una cuenta con el privilegio 'Create
a token object' que da
acceso a todo el sistema.



More information about the hacking mailing list