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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  [VBS] Saber si eres administrador
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [VBS] Saber si eres administrador  (Leído 6,717 veces)
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
[VBS] Saber si eres administrador
« en: 23 Febrero 2014, 19:41 pm »

Hola a todos,

Estoy intentando saber si eres administrador desde vbs, he publicado este post en Visual Basic, con unos trozos de código, pero quizas con vbs es más fácil, a ver si me pueden dar ideas...  :huh: :huh:

Visual Basic: http://foro.elhacker.net/programacion_visual_basic/saber_si_eres_administrador_vb6-t409096.0.html

Saludos


En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [VBS] Saber si eres administrador
« Respuesta #1 en: 24 Febrero 2014, 00:09 am »

No le encuentro sentido a que quieras investigar la manera de llevar a cabo esta tarea en un lenguaje inferior al que estabas usando.

EDITO: Acabo de darme cuenta que, en el otro post, dices que la API no te da los resultados esperados en windows 8, bueno, esto la verdad es que en VBNET sería mucho más simple que usando API's, en 4 líneas de código, pero usando VB6 podrías probar a utilizar el método NetUserGetInfo de la WinAPI donde en el miembro usri2_priv de la estructura USER_INFO_2 se supone que podrías verificar si es admin o no.

Aquí tienes unas pistas de como usarlo: http://www.vbforums.com/showthread.php?280359-check-if-user-is-admin



De todas formas, sabiendo que el inicio de la SID del grupo de Administradores (como los demás grupos de privilegios Elevados, etc) es un identificador constante, creo que sería suficiente con listar los grupos a los que pertenece el usuario actual y buscar el SID correspondiente al grupo.

