0Pricing
Security+ Academy · Aula

Injeção de SQL e injeção de comandos

Aprenda como os invasores criam cargas de injeção que manipulam consultas de banco de dados ou comandos do OS, e como consultas parametrizadas e validação de entrada as impedem.

Injeção de SQL e injeção de comandos é uma aula grátis de Security+ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Security+ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Security+ Academy inclui 4 aulas no total.

O que é SQL Injection

SQL injection (SQLi) ocorre quando um invasor insere ou “injeta” código SQL malicioso em um campo de entrada que depois é passado para uma consulta ao banco de dados. Como a aplicação concatena a entrada do usuário diretamente em uma instrução SQL, o banco de dados não consegue distinguir entre dados legítimos e Commands fornecidos pelo invasor. A SQLi aparece consistentemente entre as vulnerabilidades Web mais perigosas do OWASP Top 10.

Exemplo clássico de carga maliciosa de SQLi

Uma consulta de login vulnerável poderia ser: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. Um invasor que forneça ' OR '1'='1 como nome de usuário transforma a consulta de modo que a cláusula WHERE seja sempre verdadeira, contornando completamente a autenticação. Essa é a clássica injeção baseada em tautologia.

-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
  AND password = 'anything';
-- Returns ALL rows — auth bypassed

Tipos de SQL Injection

Os ataques de SQL injection assumem várias formas: In-band SQLi retorna os resultados diretamente na resposta HTTP (baseada em erros ou em união). A Blind SQLi infere dados por meio de respostas booleanas verdadeiras ou falsas ou de atrasos de tempo deliberados (SLEEP(5)). A Out-of-band SQLi usa canais secundários, como consultas DNS, para exfiltrar dados quando as respostas não estão visíveis.

-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeeded

Prevenção de SQLi: consultas parametrizadas

A principal defesa contra SQL injection são as consultas parametrizadas (também chamadas de instruções preparadas). Em uma consulta parametrizada, a estrutura SQL é compilada primeiro e a entrada do usuário é passada como um parâmetro separado — ela nunca pode alterar a estrutura da consulta. Essa abordagem é independente da linguagem e muito mais confiável do que apenas higienizar a entrada.

# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
    'SELECT * FROM users WHERE username=? AND password=?',
    (username, password)  # parameters, never concatenated
)

Validação de entrada como defesa em profundidade

Embora as consultas parametrizadas sejam a principal defesa, a validação de entrada fornece uma importante camada secundária. A validação por lista de permissões aceita apenas os caracteres esperados (por exemplo, somente caracteres alfanuméricos em um campo de nome de usuário) e rejeita todo o restante. A validação por lista de bloqueio impede caracteres reconhecidamente maliciosos, mas os invasores frequentemente codificam ou ofuscam as cargas maliciosas para contornar essas listas — o que torna as listas de permissões muito mais fortes.

O que é injeção de Commands

Injeção de Commands (injeção de Commands do OS) ocorre quando uma aplicação passa uma entrada de usuário não higienizada para um shell do sistema. Diferentemente de SQL injection, que tem como alvo bancos de dados, a injeção de Commands tem como alvo o próprio sistema operacional — permitindo que invasores executem Commands arbitrários com os Privileges do processo do servidor Web. Ela é classificada como de gravidade crítica e frequentemente leva ao comprometimento completo do sistema.

Exemplo de injeção de Commands

Uma aplicação Web que faz ping em um endereço IP fornecido pelo usuário poderia usar: ping -c 1 INPUT. Se um invasor fornecer 8.8.8.8; cat /etc/passwd, o shell interpreta ; como um separador de Commands e executa ambos os comandos. Os operadores de injeção comuns incluem ;, &&, ||, | e a substituição de Commands por crases.

# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd'  # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)

# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])

Prevenção de injeção de Commands

A defesa mais segura contra a injeção de Commands é evitar completamente chamar Commands do OS a partir de entradas do usuário — use funções de biblioteca que alcancem o mesmo objetivo. Quando chamadas ao shell forem inevitáveis, passe os argumentos como uma lista (nunca como uma string concatenada), desabilite a interpretação do shell, valide a entrada contra uma lista de permissões rigorosa e execute os processos com a conta de usuário de menores Privileges possível.

Contexto do OWASP: injeção no Top 10

O Top 10 da OWASP lista a Injection (que engloba injeção de SQL, NoSQL, OS e LDAP) como um dos riscos mais críticos à segurança de aplicações. A OWASP recomenda uma abordagem de defesa em profundidade: use APIs seguras que evitem o interpretador, faça a validação positiva (lista de permissões) das entradas no lado do servidor, escape os caracteres especiais usando a sintaxe específica desse interpretador e use controles de SQL, como LIMIT, para evitar a divulgação em massa de dados.

Detecção: WAFs e registro de eventos

Um Web Application Firewall (WAF) pode detectar e bloquear cargas comuns de injeção ao inspecionar solicitações HTTP em busca de padrões de assinaturas. No entanto, os WAFs podem ser contornados por meio de técnicas de codificação e não substituem práticas seguras de programação. O registro adequado de eventos da aplicação — registrando parâmetros de consulta, códigos de resposta e mensagens de erro — permite que as equipes de Security identifiquem tentativas de injeção durante a análise de incidentes.

Impacto real dos ataques de injeção

Os ataques de injeção causaram algumas das maiores violações de dados da história. A violação da Equifax em 2017 expôs 147 milhões de registros por meio de uma falha em uma aplicação Web. Uma injeção de SQL contra a rede da Sony PlayStation comprometeu 77 milhões de contas em 2011. Esses incidentes mostram que as falhas de injeção têm um impacto extremo nos negócios: roubo de dados, multas regulatórias, danos à reputação e responsabilidade jurídica são consequências de um ataque de injeção bem-sucedido.

Verificação rápida

Teste sua compreensão dos conceitos de CompTIA Security+ (SY0-701) abordados nesta lição.

Recapitulação da lição

Nesta lição, você aprendeu: a injeção de SQL explora entradas não sanitizadas concatenadas em consultas ao banco de dados, a injeção de comandos passa entradas Malicious ao shell do OS por meio de operadores como ; e | e consultas parametrizadas e evitar shell=True são as principais defesas. A seguir, vamos explorar ataques de Cross-Site Scripting (XSS) e CSRF.

Perguntas Frequentes

A aula “Injeção de SQL e injeção de comandos” é grátis?

Sim — o texto completo de “Injeção de SQL e injeção de comandos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Security+ Academy, atualize para CoddyKit PRO. O curso de Security+ Academy inclui 4 aulas no total.

O que vou aprender em “Injeção de SQL e injeção de comandos”?

Aprenda como os invasores criam cargas de injeção que manipulam consultas de banco de dados ou comandos do OS, e como consultas parametrizadas e validação de entrada as impedem. Você pratica Security+ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Security+ Academy?

Nenhuma experiência prévia é necessária. Security+ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Injeção de SQL e injeção de comandos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Security+ Academy?

Sim. Cada aula de Security+ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Injeção de SQL e injeção de comandos
  2. Cross-site scripting (XSS) e CSRF
  3. Autenticação comprometida e desserialização insegura
  4. SDLC seguro e ferramentas SAST e DAST
← Voltar para Security+ Academy