quarta-feira, 30 de julho de 2008

Levantamento de Hardware via VBScript (.vbs)

VBScript (acrónimo de Microsoft's Visual Basic Scripting Edition) é um sub-sistema do Visual Basic usado em Active Server Pages em Windows Scripting Host como uma linguagem de aplicação universal (general-purpose). O VBScript é frequentemente usado em substituição dos batch files DOS.
VBScript é interpretado por um script engine, seja um ASP num ambiente web, wscript.exe num ambiente Windows, e cscript.exe num ambiente de linha de comando.
Fonte: Wikipedia

Agora que você já sabe o que é um vbs, vamos ao que interessa, eu precisava levantar rapidamente as configurações das máquinas para criar um inventário de hardware, todo mundo já fez isso e sabe que é um inferno, passar de máquina em máquina vendo as configurações, anotando, depois monta a planilha ou banco de dados, enfim sem chances.
Poderia também montar um servidor para isso, usando o OCS Inventory NG ou o Cacic, mas lembre-se eu precisava levantar rapidamente as configurações, e ae o que fazer? A solução foi um vbs.

Através do Blog do Vinicius Canto, achei o post no fórum Technet-br, excelente script gera um relatório em html com sumário, exibe as informações em sessões, maravilha; Só que ele te pergunta de qual computador você quer gerar as informações

e depois algumas opções de geração de relatório.


Ae pensei, pô mas se eu pudesse gerar esse cara via script de login, ae sim seria perfeito, não que é que o Anthony já tinha pensado nisso!! Só que o dele gerava um arquivo .xml, fiz algumas adaptações para gerar só as informações que realmente me interessavam, removi as tags xml e gerei um .txt. Depois ficou fácil gerar uma planilha com as informações.

Segue abaixo o meu script baseado nos acima:
hardware.vbs

' Modificaçao para o arquivo gerado ter o nome do computador.

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_ComputerSystem",,48)
For Each objItem in colItems
NomeComputador = objItem.Caption
Next


'----------------------------- Cria o arquivo

Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("\\IP\NOME_DO_COMPARTILHAMENTO\" & NomeComputador & ".txt", True)
txtfile.Write ("Relatório de Hardware:")
txtfile.WriteBlankLines(3)
'--------------- Software
strComputer = "."
strProperties = "*"'"CSName, Caption, OSType, Version, OSProductSuite, BuildNumber, ProductType, OSLanguage, CSDVersion, InstallDate, RegisteredUser, Organization, SerialNumber, WindowsDirectory, SystemDirectory"
objClass = "Win32_OperatingSystem"
strQuery = "SELECT " & strProperties & " FROM " & objClass
Set colOS = objWMIService.ExecQuery(strQuery, , wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem in colOS
txtfile.write ("Nome:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.CSName)
txtfile.WriteBlankLines(1)
txtfile.write ("S.O.:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.Caption)
txtfile.WriteBlankLines(1)
If SO_Type = 16 Then
SO_Name = "Microsoft Windows 95"
ElseIf SO_Type = 17 Then
SO_Name = "Microsoft Windows 98"
End If
If SO_ProdType = 1 Then
SO_ProdType = "Estação de Trabalho"
ElseIf SO_ProdType = 2 Then
SO_ProdType = "Controlador de Domínio"
ElseIf SO_ProdType = 3 Then
SO_ProdType = "Servidor"
End If
If SO_Language = 1033 Then
SO_Language = "Inglês - Estados Unidos"
ElseIf SO_Language = 1046 Then
SO_Language = "Português - Brasil"
Else
SO_Language = "Outro idioma"
End If
If SO_Suite = 1 Then
SO_Suite = "Small Business"
ElseIf SO_Suite = 2 Then
SO_Suite = "Enterprise"
ElseIf SO_Suite = 4 Then
SO_Suite = "Backoffice"
ElseIf SO_Suite = 8 Then
SO_Suite = "Communication Server"
ElseIf SO_Suite = 16 Then
SO_Suite = "Terminal Server"
ElseIf SO_Suite = 18 Then
SO_Suite = "Enterprise e Terminal Server"
ElseIf SO_Suite = 32 Then
SO_Suite = "Small Business (Restrito)"
ElseIf SO_Suite = 64 Then
SO_Suite = "Embedded NT"
ElseIf SO_Suite = 128 Then
SO_Suite = "Data Center"
ElseIf SO_Suite = 256 Then
SO_Suite = "Single User"
ElseIf SO_Suite = 512 Then
SO_Suite = "Personal"
ElseIf SO_Suite = 1024 Then
SO_Suite = "Blade"
End If
Next
'------------------------------------------------------ Usuario----
txtfile.WriteBlankLines(1)
txtfile.write ("Usuário:")
txtfile.WriteBlankLines(1)
objClass = "Win32_ComputerSystem"
strQuery = "SELECT " & strProperties & " FROM " & objClass
Set colSys = objWMIService.ExecQuery(strQuery, , wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem in colSys
txtfile.write (objItem.UserName)
txtfile.WriteBlankLines(1)
Next
'-------------------------------Processador
txtfile.write("Processador:")
txtfile.WriteBlankLines(1)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Processor",,48)
For Each objItem in colItems
'------------------------------------------------- Nome do processador
txtfile.write (objItem.name)
txtfile.WriteBlankLines(1)
'------------------------------------------------- Clock
txtfile.write ("Clock:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.CurrentClockSpeed & " MHZ")
txtfile.WriteBlankLines(1)
Next
'----------------------------------Memoria
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_physicalmemory",,48)
For Each objItem in colItems
'------------------------------------------------- Nome do Banco
txtfile.write ("Memória:")
'------------------------------------------------- Capacidade
txtfile.write ("Capacidade:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.capacity/1048576)
txtfile.WriteBlankLines(1)
Next
'---------------------------------- hd
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_diskdrive",,48)
For Each objItem in colItems
'------------------------------------------------- modelo do disco
txtfile.write ("Disco:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.caption)
txtfile.WriteBlankLines(1)
'----------------------------------------------------- Interface
txtfile.write ("Interface:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.interfacetype)
txtfile.WriteBlankLines(1)
'----------------------------------------------------- Tamanho
txtfile.write ("Tamanho:")
txtfile.WriteBlankLines(1)
txtfile.write (int(objItem.size/1073741824) & " GB")
txtfile.WriteBlankLines(1)
Next
'------------------------------------------------- Nome do adaptador
strComputer = "."
strProperties = "Description, MACAddress, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, DNSDomain, DNSDomainSuffixSearchOrder, DHCPEnabled, DHCPServer, WINSPrimaryServer, WINSSecondaryServer, ServiceName"
objClass = "Win32_NetworkAdapterConfiguration"
strQuery = "SELECT " & strProperties & " FROM " & objClass & " WHERE IPEnabled = True AND ServiceName <> 'AsyncMac' AND ServiceName <> 'VMnetx' AND ServiceName <> 'VMnetadapter' AND ServiceName <> 'Rasl2tp' AND ServiceName <> 'PptpMiniport' AND ServiceName <> 'Raspti' AND ServiceName <> 'NDISWan' AND ServiceName <> 'RasPppoe' AND ServiceName <> 'NdisIP' AND ServiceName <> ''"
Set colAdapters = objWMIService.ExecQuery(strQuery, , wbemFlagReturnImmediately + wbemFlagForwardOnly)
'--------------------------------------------------------rede
For Each objItem in colAdapters
'For Each objItem in colItems
txtfile.write ("Adaptador:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.Description)
txtfile.WriteBlankLines(1)
'------------------------------------------------- IP
txtfile.write ("IP:")
txtfile.WriteBlankLines(1)
IP_Address = objItem.IPAddress
txtfile.write (IP_Address(i))
txtfile.WriteBlankLines(1)
Next

terça-feira, 22 de julho de 2008

Descobrindo a senha de Adm do XP e do VISTA (Isso mesmo Descobrindo!!!)

Fonte:
Ophcrack

Todo Administrador de Redes está acostumado com Live CD de Linux que são usados para zerar a senha de adm do Windows XP e Vista, como por exemplo o Hiren's Boot CD, mas a proposta do Ophcrack é diferente, ele não zera a senha, ele lê a SAM e exibe todos os usuários locais e qual a senha deles.

Prático não? Se você tiver acesso fisíco a máquina basta iniciar com este Live CD, descobrir a senha de adm da máquina, usar para seus propósitos e depois deslogar ;-)

Obs: As informações contidas neste post são para Administradores de Rede, não me resposabilizo pelo uso indevido da ferramenta.