# Compilando Exploits

### Linguagem C

#### Linux

```bash
gcc <exploit.c> -o <exploit>
```

Removendo algumas informações ao compilar para melhorar a segurança

```
gcc -s <file.c>
```

É comum passarmos pela situação onde, temos um Linux x64 e o nosso alvo (que não possui o `gcc` instalado) é um sistema x86. Nesse caso, podemos executar o comando abaixo para compilar nosso exploit. Caso seja um executável Estático (e não utilizando lib compartilhadas), adicione o parâmetro `-Static` no final do comando.

```
gcc -o <output> <output.c> -Wl,--hash-style=both -m32
```

#### Windows (Cross-Compile)

Geralmente os exploits geralmente são escritos em `C` ou usando outras linguagens de script, como `Python` / `Perl` / `PHP`. Não é uma boa decisão deixar um compilador no seu servidor, portanto, ele é "arquivado". Caso você não tenha o comando `gcc`, significa que você precisa procurar explorar no Python, Perl ou compilá-lo em uma máquina virtual que tem a versão semelhante tanto do software quanto do kernel e depois mover o arquivo executável no host de destino. Mesmo assim não podemos ter 100% de certeza de que a exploração dê certo ou que até mesmo irá travar o sistema alvo.

Abaixo vemos uma maneira de compilar um exploit para Windows, porém iremos um Linux para realizar tal compilação. Antes de começar, precisamos instalar o `mingw-64`.

```bash
sudo apt install mingw-w64
```

Feito a instalação utilize a sintaxe abaixo para compilar o exploit.

```bash
# C
i686-w64-mingw32-gcc <exploit.c> -o <exploit_32.exe>          # 32-bit 
i686-w64-mingw32-gcc <exploit.c> -o <exploit_32.exe> -lws2_32 # 32-bit
x86_64-w64-mingw32-gcc <exploit.c> -o <exploit_64.exe>        # 64-bit

# C++
i686-w64-mingw32-g++ <exploit.cc> -o <exploit_32.exe>          # 32-bit
x86_64-w64-mingw32-g++ <exploit.cc> -o <exploit_64.exe>        # 64-bit
```

{% hint style="success" %}
**DICA**: Note que no segundo comando acima, utilizamos o parâmetro adicional **`-lws2_32`**. Isso é necessário quando a compilação falha devido a chamadas no código-fonte como **`winsock2.h`**, resultando em erros como **`WSAStartup`**.
{% endhint %}

### Java

```
jar -cvf <output_file.war> <file.jsp>
```

####

#### Sites

```
# Compilando exploits para Windows, a partir de um Linux
https://arrayfire.com/cross-compile-to-windows-from-linux/
http://www.tinc-vpn.org/examples/cross-compiling-64-bit-windows-binary/
```