Así pues, este es mi enfoque de como hacerlo de una manera sencilla en VBS (como querías):
Código
  1. ' Check if User is an Administrator
  2. ' ( By Elektro )
  3.  
  4. Const AdminSID= "S-1-5-32-544"
  5.  
  6. UserName = CreateObject("WScript.Network").UserName
  7. IsAdmin  = Not CBool(CreateObject("WScript.Shell"). _
  8.       Run("%ComSpec% /C WhoAmI.exe /All | Find  """ & AdminSID & """", 0, True))
  9.  
  10. MsgBox "'" &     UserName    & "'" &          _
  11.       " " & "Is Administrator?: " & IsAdmin, _
  12.       64, "Administrator check"
  13.  
  14. Wscript.Quit(CInt(Not IsAdmin)) ' 0 = Success (IsAdmin), -1 = Failed (IsNotAdmin)

Saludos!


« Última modificación: 24 Febrero 2014, 00:29 am por Eleкtro » En línea



MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [VBS] Saber si eres administrador
« Respuesta #2 en: 24 Febrero 2014, 22:16 pm »

En Windows 8 siempre devuelve Falso..  :rolleyes:

Muchas gracias por la info y por el ejemplo en vbs, investigaré el método y te digo que tal  ;D

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [VBS] Saber si eres administrador
« Respuesta #3 en: 25 Febrero 2014, 06:39 am »

Si devuelve Falso es porque no eres Admin, quizás sólamente eres usuario con privilegios elevados, pero no Administrador.

PD: Yo uso Windows 8.

Saludos
En línea



fary


Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: [VBS] Saber si eres administrador
« Respuesta #4 en: 25 Febrero 2014, 09:56 am »

La función IsUserAnAdmin solo funciona desde XP a vista. Te recomiendo que uses CheckTokenMembership, que funciona desde XP hasta 8.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa376389%28v=vs.85%29.aspx

Ejemplo de la msdn en C++

Código
  1. BOOL IsUserAdmin(VOID)
  2. /*++
  3. Routine Description: This routine returns TRUE if the caller's
  4. process is a member of the Administrators local group. Caller is NOT
  5. expected to be impersonating anyone and is expected to be able to
  6. open its own process and process token.
  7. Arguments: None.
  8. Return Value:
  9.    TRUE - Caller has Administrators local group.
  10.    FALSE - Caller does not have Administrators local group. --
  11. */
  12. {
  13. BOOL b;
  14. SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
  15. PSID AdministratorsGroup;
  16. b = AllocateAndInitializeSid(
  17.    &NtAuthority,
  18.    2,
  19.    SECURITY_BUILTIN_DOMAIN_RID,
  20.    DOMAIN_ALIAS_RID_ADMINS,
  21.    0, 0, 0, 0, 0, 0,
  22.    &AdministratorsGroup);
  23. if(b)
  24. {
  25.    if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
  26.    {
  27.         b = FALSE;
  28.    }
  29.    FreeSid(AdministratorsGroup);
  30. }
  31.  
  32. return(b);
  33. }
  34.  

Un saludo.
En línea

Un byte a la izquierda.
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [VBS] Saber si eres administrador
« Respuesta #5 en: 26 Febrero 2014, 23:15 pm »

Si devuelve Falso es porque no eres Admin, quizás sólamente eres usuario con privilegios elevados, pero no Administrador.

PD: Yo uso Windows 8.

Saludos

Estoy probando tu script, y ejecutandolo en Windows XP, desde la cuenta de administrador me devuelve Falso...  :-\

La función IsUserAnAdmin solo funciona desde XP a vista. Te recomiendo que uses CheckTokenMembership, que funciona desde XP hasta 8.

He encontrado esta función, pero veo mucho código y no se muy bien que es lo que hace la función en sí  (Utiliza la función que me has dicho) :rolleyes:

Código
  1. Option Explicit
  2.  
  3. Private Const TOKEN_DUPLICATE = &H2&
  4. Private Const TOKEN_QUERY = &H8&
  5. Private Const ERROR_NO_TOKEN = 1008
  6.  
  7. Private Const SECURITY_BUILTIN_DOMAIN_RID = &H20&
  8. Private Const DOMAIN_ALIAS_RID_ADMINS = &H220&
  9. Private Const SECURITY_NT_AUTHORITY = &H5&
  10.  
  11. Private Type SID_IDENTIFIER_AUTHORITY
  12. Value(6) As Byte
  13. End Type
  14.  
  15. Private Enum SECURITY_IMPERSONATION_LEVEL
  16. SecurityAnonymous
  17. SecurityIdentification
  18. SecurityImpersonation
  19. SecurityDelegation
  20. End Enum
  21.  
  22. Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, ByRef TokenHandle As Long) As Long
  23. Private Declare Function OpenThreadToken Lib "advapi32" (ByVal ThreadHandle As Long, ByVal DesiredAccess As Long, ByVal OpenAsSelf As Long, ByRef TokenHandle As Long) As Long
  24. Private Declare Function AllocateAndInitializeSid Lib "advapi32" (ByRef pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, ByRef lpPSid As Long) As Long
  25. Private Declare Function CheckTokenMembership Lib "advapi32" (ByVal TokenHandle As Long, ByVal SidToCheck As Long, ByRef IsMember As Long) As Long
  26. Private Declare Function DuplicateToken Lib "advapi32" (ByVal ExistingTokenHandle As Long, ByVal ImpersonationLevel As Long, ByRef DuplicateTokenHandle As Long) As Long
  27. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  28. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  29. Private Declare Function GetCurrentThread Lib "kernel32" () As Long
  30. Private Declare Sub FreeSid Lib "advapi32.dll" (ByVal pSid As Long)
  31.  
  32. Public Function IsInRoleAdmin() As Boolean
  33.  
  34.    Dim NtAuthority As SID_IDENTIFIER_AUTHORITY
  35.    Dim AdminGroup As Long
  36.    Dim Success As Long
  37.    Dim hToken As Long
  38.    Dim hTokenDup As Long
  39.  
  40.    If OpenThreadToken(GetCurrentThread, TOKEN_DUPLICATE Or TOKEN_QUERY, True, hToken) = 0 Then
  41.        OpenProcessToken GetCurrentProcess, TOKEN_DUPLICATE Or TOKEN_QUERY, hToken
  42.    End If
  43.  
  44.    If DuplicateToken(hToken, SecurityImpersonation, hTokenDup) Then
  45.        ' Well-known SIDs
  46.        NtAuthority.Value(5) = SECURITY_NT_AUTHORITY
  47.        ' allocates and initializes a security identifier (SID)
  48.        Success = AllocateAndInitializeSid(NtAuthority, 2, _
  49.            SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminGroup)
  50.        If Success Then
  51.            If CheckTokenMembership(hTokenDup, AdminGroup, Success) = 0 Then
  52.                Success = 0
  53.            End If
  54.        FreeSid AdminGroup
  55.        End If
  56.    End If
  57.  
  58.    IsInRoleAdmin = Success
  59.  
  60.    CloseHandle hToken
  61.    CloseHandle hTokenDup
  62.  
  63. End Function

Es decir, por ejemplo este trozo:

Código
  1. Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, ByRef TokenHandle As Long) As Long
  2. Private Declare Function OpenThreadToken Lib "advapi32" (ByVal ThreadHandle As Long, ByVal DesiredAccess As Long, ByVal OpenAsSelf As Long, ByRef TokenHandle As Long) As Long
  3. Private Declare Function AllocateAndInitializeSid Lib "advapi32" (ByRef pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, ByRef lpPSid As Long) As Long
  4. Private Declare Function CheckTokenMembership Lib "advapi32" (ByVal TokenHandle As Long, ByVal SidToCheck As Long, ByRef IsMember As Long) As Long
  5. Private Declare Function DuplicateToken Lib "advapi32" (ByVal ExistingTokenHandle As Long, ByVal ImpersonationLevel As Long, ByRef DuplicateTokenHandle As Long) As Long
  6. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  7. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  8. Private Declare Function GetCurrentThread Lib "kernel32" () As Long

Para que necesita esas declaraciones? OpenProccess, OpenThread...  :huh:

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
fary


Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: [VBS] Saber si eres administrador
« Respuesta #6 en: 28 Febrero 2014, 21:13 pm »

Esas son las declaraciones de las funciones que se usan... Lee un poco mas sobre VB6.
En línea

Un byte a la izquierda.
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [VBS] Saber si eres administrador
« Respuesta #7 en: 1 Marzo 2014, 10:12 am »

Esas son las declaraciones de las funciones que se usan... Lee un poco mas sobre VB6.

Hasta ahí llego  :¬¬

A lo que voy es que para que se necesita abrir un proceso, un thread, etc, sólo para saber sí eres administrador..  :huh:
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
fary


Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: [VBS] Saber si eres administrador
« Respuesta #8 en: 1 Marzo 2014, 11:57 am »

Lo que hace es Obtener/Duplicar los derechos de inicio de sesión del usuario, pero   esto no es necesario de hacer ya que en el ejemplo de la msdn no lo usan, ni indican que haya que hacerlo.

Aquí te dejo el código en VB6 retocado.

Código
  1. Option Explicit
  2.  
  3.    Private Const TOKEN_DUPLICATE = &H2&
  4.    Private Const TOKEN_QUERY = &H8&
  5.    Private Const ERROR_NO_TOKEN = 1008
  6.  
  7.    Private Const SECURITY_BUILTIN_DOMAIN_RID = &H20&
  8.    Private Const DOMAIN_ALIAS_RID_ADMINS = &H220&
  9.    Private Const SECURITY_NT_AUTHORITY = &H5&
  10.  
  11.    Private Type SID_IDENTIFIER_AUTHORITY
  12.    Value(6) As Byte
  13.    End Type
  14.  
  15.    Private Enum SECURITY_IMPERSONATION_LEVEL
  16.    SecurityAnonymous
  17.    SecurityIdentification
  18.    SecurityImpersonation
  19.    SecurityDelegation
  20.    End Enum
  21.  
  22.    Private Declare Function AllocateAndInitializeSid Lib "advapi32" (ByRef pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, ByRef lpPSid As Long) As Long
  23.    Private Declare Function CheckTokenMembership Lib "advapi32" (ByVal TokenHandle As Long, ByVal SidToCheck As Long, ByRef IsMember As Long) As Long
  24.    Private Declare Sub FreeSid Lib "advapi32.dll" (ByVal pSid As Long)
  25.  
  26.    Private Sub form_load()
  27.        If IsInRoleAdmin Then
  28.            MsgBox "admin"
  29.        Else
  30.            MsgBox "NO"
  31.        End If
  32.    End Sub
  33.  
  34.    Public Function IsInRoleAdmin() As Boolean
  35.  
  36.       Dim NtAuthority As SID_IDENTIFIER_AUTHORITY
  37.       Dim AdminGroup As Long
  38.       Dim Success As Long
  39.           ' Well-known SIDs
  40.           NtAuthority.Value(5) = SECURITY_NT_AUTHORITY
  41.           ' allocates and initializes a security identifier (SID)
  42.           Success = AllocateAndInitializeSid(NtAuthority, 2, _
  43.               SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminGroup)
  44.  
  45.               If CheckTokenMembership(0, AdminGroup, Success) = 0 Then
  46.                   Success = 0
  47.               End If
  48.           FreeSid AdminGroup
  49.  
  50.       IsInRoleAdmin = Success
  51.  
  52.    End Function
  53.  
  54.  
« Última modificación: 1 Marzo 2014, 12:04 pm por mDrinky » En línea

Un byte a la izquierda.
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [VBS] Saber si eres administrador
« Respuesta #9 en: 5 Marzo 2014, 21:44 pm »

La función IsUserAnAdmin solo funciona desde XP a vista. Te recomiendo que uses CheckTokenMembership, que funciona desde XP hasta 8.

Gracias por la solucion en VB, pero al final he decidido hacerlo en C++, y probando la funcion que me has dicho, me da el siguiente error:

Citar
error: 'CheckTokenMembership' was not declared in this scope

Header: Winbase.h (include Windows.h)

Como lo puedo solucionar? El código esta copiado de http://msdn.microsoft.com/en-us/library/windows/desktop/aa376389%28v=vs.85%29.aspx y no va... :rolleyes:

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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