systeminfo# Procura por toda linha que tem "Os" ou "Name"systeminfo|findstr"Os Name"# Pegando HotFix para sabermos até onde o SO está atualizadawmicqfegetHotFixID,InstalledOn# Quando se usar o "/C:", o findstr procura pela string completa e não por parte delasysteminfo|findstr/B/C:"OS Name"/C:"OS Version"/C:"System Type"# Enumerando driver e módulos do Kerneldriverquery.exe/v/focsv|ConvertFrom-CSV|Select-Object'Display Name','Start Mode',Path# Listando os drivers instaladosdriverquery/v# Informações sobre partições do discowmicvolumegetLabel,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace# Listando as variáveis de ambienteset# Programas que são iniciados junto com o SOwmicstartupgetCaption,Command,Location,User# Acessando registroregquery"HKLM\Software\Microsoft\Windows\CurrentVersion\run"
Executando o prompt de comando com outro usuário. Pode ser qualquer usuário e qualquer executável, não precisa ser necessariamente o cmd. Após isso, basta inserir a senha do usuário.
# Desabilitando um serviçoSet-Service<service>-StartupTypeDisabled
Detalhes sobre um determinado serviço
scqc<service>
Verificando status do serviço
sc query <service>
Processos
Listando todos os processo
pstasklisttaslist/SVC# No exemplo abaixo, estamos utilizando o serviço winloginwmicprocesslistbrief|find"winlogon"# Verificando qual usuário está executando determinado serviçotasklist/V|findstr<service>
Matando processo
taskkill/PID<number_pid>/Ftaskkill-pid<pid>
Schedule
Visualizando todas as tarefas agendadas
schtasks/query/foLIST/v
Redes
Informações básicas
ipconfig/allrouteprintarp-A
Mapeando Unidade de Rede
netusez: \\<ip>\SYSVOL# Atribuindo a letra "z"netuse* \\<ip>\SYSVOL# Atribuindo a primeira letra disponívelnetusez: \\<ip>\<directory><pass>/user:<user># Atribiundo a letra "z" e fornecendo os dados para realizar a autenticação
Acessando Unidade de Rede
netuse \\<ip>\IPC$ ""/u:""
Removendo uma Unidade de Rede
netusez:/del
Removendo todas as Unidades de Rede
net use * /delete
Conexões
Abaixo, podemos lista todas as conexões remotas, assim seus processos, portas e PID.
netstat-ano
Acessando Hosts Remotos
PSExec
Acessando localmente com a conta de outro usuário. Note que após isso, será necessário informar a senha
PSRemoting vem habilitado por padrão nos Windows Servers (a partir do 2012) e em máquinas Windows 10, é preciso habilitar manualmente (vide comando abaixo) onde é preciso ter direitos de administrador local
Enable-PSRemoting-Force
Existe, duas maneiras de realizar o acesso via PSRemoting:
Sem Estado = Dessa maneira não segura uma sessão, por exemplo, se criar variáveis, sair e voltar nomente a acessar a máquina, as variáveis serão perdidas. Ao fazer isso, você irá estar logado na máquina alvo.
Enter-PSSession-Computer<hostname.domain.local>
Com Estado = Semelhante a forma anterior, porém esse pode manter uma sessão ativa (persistiva)
# Criando a conexão$session = New-PSSession -ComputerName <hostname># Verificando se a conexão foi criada$session# Acessando o hostEnter-PSSession-Session $session
OBS.: Sempre que uma sessão for aberta pelo PSRemoting, é executado um novo processo em wsmprovhost.
Invoke-Command
Também podemos executar comandos em um determinado computador ou em um lista de computadores. Isso é útil para executar scripts de forma massiva. Substitua o -ComputerName por -Session, caso tenha sessões ativas (verifique acima como criar uma sessão).
# Executando comandos em uma determinada máquinaInvoke-Command-ComputerName<hostname.domain.local>-Credential<user>-ScriptBlock{<command>,<command>}# Executando comandos em vários máquina através de wordlistInvoke-Command-ScriptBlock{<comand>,<command>}-Credential<user>-ComputerName (Get-Content <hostname_wordlist.txt>)
Caso queira executar arquivos ps1 em uma máquina de destino, não é preciso fazer o upload do arquivo na máquina alvo, muito menos acessá-la e depois fazer o download. Para isso podemos fazer de forma remota, executando o arquivo em memória. Note que esse arquivo será executada na máquina do atacante e então será disponibilizada para a máquina alvo, então execute Set-ExecutionPolicy antes.
Para melhorar mais a vida do atacante, é possível carregar um script malicioso (por exemplo, o mimikatz) localmente e chamar a função remotamente. Sendo assim, nós carregamos todo o Mimikatz na máquina atacante e, na hora de executar o script (após ter carregado o ps1), vamos chamá-lo de fato, porém este vai ser executado remotamente na máquina alvo.
Verificando todas configurações do Windows Defender
(Get-MpPreference)
Para verificar uma determinada configuração do Windows Defender, coloque o seu nome no sufixo do comando. No comando abaixo, utilizamos o ExclusionPath para saber em quais diretórios o Windows Defender não está atuando.
(Get-MpPreference).ExclusionPath
Para desabilitarmos a proteção em tempo real do Windows Defender, podemos utilizar o seguinte comando:
Set-MpPreference-DisableRealtimeMonitoring $true
Gerenciando Usuários e Grupos
# Listando todos os usuário locaisnetuser# Verificando todos os usuários (Locais e AD) e seus respectivos SID/RIDwmicuseraccountlistbrief# Lista todos os usuários do Domínionetuser/domain# Vendo detalhes de um determinado usuário localnetuser<user># Verificando detalhes de um usuário do Domínionetuser/domain<user># Desativando a conta de um usuários no Domínionetuser<user>/domain/active:no# Visualiza todos os grupos do Domínionetgroup/domain# Vendo membros e grupos de domínionetgroup/domain<group_name># Adicionando um usuário em um grupo do ADnetgroup"<group>"<user>/add/domain# Removendo um usuário em um grupo do ADnetgroup"<group>"<user>/del/domain# Criando usuárionetuser<user>/addnetuser<user><password>/addnetuser<user><password>/add/domain# Criando usuário (Powershell)$securestring = convertto-securestring "<new_password>" -asplaintext -forceNew-LocalUser'<new_user>'-Password $secure# Alterando senha via comando no Windowsnetuser<usuario><nova_senha># Deletando um usuárionetuser<user>/delete# Ativa o usuário <usuario>netuser<usuario>/active:yes# Adicionando o Usuário ao grupo de Administratorsnetlocalgroupadministrators<user>/addnetlocalgroupadministrators/add<user>Add-LocalGroupMember-Name'<group_name>'-Member'<user>'# Removendo o Usuário ao grupo de Administratorsnetlocalgroupadministrators<user>/delete# Verifica quais os usuários que fazem parte do grupo AdministratorsnetlocalgroupAdministrators# Verifica quais os usuários que fazem parte do gruponetlocalgroup/domain# Quais usuários/grupos tem no SOnetusersnetlocalgroup# Verificando usuários logados computador atualquerysession# Verificando usuários logados computador remoto (necessário ter privilégio administrador)querysession/server:<host>
Arquivos Importantes
c:\Pagefile.sys = Também chamado de memória virtual, é um arquivo criado pelo Windows para compensar a capacidade limitada da Memória RAM. Essa memória (no HD) será utilizada quando a RAM estiver cheia, semelhante ao SWAP do Linux
Recuperando Senhas
Para recuperar a senha do Windows, precisamos de dois arquivos: system e SAM. Depois de ter esses dois arquivos, você pode extrair o hashed usando o pwdump, desta forma:
pwdumpsystemfilesamfile
Os arquivos system e SAM podem ser encontrados em locais diferentes, então experimente todos eles. Em um servidor da Web, o caminho pode diferenciar maiúsculas e minúsculas, embora seja o Windows. Abaixo estão os caminhos mais comuns:
ATENÇÃO.: Para acessar o arquivo SAM, precisa estar como usuário system, pois nem o usuário administrador tem acesso a esse arquivo. No registro (regedit), podemos localizá-lo em HKEY_LOCAL_MACHINE\SAM.
Nos Controladores de Domínio (Domain Controller), o arquivo está em %windir%\WindowsDS\ntds.dit
Buscando por Paths de Serviços sem Aspas (Unquoted Service Paths)
driverquery# Verificando a versão de determinado driver. Remova o filtro com Where-Object para retornar todos os driversGet-WmiObjectWin32_PnPSignedDriver|Select-ObjectDeviceName,DriverVersion,Manufacturer|Where-Object{$_.DeviceName-like"*Microsoft*"}