Como objetivo de colaborar com o dia-a-dia das tarefas diárias dos Administradores de Redes e Analista de Segurança da Informação eu optei em compartilhar esta ferramenta que desenvolvi utilizando PowerShell, HTML, JavaScript. O objetivo do ADRT é basicamente extrair informações úteis do Active Directory e exibir-las de forma amigável a fim de auxiliar na geração de indicadores e na realização de auditorias.
Após realizar o download do adrt.zip descompacte em qualquer diretório (recomendado: C:\adrt). Execute o comando dir para listar os scripts.
cd adrt
dir
02 – Passo
Execute o script principal adrt.ps1 para visualizar o menu com todas as opções de relatórios.
.\adrt.ps1
03 – Passo
Informe o numero 00 para realizar as configurações como: Nome da Empresa, Seu Nome e Dados de E-mail.
[ 00 ] Config Tool
Enter a number: 00
Altere os valores nas linhas: 8, 10, 12, 14, 16 e 18
Para o envio de e-mail você pode utilizar um serviço de SMTP autenticado ou um Servidor Local, no Artigo abaixo eu mostro como montar um servidor de e-mail local usando Postfix, mas você tem diversas alterativas para fazer isso.
Artigo : Servidor de E-mail com Postfix + SquirrelMail + Outlook [ visualizar ]
04 – Passo
Após alterar as configurações com os seus dados basta informar um número correspondente a um relatório que deseja receber. exemplo :
[ 01 ] All Users
Enter a number: 01
05 – Passo
O relatórios gerados são armazenados na pasta ad-reports\ad-users.
Relatório
HTML : ad-users-2018-7-9.html CSV : ad-users-2018-7-9.csv
HTML – ad-users-2018-7-9.html
06 – Passo
E-mail enviado com os relatórios em anexo!
07 – Passo
Outa opção é a extração completa de todos os relatórios disponíveis na opção 14.
[ 14 ] All Reports
Enter a number: 14
Esta opção inicia uma Interface Web para facilitar a navegação em todos os relatórios gerados. Basta clicar no botão correspondente ao relatório que deseja visualizar :
Veja um vídeo explicativo:
Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.
Já precisou realizar o download de algum arquivo em Powershell e teve dificuldades? Este tutorial visa fornecer métodos simples e rápidos de realizar download utilizando Powershell e como carregar scripts Powershell em memória.
O Powershell é uma ferramenta poderosa usada por muitos administradores de sistemas para automatizar tarefas e gerenciar sistemas Windows. Porém, a mesma funcionalidade que torna o Powershell tão útil também pode ser explorada por criminosos cibernéticos. Uma técnica que tem sido usada com frequência é o carregamento de script em memória, que envolve o download de um script malicioso e sua execução em um sistema comprometido.
Carregar script .ps1 em memória
Primeiramente vamos ver alguns métodos para carregar scripts .ps1 em memória. Esta técnica é extremamente útil quando estamos lidando com algum antivírus ou EDR durante nosso pentest.
Para utilizar este método se faz necessário um arquivo XML com o comando a ser executado. Neste caso estamos executando o comando $env:computername, que retorna o hostname da máquina:
Em seguida, basta executar o comando abaixo na máquina Windows:
Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.
Hoje vamos demostrar com você pode administrar os serviços do Windows pelo PowerShell, a versão que estamos usando é a PowerShell7.4
Há oito cmdlets de Serviço principal, projetados para uma ampla variedade de tarefas de serviço. Este artigo analisa apenas a listagem e a alteração do estado de execução dos serviços. Você pode obter uma lista de cmdlets de serviço usando Get-Command *-Service. Você pode encontrar informações sobre cada cmdlet usando Get-Help , como Get-Help New-Service.
Obtenção de serviços Get-Service
É possível obter os serviços em um computador local ou remoto usando o cmdlet Get-Service, usar o comando Get-Service sem parâmetros retornará todos os serviços. Você pode filtrar por nome, até mesmo usando um asterisco como um caractere curinga:
PS> Get-Service -Name se*
Status Name DisplayName
------ ---- -----------
Running seclogon Secondary Logon
Running SENS System Event Notification
Stopped ServiceLayer ServiceLayer
Como nem sempre é aparente qual é o nome real do serviço, você pode achar que precisa localizar os serviços pelo nome de exibição passando o parâmetro -DisplayName. Você pode pesquisar por nome específico, usar caracteres curinga ou fornecer uma lista de nomes de exibição:
PS> Get-Service -DisplayName se*
Status Name DisplayName
------ ---- -----------
Running lanmanserver Server
Running SamSs Security Accounts Manager
Running seclogon Secondary Logon
Stopped ServiceLayer ServiceLayer
Running wscsvc Security Center
Como obter serviços remotos
Com o Windows PowerShell, você pode usar o parâmetro -ComputerName do cmdlet Get-Service para obter os serviços em computadores remotos. O parâmetro -ComputerName aceita vários valores e caracteres curinga, por isso você pode obter os serviços em vários computadores com um comando. O exemplo abaixo obtém obtém os serviços no computador remoto Server01.
Get-Service -ComputerName Server01
A partir do PowerShell 6.0, os cmdlets *-Service não têm o parâmetro -ComputerName. Você ainda pode obter serviços em computadores remotos com a comunicação remota do PowerShell. Por exemplo, o comando a seguir obtém os serviços no computador remoto Server02.
Você também pode gerenciar serviços com os outros cmdlets *-Service. Para obter mais informações sobre comunicação remota do PowerShell, confira about_Remote.
Obtenção dos serviços necessários e dependentes
O cmdlet Get-Service tem dois parâmetros que são muito úteis na administração de serviços:
O parâmetro RequiredServices obtém serviços dos quais depende o serviço LanmanWorkstation.
PS> Get-Service -Name LanmanWorkstation -RequiredServices
Status Name DisplayName
------ ---- -----------
Running MRxSmb20 SMB 2.0 MiniRedirector
Running bowser Bowser
Running MRxSmb10 SMB 1.x MiniRedirector
Running NSI Network Store Interface Service
O parâmetro DependentServices obtém que requerem o serviço LanmanWorkstation.
PS> Get-Service -Name LanmanWorkstation -DependentServices
Status Name DisplayName
------ ---- -----------
Running SessionEnv Terminal Services Configuration
Running Netlogon Netlogon
Stopped Browser Computer Browser
Running BITS Background Intelligent Transfer Ser…
O comando a seguir obtém todos os serviços com dependências. O cmdletFormat-Table para exibir as propriedades Status, Name, RequiredServices e DependentServices dos serviços.
O Get-Service cmdlet obtém todos os serviços no computador e envia os objetos pelo pipeline. O Where-Object cmdlet seleciona os serviços cuja propriedade DependentServices não é nula.
Os resultados são enviados pelo pipeline para o Format-List cmdlet. O parâmetro Property exibe o nome do serviço, o nome dos serviços dependentes e uma propriedade calculada que exibe o número de serviços dependentes para cada serviço.
hora fixar algumas coisas básicas
Vamos realizar um filtro utilizando as colunas status para retomar todos os serviços ativos (status running), vamos usar o cmdlet a seguir:
Get-Service Obtém todos os serviços no computador e envia os objetos pelo pipeline. O Where-Objectcmdlet seleciona apenas os serviços com uma propriedade Status igual a Running. O status é apenas uma propriedade de objetos de serviço. Para ver todas as propriedades, digite Get-Service | Get-Member.
Agora vamos realizar um filtro utilizando as colunas name para retomar os serviços desejado, para verificarmos um serviço específico, devemos usar o seguinte cmdlet:
get-service | where-object { $_.Name -eq "netlogon" } ou ainda get-service netlogon
Se quisermos validar determinados serviços com uma expressão de texto, devemos utilizar o seguinte cmdlet:
get-service | where-object { $_.Name -like "wmi*<em>" } ou ainda get-service wmi</em>
Obter serviços que começam com uma cadeia de caracteres de pesquisa e uma exclusão
Este exemplo obtém apenas os serviços com nomes de serviço que começam com win, exceto para o serviço WinRM.
Get-Service -Name "win*" -Exclude "WinRM"
Parar, iniciar, suspender e reiniciar serviços
Todos os cmdlets de serviço têm o mesmo formato geral. Os serviços podem ser especificados pelo nome comum ou pelo nome de exibição, assumindo listas e caracteres curinga como valores.
Para interromper o spooler de impressão, use:
Stop-Service -Name spooler
Para iniciar o spooler de impressão depois de interrompido, use:
Start-Service -Name spooler
Para suspender o spooler de impressão, use:
Suspend-Service -Name spooler
Para reiniciar (para e depois iniciar) o spooler de impressão, use:
Restart-Service -Name spooler
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
Observe que você recebe uma mensagem de aviso repetida sobre a inicialização do Spooler de impressão. Quando você executa uma operação de serviço mais demorada, o PowerShell o notifica de que ainda está tentando executar a tarefa.
Se você quiser reiniciar vários serviços, poderá obter uma lista de serviços, filtrá-los e então executar a reinicialização:
Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : can't stop service 'Logical Disk Manager (dmserver)' because
it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
Esses cmdlets de serviço não têm um parâmetro ComputerName, mas você pode executá-los em um computador remoto usando o cmdlet Invoke-Command. Esse comando reinicia o serviço de Spooler no computador remoto Server01.
Aqui vou trazer mais alguns exemplos que servem para os demais cmdlets anteriores, o comando a seguir reinicia os serviços que têm um nome de exibição que começa com Net, exceto para o serviço Logon de Rede:
Esse comando inicia todos os serviços de rede interrompidos no computador.
Esse comando usa o Get-Servicecmdlet para obter objetos que representam os serviços cujo nome de serviço começa com net. O operador de pipeline (|) envia o objeto de serviços para o Where-Objectcmdlet, que seleciona apenas os serviços que têm um status de parado. Outro operador de pipeline envia os serviços selecionados para o Restart-Service.
Na prática, você usaria o parâmetro WhatIf para determinar o efeito do comando antes de executá-lo.
ATENÇÃO: Restart-Service pode controlar serviços somente quando o usuário atual tem permissão para fazer isso. Se um comando não funcionar corretamente, pode ser que você não tenha as permissões necessárias.